|
SHOGUN v0.9.3
|
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> struct T_STRING; 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_char_matrix( 00124 char*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00125 virtual void get_int_matrix( 00126 int32_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00127 virtual void get_uint_matrix( 00128 uint32_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00129 virtual void get_long_matrix( 00130 int64_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00131 virtual void get_ulong_matrix( 00132 uint64_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00133 virtual void get_shortreal_matrix( 00134 float32_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00135 virtual void get_real_matrix( 00136 float64_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00137 virtual void get_longreal_matrix( 00138 floatmax_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00139 virtual void get_short_matrix( 00140 int16_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00141 virtual void get_word_matrix( 00142 uint16_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00144 00146 /*virtual void get_ndarray( 00147 void*& array, int32_t*& dims, int32_t& num_dims, DataType& dtype);*/ 00148 00157 virtual void get_byte_ndarray( 00158 uint8_t*& array, int32_t*& dims, int32_t& num_dims)=0; 00159 virtual void get_char_ndarray( 00160 char*& array, int32_t*& dims, int32_t& num_dims)=0; 00161 virtual void get_int_ndarray( 00162 int32_t*& array, int32_t*& dims, int32_t& num_dims)=0; 00163 virtual void get_shortreal_ndarray( 00164 float32_t*& array, int32_t*& dims, int32_t& num_dims)=0; 00165 virtual void get_real_ndarray( 00166 float64_t*& array, int32_t*& dims, int32_t& num_dims)=0; 00167 virtual void get_short_ndarray( 00168 int16_t*& array, int32_t*& dims, int32_t& num_dims)=0; 00169 virtual void get_word_ndarray( 00170 uint16_t*& array, int32_t*& dims, int32_t& num_dims)=0; 00172 00181 virtual void get_bool_sparsematrix( 00182 TSparse<bool>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00183 virtual void get_byte_sparsematrix( 00184 TSparse<uint8_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00185 virtual void get_char_sparsematrix( 00186 TSparse<char>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00187 virtual void get_int_sparsematrix( 00188 TSparse<int32_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00189 virtual void get_uint_sparsematrix( 00190 TSparse<uint32_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00191 virtual void get_long_sparsematrix( 00192 TSparse<int64_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00193 virtual void get_ulong_sparsematrix( 00194 TSparse<uint64_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00195 virtual void get_short_sparsematrix( 00196 TSparse<int16_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00197 virtual void get_word_sparsematrix( 00198 TSparse<uint16_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00199 virtual void get_shortreal_sparsematrix( 00200 TSparse<float32_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00201 virtual void get_real_sparsematrix( 00202 TSparse<float64_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00203 virtual void get_longreal_sparsematrix( 00204 TSparse<floatmax_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00206 00207 00216 virtual void get_bool_string_list( 00217 T_STRING<bool>*& strings, int32_t& num_str, 00218 int32_t& max_string_len); 00219 virtual void get_byte_string_list( 00220 T_STRING<uint8_t>*& strings, int32_t& num_str, 00221 int32_t& max_string_len)=0; 00222 virtual void get_char_string_list( 00223 T_STRING<char>*& strings, int32_t& num_str, 00224 int32_t& max_string_len)=0; 00225 virtual void get_int_string_list( 00226 T_STRING<int32_t>*& strings, int32_t& num_str, 00227 int32_t& max_string_len)=0; 00228 virtual void get_uint_string_list( 00229 T_STRING<uint32_t>*& strings, int32_t& num_str, 00230 int32_t& max_string_len)=0; 00231 virtual void get_short_string_list( 00232 T_STRING<int16_t>*& strings, int32_t& num_str, 00233 int32_t& max_string_len)=0; 00234 virtual void get_word_string_list( 00235 T_STRING<uint16_t>*& strings, int32_t& num_str, 00236 int32_t& max_string_len)=0; 00237 virtual void get_long_string_list( 00238 T_STRING<int64_t>*& strings, int32_t& num_str, 00239 int32_t& max_string_len)=0; 00240 virtual void get_ulong_string_list( 00241 T_STRING<uint64_t>*& strings, int32_t& num_str, 00242 int32_t& max_string_len)=0; 00243 virtual void get_shortreal_string_list( 00244 T_STRING<float32_t>*& strings, int32_t& num_str, 00245 int32_t& max_string_len)=0; 00246 virtual void get_real_string_list( 00247 T_STRING<float64_t>*& strings, int32_t& num_str, 00248 int32_t& max_string_len)=0; 00249 virtual void get_longreal_string_list( 00250 T_STRING<floatmax_t>*& strings, int32_t& num_str, 00251 int32_t& max_string_len)=0; 00253 00255 /*virtual void get_vector(void*& vector, int32_t& len, DataType& dtype);*/ 00256 00264 virtual void set_bool_vector(const bool* vector, int32_t len); 00265 virtual void set_byte_vector(const uint8_t* vector, int32_t len)=0; 00266 virtual void set_char_vector(const char* vector, int32_t len)=0; 00267 virtual void set_int_vector(const int32_t* vector, int32_t len)=0; 00268 virtual void set_shortreal_vector( const float32_t* vector, int32_t len)=0; 00269 virtual void set_real_vector(const float64_t* vector, int32_t len)=0; 00270 virtual void set_short_vector(const int16_t* vector, int32_t len)=0; 00271 virtual void set_word_vector(const uint16_t* vector, int32_t len)=0; 00273 00274 00282 virtual void set_bool_matrix( 00283 const bool* matrix, int32_t num_feat, int32_t num_vec); 00284 virtual void set_byte_matrix( 00285 const uint8_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00286 virtual void set_char_matrix( 00287 const char* matrix, int32_t num_feat, int32_t num_vec)=0; 00288 virtual void set_int_matrix( 00289 const int32_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00290 virtual void set_uint_matrix( 00291 const uint32_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00292 virtual void set_long_matrix( 00293 const int64_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00294 virtual void set_ulong_matrix( 00295 const uint64_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00296 virtual void set_shortreal_matrix( 00297 const float32_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00298 virtual void set_real_matrix( 00299 const float64_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00300 virtual void set_longreal_matrix( 00301 const floatmax_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00302 virtual void set_short_matrix( 00303 const int16_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00304 virtual void set_word_matrix( 00305 const uint16_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00307 00315 virtual void set_bool_sparsematrix( 00316 const TSparse<bool>* matrix, int32_t num_feat, int32_t num_vec)=0; 00317 virtual void set_byte_sparsematrix( 00318 const TSparse<uint8_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00319 virtual void set_char_sparsematrix( 00320 const TSparse<char>* matrix, int32_t num_feat, int32_t num_vec)=0; 00321 virtual void set_int_sparsematrix( 00322 const TSparse<int32_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00323 virtual void set_uint_sparsematrix( 00324 const TSparse<uint32_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00325 virtual void set_long_sparsematrix( 00326 const TSparse<int64_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00327 virtual void set_ulong_sparsematrix( 00328 const TSparse<uint64_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00329 virtual void set_short_sparsematrix( 00330 const TSparse<int16_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00331 virtual void set_word_sparsematrix( 00332 const TSparse<uint16_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00333 virtual void set_shortreal_sparsematrix( 00334 const TSparse<float32_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00335 virtual void set_real_sparsematrix( 00336 const TSparse<float64_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00337 virtual void set_longreal_sparsematrix( 00338 const TSparse<floatmax_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00340 00341 00350 virtual void set_bool_string_list( 00351 const T_STRING<bool>* strings, int32_t num_str); 00352 virtual void set_byte_string_list( 00353 const T_STRING<uint8_t>* strings, int32_t num_str)=0; 00354 virtual void set_char_string_list( 00355 const T_STRING<char>* strings, int32_t num_str)=0; 00356 virtual void set_int_string_list( 00357 const T_STRING<int32_t>* strings, int32_t num_str)=0; 00358 virtual void set_uint_string_list( 00359 const T_STRING<uint32_t>* strings, int32_t num_str)=0; 00360 virtual void set_short_string_list( 00361 const T_STRING<int16_t>* strings, int32_t num_str)=0; 00362 virtual void set_word_string_list( 00363 const T_STRING<uint16_t>* strings, int32_t num_str)=0; 00364 virtual void set_long_string_list( 00365 const T_STRING<int64_t>* strings, int32_t num_str)=0; 00366 virtual void set_ulong_string_list( 00367 const T_STRING<uint64_t>* strings, int32_t num_str)=0; 00368 virtual void set_shortreal_string_list( 00369 const T_STRING<float32_t>* strings, int32_t num_str)=0; 00370 virtual void set_real_string_list( 00371 const T_STRING<float64_t>* strings, int32_t num_str)=0; 00372 virtual void set_longreal_string_list( 00373 const T_STRING<floatmax_t>* strings, int32_t num_str)=0; 00375 00377 inline virtual const char* get_name() const { return "File"; } 00378 00379 protected: 00381 FILE* file; 00383 char task; 00385 char* filename; 00387 char* variable_name; 00388 }; 00389 } 00390 #endif // __FILE_H__