SHOGUN v0.9.0
|
00001 /* 00002 * This program is free software; you can redistribute it and/or modify 00003 * it under the terms of the GNU General Public License as published by 00004 * the Free Software Foundation; either version 3 of the License, or 00005 * (at your option) any later version. 00006 * 00007 * Written (W) 1999-2009 Soeren Sonnenburg 00008 * Copyright (C) 1999-2009 Fraunhofer Institute FIRST and Max-Planck-Society 00009 * Copyright (C) 2010 Berlin Institute of Technology 00010 */ 00011 00012 #ifndef __FILE_H__ 00013 #define __FILE_H__ 00014 00015 #include <stdio.h> 00016 #include "base/SGObject.h" 00017 #include "lib/DataType.h" 00018 00019 namespace shogun 00020 { 00021 template <class ST> class TString; 00022 template <class ST> struct TSparse; 00023 00033 class CFile : public CSGObject 00034 { 00035 public: 00037 CFile(); 00038 00044 CFile(FILE* f, const char* name=NULL); 00045 00052 CFile(char* fname, char rw='r', const char* name=NULL); 00053 00055 virtual ~CFile(); 00056 00057 void close() 00058 { 00059 free(variable_name); 00060 free(filename); 00061 if (file) 00062 fclose(file); 00063 variable_name=NULL; 00064 filename=NULL; 00065 file=NULL; 00066 } 00067 00074 void set_variable_name(const char* name); 00075 00082 char* get_variable_name(); 00083 00085 /*virtual DataType get_data_type()=0;*/ 00086 00088 /*virtual void get_vector(void*& vector, int32_t& len, DataType& dtype);*/ 00089 00097 virtual void get_bool_vector(bool*& vector, int32_t& len); 00098 virtual void get_byte_vector(uint8_t*& vector, int32_t& len)=0; 00099 virtual void get_char_vector(char*& vector, int32_t& len)=0; 00100 virtual void get_int_vector(int32_t*& vector, int32_t& len)=0; 00101 virtual void get_real_vector(float64_t*& vector, int32_t& len)=0; 00102 virtual void get_shortreal_vector(float32_t*& vector, int32_t& len)=0; 00103 virtual void get_short_vector(int16_t*& vector, int32_t& len)=0; 00104 virtual void get_word_vector(uint16_t*& vector, int32_t& len)=0; 00106 00108 /*virtual void get_matrix( 00109 void*& matrix, int32_t& num_feat, int32_t& num_vec, DataType& dtype);*/ 00110 00119 virtual void get_bool_matrix( 00120 bool*& matrix, int32_t& num_feat, int32_t& num_vec); 00121 virtual void get_byte_matrix( 00122 uint8_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00123 virtual void get_int8_matrix( 00124 int8_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00125 virtual void get_char_matrix( 00126 char*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00127 virtual void get_int_matrix( 00128 int32_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00129 virtual void get_uint_matrix( 00130 uint32_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00131 virtual void get_long_matrix( 00132 int64_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00133 virtual void get_ulong_matrix( 00134 uint64_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00135 virtual void get_shortreal_matrix( 00136 float32_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00137 virtual void get_real_matrix( 00138 float64_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00139 virtual void get_longreal_matrix( 00140 floatmax_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00141 virtual void get_short_matrix( 00142 int16_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00143 virtual void get_word_matrix( 00144 uint16_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00146 00148 /*virtual void get_ndarray( 00149 void*& array, int32_t*& dims, int32_t& num_dims, DataType& dtype);*/ 00150 00159 virtual void get_byte_ndarray( 00160 uint8_t*& array, int32_t*& dims, int32_t& num_dims)=0; 00161 virtual void get_char_ndarray( 00162 char*& array, int32_t*& dims, int32_t& num_dims)=0; 00163 virtual void get_int_ndarray( 00164 int32_t*& array, int32_t*& dims, int32_t& num_dims)=0; 00165 virtual void get_shortreal_ndarray( 00166 float32_t*& array, int32_t*& dims, int32_t& num_dims)=0; 00167 virtual void get_real_ndarray( 00168 float64_t*& array, int32_t*& dims, int32_t& num_dims)=0; 00169 virtual void get_short_ndarray( 00170 int16_t*& array, int32_t*& dims, int32_t& num_dims)=0; 00171 virtual void get_word_ndarray( 00172 uint16_t*& array, int32_t*& dims, int32_t& num_dims)=0; 00174 00183 virtual void get_bool_sparsematrix( 00184 TSparse<bool>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00185 virtual void get_byte_sparsematrix( 00186 TSparse<uint8_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00187 virtual void get_int8_sparsematrix( 00188 TSparse<int8_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00189 virtual void get_char_sparsematrix( 00190 TSparse<char>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00191 virtual void get_int_sparsematrix( 00192 TSparse<int32_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00193 virtual void get_uint_sparsematrix( 00194 TSparse<uint32_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00195 virtual void get_long_sparsematrix( 00196 TSparse<int64_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00197 virtual void get_ulong_sparsematrix( 00198 TSparse<uint64_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00199 virtual void get_short_sparsematrix( 00200 TSparse<int16_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00201 virtual void get_word_sparsematrix( 00202 TSparse<uint16_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00203 virtual void get_shortreal_sparsematrix( 00204 TSparse<float32_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00205 virtual void get_real_sparsematrix( 00206 TSparse<float64_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00207 virtual void get_longreal_sparsematrix( 00208 TSparse<floatmax_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00210 00211 00220 virtual void get_bool_string_list( 00221 TString<bool>*& strings, int32_t& num_str, 00222 int32_t& max_string_len); 00223 virtual void get_byte_string_list( 00224 TString<uint8_t>*& strings, int32_t& num_str, 00225 int32_t& max_string_len)=0; 00226 virtual void get_int8_string_list( 00227 TString<int8_t>*& strings, int32_t& num_str, 00228 int32_t& max_string_len)=0; 00229 virtual void get_char_string_list( 00230 TString<char>*& strings, int32_t& num_str, 00231 int32_t& max_string_len)=0; 00232 virtual void get_int_string_list( 00233 TString<int32_t>*& strings, int32_t& num_str, 00234 int32_t& max_string_len)=0; 00235 virtual void get_uint_string_list( 00236 TString<uint32_t>*& strings, int32_t& num_str, 00237 int32_t& max_string_len)=0; 00238 virtual void get_short_string_list( 00239 TString<int16_t>*& strings, int32_t& num_str, 00240 int32_t& max_string_len)=0; 00241 virtual void get_word_string_list( 00242 TString<uint16_t>*& strings, int32_t& num_str, 00243 int32_t& max_string_len)=0; 00244 virtual void get_long_string_list( 00245 TString<int64_t>*& strings, int32_t& num_str, 00246 int32_t& max_string_len)=0; 00247 virtual void get_ulong_string_list( 00248 TString<uint64_t>*& strings, int32_t& num_str, 00249 int32_t& max_string_len)=0; 00250 virtual void get_shortreal_string_list( 00251 TString<float32_t>*& strings, int32_t& num_str, 00252 int32_t& max_string_len)=0; 00253 virtual void get_real_string_list( 00254 TString<float64_t>*& strings, int32_t& num_str, 00255 int32_t& max_string_len)=0; 00256 virtual void get_longreal_string_list( 00257 TString<floatmax_t>*& strings, int32_t& num_str, 00258 int32_t& max_string_len)=0; 00260 00262 /*virtual void get_vector(void*& vector, int32_t& len, DataType& dtype);*/ 00263 00271 virtual void set_bool_vector(const bool* vector, int32_t len); 00272 virtual void set_byte_vector(const uint8_t* vector, int32_t len)=0; 00273 virtual void set_char_vector(const char* vector, int32_t len)=0; 00274 virtual void set_int_vector(const int32_t* vector, int32_t len)=0; 00275 virtual void set_shortreal_vector( const float32_t* vector, int32_t len)=0; 00276 virtual void set_real_vector(const float64_t* vector, int32_t len)=0; 00277 virtual void set_short_vector(const int16_t* vector, int32_t len)=0; 00278 virtual void set_word_vector(const uint16_t* vector, int32_t len)=0; 00280 00281 00289 virtual void set_bool_matrix( 00290 const bool* matrix, int32_t num_feat, int32_t num_vec); 00291 virtual void set_byte_matrix( 00292 const uint8_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00293 virtual void set_int8_matrix( 00294 const int8_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00295 virtual void set_char_matrix( 00296 const char* matrix, int32_t num_feat, int32_t num_vec)=0; 00297 virtual void set_int_matrix( 00298 const int32_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00299 virtual void set_uint_matrix( 00300 const uint32_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00301 virtual void set_long_matrix( 00302 const int64_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00303 virtual void set_ulong_matrix( 00304 const uint64_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00305 virtual void set_shortreal_matrix( 00306 const float32_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00307 virtual void set_real_matrix( 00308 const float64_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00309 virtual void set_longreal_matrix( 00310 const floatmax_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00311 virtual void set_short_matrix( 00312 const int16_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00313 virtual void set_word_matrix( 00314 const uint16_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00316 00324 virtual void set_bool_sparsematrix( 00325 const TSparse<bool>* matrix, int32_t num_feat, int32_t num_vec)=0; 00326 virtual void set_byte_sparsematrix( 00327 const TSparse<uint8_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00328 virtual void set_int8_sparsematrix( 00329 const TSparse<int8_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00330 virtual void set_char_sparsematrix( 00331 const TSparse<char>* matrix, int32_t num_feat, int32_t num_vec)=0; 00332 virtual void set_int_sparsematrix( 00333 const TSparse<int32_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00334 virtual void set_uint_sparsematrix( 00335 const TSparse<uint32_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00336 virtual void set_long_sparsematrix( 00337 const TSparse<int64_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00338 virtual void set_ulong_sparsematrix( 00339 const TSparse<uint64_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00340 virtual void set_short_sparsematrix( 00341 const TSparse<int16_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00342 virtual void set_word_sparsematrix( 00343 const TSparse<uint16_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00344 virtual void set_shortreal_sparsematrix( 00345 const TSparse<float32_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00346 virtual void set_real_sparsematrix( 00347 const TSparse<float64_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00348 virtual void set_longreal_sparsematrix( 00349 const TSparse<floatmax_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00351 00352 00361 virtual void set_bool_string_list( 00362 const TString<bool>* strings, int32_t num_str); 00363 virtual void set_byte_string_list( 00364 const TString<uint8_t>* strings, int32_t num_str)=0; 00365 virtual void set_int8_string_list( 00366 const TString<int8_t>* strings, int32_t num_str)=0; 00367 virtual void set_char_string_list( 00368 const TString<char>* strings, int32_t num_str)=0; 00369 virtual void set_int_string_list( 00370 const TString<int32_t>* strings, int32_t num_str)=0; 00371 virtual void set_uint_string_list( 00372 const TString<uint32_t>* strings, int32_t num_str)=0; 00373 virtual void set_short_string_list( 00374 const TString<int16_t>* strings, int32_t num_str)=0; 00375 virtual void set_word_string_list( 00376 const TString<uint16_t>* strings, int32_t num_str)=0; 00377 virtual void set_long_string_list( 00378 const TString<int64_t>* strings, int32_t num_str)=0; 00379 virtual void set_ulong_string_list( 00380 const TString<uint64_t>* strings, int32_t num_str)=0; 00381 virtual void set_shortreal_string_list( 00382 const TString<float32_t>* strings, int32_t num_str)=0; 00383 virtual void set_real_string_list( 00384 const TString<float64_t>* strings, int32_t num_str)=0; 00385 virtual void set_longreal_string_list( 00386 const TString<floatmax_t>* strings, int32_t num_str)=0; 00388 00390 inline virtual const char* get_name() const { return "File"; } 00391 00392 protected: 00394 FILE* file; 00396 char task; 00398 char* filename; 00400 char* variable_name; 00401 }; 00402 } 00403 #endif // __FILE_H__