00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef __FILE_H__
00013 #define __FILE_H__
00014
00015 #include <stdio.h>
00016 #include <shogun/base/SGObject.h>
00017 #include <shogun/lib/DataType.h>
00018
00019 namespace shogun
00020 {
00021 template <class ST> class SGString;
00022 template <class ST> class SGSparseVector;
00023
00033 class CFile : public CSGObject
00034 {
00035 public:
00037 CFile();
00038
00044 CFile(FILE* f, const char* name=NULL);
00045
00052 CFile(const char* fname, char rw='r', const char* name=NULL);
00053
00055 virtual ~CFile();
00056
00058 void close()
00059 {
00060 SG_FREE(variable_name);
00061 SG_FREE(filename);
00062 if (file)
00063 fclose(file);
00064 variable_name=NULL;
00065 filename=NULL;
00066 file=NULL;
00067 }
00068
00073 FILE* get_file_descriptor()
00074 {
00075 return file;
00076 }
00077
00084 void set_variable_name(const char* name);
00085
00092 char* get_variable_name();
00093
00095
00096
00098
00099
00107 virtual void get_vector(bool*& vector, int32_t& len);
00108 virtual void get_vector(int8_t*& vector, int32_t& len)=0;
00109 virtual void get_vector(uint8_t*& vector, int32_t& len)=0;
00110 virtual void get_vector(char*& vector, int32_t& len)=0;
00111 virtual void get_vector(int32_t*& vector, int32_t& len)=0;
00112 virtual void get_vector(uint32_t*& vector, int32_t& len)=0;
00113 virtual void get_vector(float64_t*& vector, int32_t& len)=0;
00114 virtual void get_vector(float32_t*& vector, int32_t& len)=0;
00115 virtual void get_vector(floatmax_t*& vector, int32_t& len)=0;
00116 virtual void get_vector(int16_t*& vector, int32_t& len)=0;
00117 virtual void get_vector(uint16_t*& vector, int32_t& len)=0;
00118 virtual void get_vector(int64_t*& vector, int32_t& len)=0;
00119 virtual void get_vector(uint64_t*& vector, int32_t& len)=0;
00121
00123
00124
00125
00134 virtual void get_matrix(
00135 bool*& matrix, int32_t& num_feat, int32_t& num_vec);
00136 virtual void get_matrix(
00137 uint8_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00138 virtual void get_int8_matrix(
00139 int8_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00140 virtual void get_matrix(
00141 char*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00142 virtual void get_matrix(
00143 int32_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00144 virtual void get_uint_matrix(
00145 uint32_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00146 virtual void get_long_matrix(
00147 int64_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00148 virtual void get_ulong_matrix(
00149 uint64_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00150 virtual void get_matrix(
00151 float32_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00152 virtual void get_matrix(
00153 float64_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00154 virtual void get_longreal_matrix(
00155 floatmax_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00156 virtual void get_matrix(
00157 int16_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00158 virtual void get_matrix(
00159 uint16_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00161
00163
00164
00165
00174 virtual void get_ndarray(
00175 uint8_t*& array, int32_t*& dims, int32_t& num_dims)=0;
00176 virtual void get_ndarray(
00177 char*& array, int32_t*& dims, int32_t& num_dims)=0;
00178 virtual void get_ndarray(
00179 int32_t*& array, int32_t*& dims, int32_t& num_dims)=0;
00180 virtual void get_ndarray(
00181 float32_t*& array, int32_t*& dims, int32_t& num_dims)=0;
00182 virtual void get_ndarray(
00183 float64_t*& array, int32_t*& dims, int32_t& num_dims)=0;
00184 virtual void get_ndarray(
00185 int16_t*& array, int32_t*& dims, int32_t& num_dims)=0;
00186 virtual void get_ndarray(
00187 uint16_t*& array, int32_t*& dims, int32_t& num_dims)=0;
00189
00198 virtual void get_sparse_matrix(
00199 SGSparseVector<bool>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00200 virtual void get_sparse_matrix(
00201 SGSparseVector<uint8_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00202 virtual void get_int8_sparsematrix(
00203 SGSparseVector<int8_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00204 virtual void get_sparse_matrix(
00205 SGSparseVector<char>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00206 virtual void get_sparse_matrix(
00207 SGSparseVector<int32_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00208 virtual void get_uint_sparsematrix(
00209 SGSparseVector<uint32_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00210 virtual void get_long_sparsematrix(
00211 SGSparseVector<int64_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00212 virtual void get_ulong_sparsematrix(
00213 SGSparseVector<uint64_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00214 virtual void get_sparse_matrix(
00215 SGSparseVector<int16_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00216 virtual void get_sparse_matrix(
00217 SGSparseVector<uint16_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00218 virtual void get_sparse_matrix(
00219 SGSparseVector<float32_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00220 virtual void get_sparse_matrix(
00221 SGSparseVector<float64_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00222 virtual void get_longreal_sparsematrix(
00223 SGSparseVector<floatmax_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00225
00226
00235 virtual void get_string_list(
00236 SGString<bool>*& strings, int32_t& num_str,
00237 int32_t& max_string_len);
00238 virtual void get_string_list(
00239 SGString<uint8_t>*& strings, int32_t& num_str,
00240 int32_t& max_string_len)=0;
00241 virtual void get_int8_string_list(
00242 SGString<int8_t>*& strings, int32_t& num_str,
00243 int32_t& max_string_len)=0;
00244 virtual void get_string_list(
00245 SGString<char>*& strings, int32_t& num_str,
00246 int32_t& max_string_len)=0;
00247 virtual void get_string_list(
00248 SGString<int32_t>*& strings, int32_t& num_str,
00249 int32_t& max_string_len)=0;
00250 virtual void get_uint_string_list(
00251 SGString<uint32_t>*& strings, int32_t& num_str,
00252 int32_t& max_string_len)=0;
00253 virtual void get_string_list(
00254 SGString<int16_t>*& strings, int32_t& num_str,
00255 int32_t& max_string_len)=0;
00256 virtual void get_string_list(
00257 SGString<uint16_t>*& strings, int32_t& num_str,
00258 int32_t& max_string_len)=0;
00259 virtual void get_long_string_list(
00260 SGString<int64_t>*& strings, int32_t& num_str,
00261 int32_t& max_string_len)=0;
00262 virtual void get_ulong_string_list(
00263 SGString<uint64_t>*& strings, int32_t& num_str,
00264 int32_t& max_string_len)=0;
00265 virtual void get_string_list(
00266 SGString<float32_t>*& strings, int32_t& num_str,
00267 int32_t& max_string_len)=0;
00268 virtual void get_string_list(
00269 SGString<float64_t>*& strings, int32_t& num_str,
00270 int32_t& max_string_len)=0;
00271 virtual void get_longreal_string_list(
00272 SGString<floatmax_t>*& strings, int32_t& num_str,
00273 int32_t& max_string_len)=0;
00275
00277
00278
00286 virtual void set_vector(const bool* vector, int32_t len);
00287 virtual void set_vector(const int8_t* vector, int32_t len)=0;
00288 virtual void set_vector(const uint8_t* vector, int32_t len)=0;
00289 virtual void set_vector(const char* vector, int32_t len)=0;
00290 virtual void set_vector(const int32_t* vector, int32_t len)=0;
00291 virtual void set_vector(const uint32_t* vector, int32_t len)=0;
00292 virtual void set_vector(const float32_t* vector, int32_t len)=0;
00293 virtual void set_vector(const float64_t* vector, int32_t len)=0;
00294 virtual void set_vector(const floatmax_t* vector, int32_t len)=0;
00295 virtual void set_vector(const int16_t* vector, int32_t len)=0;
00296 virtual void set_vector(const uint16_t* vector, int32_t len)=0;
00297 virtual void set_vector(const int64_t* vector, int32_t len)=0;
00298 virtual void set_vector(const uint64_t* vector, int32_t len)=0;
00300
00301
00309 virtual void set_matrix(
00310 const bool* matrix, int32_t num_feat, int32_t num_vec);
00311 virtual void set_matrix(
00312 const uint8_t* matrix, int32_t num_feat, int32_t num_vec)=0;
00313 virtual void set_int8_matrix(
00314 const int8_t* matrix, int32_t num_feat, int32_t num_vec)=0;
00315 virtual void set_matrix(
00316 const char* matrix, int32_t num_feat, int32_t num_vec)=0;
00317 virtual void set_matrix(
00318 const int32_t* matrix, int32_t num_feat, int32_t num_vec)=0;
00319 virtual void set_uint_matrix(
00320 const uint32_t* matrix, int32_t num_feat, int32_t num_vec)=0;
00321 virtual void set_long_matrix(
00322 const int64_t* matrix, int32_t num_feat, int32_t num_vec)=0;
00323 virtual void set_ulong_matrix(
00324 const uint64_t* matrix, int32_t num_feat, int32_t num_vec)=0;
00325 virtual void set_matrix(
00326 const float32_t* matrix, int32_t num_feat, int32_t num_vec)=0;
00327 virtual void set_matrix(
00328 const float64_t* matrix, int32_t num_feat, int32_t num_vec)=0;
00329 virtual void set_longreal_matrix(
00330 const floatmax_t* matrix, int32_t num_feat, int32_t num_vec)=0;
00331 virtual void set_matrix(
00332 const int16_t* matrix, int32_t num_feat, int32_t num_vec)=0;
00333 virtual void set_matrix(
00334 const uint16_t* matrix, int32_t num_feat, int32_t num_vec)=0;
00336
00344 virtual void set_sparse_matrix(
00345 const SGSparseVector<bool>* matrix, int32_t num_feat, int32_t num_vec)=0;
00346 virtual void set_sparse_matrix(
00347 const SGSparseVector<uint8_t>* matrix, int32_t num_feat, int32_t num_vec)=0;
00348 virtual void set_int8_sparsematrix(
00349 const SGSparseVector<int8_t>* matrix, int32_t num_feat, int32_t num_vec)=0;
00350 virtual void set_sparse_matrix(
00351 const SGSparseVector<char>* matrix, int32_t num_feat, int32_t num_vec)=0;
00352 virtual void set_sparse_matrix(
00353 const SGSparseVector<int32_t>* matrix, int32_t num_feat, int32_t num_vec)=0;
00354 virtual void set_uint_sparsematrix(
00355 const SGSparseVector<uint32_t>* matrix, int32_t num_feat, int32_t num_vec)=0;
00356 virtual void set_long_sparsematrix(
00357 const SGSparseVector<int64_t>* matrix, int32_t num_feat, int32_t num_vec)=0;
00358 virtual void set_ulong_sparsematrix(
00359 const SGSparseVector<uint64_t>* matrix, int32_t num_feat, int32_t num_vec)=0;
00360 virtual void set_sparse_matrix(
00361 const SGSparseVector<int16_t>* matrix, int32_t num_feat, int32_t num_vec)=0;
00362 virtual void set_sparse_matrix(
00363 const SGSparseVector<uint16_t>* matrix, int32_t num_feat, int32_t num_vec)=0;
00364 virtual void set_sparse_matrix(
00365 const SGSparseVector<float32_t>* matrix, int32_t num_feat, int32_t num_vec)=0;
00366 virtual void set_sparse_matrix(
00367 const SGSparseVector<float64_t>* matrix, int32_t num_feat, int32_t num_vec)=0;
00368 virtual void set_longreal_sparsematrix(
00369 const SGSparseVector<floatmax_t>* matrix, int32_t num_feat, int32_t num_vec)=0;
00371
00372
00381 virtual void set_string_list(
00382 const SGString<bool>* strings, int32_t num_str);
00383 virtual void set_string_list(
00384 const SGString<uint8_t>* strings, int32_t num_str)=0;
00385 virtual void set_int8_string_list(
00386 const SGString<int8_t>* strings, int32_t num_str)=0;
00387 virtual void set_string_list(
00388 const SGString<char>* strings, int32_t num_str)=0;
00389 virtual void set_string_list(
00390 const SGString<int32_t>* strings, int32_t num_str)=0;
00391 virtual void set_uint_string_list(
00392 const SGString<uint32_t>* strings, int32_t num_str)=0;
00393 virtual void set_string_list(
00394 const SGString<int16_t>* strings, int32_t num_str)=0;
00395 virtual void set_string_list(
00396 const SGString<uint16_t>* strings, int32_t num_str)=0;
00397 virtual void set_long_string_list(
00398 const SGString<int64_t>* strings, int32_t num_str)=0;
00399 virtual void set_ulong_string_list(
00400 const SGString<uint64_t>* strings, int32_t num_str)=0;
00401 virtual void set_string_list(
00402 const SGString<float32_t>* strings, int32_t num_str)=0;
00403 virtual void set_string_list(
00404 const SGString<float64_t>* strings, int32_t num_str)=0;
00405 virtual void set_longreal_string_list(
00406 const SGString<floatmax_t>* strings, int32_t num_str)=0;
00408
00410 virtual const char* get_name() const { return "File"; }
00411
00418 static char* read_whole_file(char* fname, size_t& len);
00419
00420 protected:
00422 FILE* file;
00424 char task;
00426 char* filename;
00428 char* variable_name;
00429 };
00430 }
00431 #endif // __FILE_H__