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(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(uint8_t*& vector, int32_t& len)=0;
00109 virtual void get_vector(char*& vector, int32_t& len)=0;
00110 virtual void get_vector(int32_t*& vector, int32_t& len)=0;
00111 virtual void get_vector(float64_t*& vector, int32_t& len)=0;
00112 virtual void get_vector(float32_t*& vector, int32_t& len)=0;
00113 virtual void get_vector(int16_t*& vector, int32_t& len)=0;
00114 virtual void get_vector(uint16_t*& vector, int32_t& len)=0;
00116
00118
00119
00120
00129 virtual void get_matrix(
00130 bool*& matrix, int32_t& num_feat, int32_t& num_vec);
00131 virtual void get_matrix(
00132 uint8_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00133 virtual void get_int8_matrix(
00134 int8_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00135 virtual void get_matrix(
00136 char*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00137 virtual void get_matrix(
00138 int32_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00139 virtual void get_uint_matrix(
00140 uint32_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00141 virtual void get_long_matrix(
00142 int64_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00143 virtual void get_ulong_matrix(
00144 uint64_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00145 virtual void get_matrix(
00146 float32_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00147 virtual void get_matrix(
00148 float64_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00149 virtual void get_longreal_matrix(
00150 floatmax_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00151 virtual void get_matrix(
00152 int16_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00153 virtual void get_matrix(
00154 uint16_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00156
00158
00159
00160
00169 virtual void get_ndarray(
00170 uint8_t*& array, int32_t*& dims, int32_t& num_dims)=0;
00171 virtual void get_ndarray(
00172 char*& array, int32_t*& dims, int32_t& num_dims)=0;
00173 virtual void get_ndarray(
00174 int32_t*& array, int32_t*& dims, int32_t& num_dims)=0;
00175 virtual void get_ndarray(
00176 float32_t*& array, int32_t*& dims, int32_t& num_dims)=0;
00177 virtual void get_ndarray(
00178 float64_t*& array, int32_t*& dims, int32_t& num_dims)=0;
00179 virtual void get_ndarray(
00180 int16_t*& array, int32_t*& dims, int32_t& num_dims)=0;
00181 virtual void get_ndarray(
00182 uint16_t*& array, int32_t*& dims, int32_t& num_dims)=0;
00184
00193 virtual void get_sparse_matrix(
00194 SGSparseVector<bool>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00195 virtual void get_sparse_matrix(
00196 SGSparseVector<uint8_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00197 virtual void get_int8_sparsematrix(
00198 SGSparseVector<int8_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00199 virtual void get_sparse_matrix(
00200 SGSparseVector<char>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00201 virtual void get_sparse_matrix(
00202 SGSparseVector<int32_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00203 virtual void get_uint_sparsematrix(
00204 SGSparseVector<uint32_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00205 virtual void get_long_sparsematrix(
00206 SGSparseVector<int64_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00207 virtual void get_ulong_sparsematrix(
00208 SGSparseVector<uint64_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00209 virtual void get_sparse_matrix(
00210 SGSparseVector<int16_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00211 virtual void get_sparse_matrix(
00212 SGSparseVector<uint16_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00213 virtual void get_sparse_matrix(
00214 SGSparseVector<float32_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00215 virtual void get_sparse_matrix(
00216 SGSparseVector<float64_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00217 virtual void get_longreal_sparsematrix(
00218 SGSparseVector<floatmax_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0;
00220
00221
00230 virtual void get_string_list(
00231 SGString<bool>*& strings, int32_t& num_str,
00232 int32_t& max_string_len);
00233 virtual void get_string_list(
00234 SGString<uint8_t>*& strings, int32_t& num_str,
00235 int32_t& max_string_len)=0;
00236 virtual void get_int8_string_list(
00237 SGString<int8_t>*& strings, int32_t& num_str,
00238 int32_t& max_string_len)=0;
00239 virtual void get_string_list(
00240 SGString<char>*& strings, int32_t& num_str,
00241 int32_t& max_string_len)=0;
00242 virtual void get_string_list(
00243 SGString<int32_t>*& strings, int32_t& num_str,
00244 int32_t& max_string_len)=0;
00245 virtual void get_uint_string_list(
00246 SGString<uint32_t>*& strings, int32_t& num_str,
00247 int32_t& max_string_len)=0;
00248 virtual void get_string_list(
00249 SGString<int16_t>*& strings, int32_t& num_str,
00250 int32_t& max_string_len)=0;
00251 virtual void get_string_list(
00252 SGString<uint16_t>*& strings, int32_t& num_str,
00253 int32_t& max_string_len)=0;
00254 virtual void get_long_string_list(
00255 SGString<int64_t>*& strings, int32_t& num_str,
00256 int32_t& max_string_len)=0;
00257 virtual void get_ulong_string_list(
00258 SGString<uint64_t>*& strings, int32_t& num_str,
00259 int32_t& max_string_len)=0;
00260 virtual void get_string_list(
00261 SGString<float32_t>*& strings, int32_t& num_str,
00262 int32_t& max_string_len)=0;
00263 virtual void get_string_list(
00264 SGString<float64_t>*& strings, int32_t& num_str,
00265 int32_t& max_string_len)=0;
00266 virtual void get_longreal_string_list(
00267 SGString<floatmax_t>*& strings, int32_t& num_str,
00268 int32_t& max_string_len)=0;
00270
00272
00273
00281 virtual void set_vector(const bool* vector, int32_t len);
00282 virtual void set_vector(const uint8_t* vector, int32_t len)=0;
00283 virtual void set_vector(const char* vector, int32_t len)=0;
00284 virtual void set_vector(const int32_t* vector, int32_t len)=0;
00285 virtual void set_vector( const float32_t* vector, int32_t len)=0;
00286 virtual void set_vector(const float64_t* vector, int32_t len)=0;
00287 virtual void set_vector(const int16_t* vector, int32_t len)=0;
00288 virtual void set_vector(const uint16_t* vector, int32_t len)=0;
00290
00291
00299 virtual void set_matrix(
00300 const bool* matrix, int32_t num_feat, int32_t num_vec);
00301 virtual void set_matrix(
00302 const uint8_t* matrix, int32_t num_feat, int32_t num_vec)=0;
00303 virtual void set_int8_matrix(
00304 const int8_t* matrix, int32_t num_feat, int32_t num_vec)=0;
00305 virtual void set_matrix(
00306 const char* matrix, int32_t num_feat, int32_t num_vec)=0;
00307 virtual void set_matrix(
00308 const int32_t* matrix, int32_t num_feat, int32_t num_vec)=0;
00309 virtual void set_uint_matrix(
00310 const uint32_t* matrix, int32_t num_feat, int32_t num_vec)=0;
00311 virtual void set_long_matrix(
00312 const int64_t* matrix, int32_t num_feat, int32_t num_vec)=0;
00313 virtual void set_ulong_matrix(
00314 const uint64_t* matrix, int32_t num_feat, int32_t num_vec)=0;
00315 virtual void set_matrix(
00316 const float32_t* matrix, int32_t num_feat, int32_t num_vec)=0;
00317 virtual void set_matrix(
00318 const float64_t* matrix, int32_t num_feat, int32_t num_vec)=0;
00319 virtual void set_longreal_matrix(
00320 const floatmax_t* matrix, int32_t num_feat, int32_t num_vec)=0;
00321 virtual void set_matrix(
00322 const int16_t* matrix, int32_t num_feat, int32_t num_vec)=0;
00323 virtual void set_matrix(
00324 const uint16_t* matrix, int32_t num_feat, int32_t num_vec)=0;
00326
00334 virtual void set_sparse_matrix(
00335 const SGSparseVector<bool>* matrix, int32_t num_feat, int32_t num_vec)=0;
00336 virtual void set_sparse_matrix(
00337 const SGSparseVector<uint8_t>* matrix, int32_t num_feat, int32_t num_vec)=0;
00338 virtual void set_int8_sparsematrix(
00339 const SGSparseVector<int8_t>* matrix, int32_t num_feat, int32_t num_vec)=0;
00340 virtual void set_sparse_matrix(
00341 const SGSparseVector<char>* matrix, int32_t num_feat, int32_t num_vec)=0;
00342 virtual void set_sparse_matrix(
00343 const SGSparseVector<int32_t>* matrix, int32_t num_feat, int32_t num_vec)=0;
00344 virtual void set_uint_sparsematrix(
00345 const SGSparseVector<uint32_t>* matrix, int32_t num_feat, int32_t num_vec)=0;
00346 virtual void set_long_sparsematrix(
00347 const SGSparseVector<int64_t>* matrix, int32_t num_feat, int32_t num_vec)=0;
00348 virtual void set_ulong_sparsematrix(
00349 const SGSparseVector<uint64_t>* matrix, int32_t num_feat, int32_t num_vec)=0;
00350 virtual void set_sparse_matrix(
00351 const SGSparseVector<int16_t>* matrix, int32_t num_feat, int32_t num_vec)=0;
00352 virtual void set_sparse_matrix(
00353 const SGSparseVector<uint16_t>* matrix, int32_t num_feat, int32_t num_vec)=0;
00354 virtual void set_sparse_matrix(
00355 const SGSparseVector<float32_t>* matrix, int32_t num_feat, int32_t num_vec)=0;
00356 virtual void set_sparse_matrix(
00357 const SGSparseVector<float64_t>* matrix, int32_t num_feat, int32_t num_vec)=0;
00358 virtual void set_longreal_sparsematrix(
00359 const SGSparseVector<floatmax_t>* matrix, int32_t num_feat, int32_t num_vec)=0;
00361
00362
00371 virtual void set_string_list(
00372 const SGString<bool>* strings, int32_t num_str);
00373 virtual void set_string_list(
00374 const SGString<uint8_t>* strings, int32_t num_str)=0;
00375 virtual void set_int8_string_list(
00376 const SGString<int8_t>* strings, int32_t num_str)=0;
00377 virtual void set_string_list(
00378 const SGString<char>* strings, int32_t num_str)=0;
00379 virtual void set_string_list(
00380 const SGString<int32_t>* strings, int32_t num_str)=0;
00381 virtual void set_uint_string_list(
00382 const SGString<uint32_t>* strings, int32_t num_str)=0;
00383 virtual void set_string_list(
00384 const SGString<int16_t>* strings, int32_t num_str)=0;
00385 virtual void set_string_list(
00386 const SGString<uint16_t>* strings, int32_t num_str)=0;
00387 virtual void set_long_string_list(
00388 const SGString<int64_t>* strings, int32_t num_str)=0;
00389 virtual void set_ulong_string_list(
00390 const SGString<uint64_t>* strings, int32_t num_str)=0;
00391 virtual void set_string_list(
00392 const SGString<float32_t>* strings, int32_t num_str)=0;
00393 virtual void set_string_list(
00394 const SGString<float64_t>* strings, int32_t num_str)=0;
00395 virtual void set_longreal_string_list(
00396 const SGString<floatmax_t>* strings, int32_t num_str)=0;
00398
00400 inline virtual const char* get_name() const { return "File"; }
00401
00402 protected:
00404 FILE* file;
00406 char task;
00408 char* filename;
00410 char* variable_name;
00411 };
00412 }
00413 #endif // __FILE_H__