SHOGUN
v1.1.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 <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 /*virtual DataType get_data_type()=0;*/ 00096 00098 /*virtual void get_vector(void*& vector, int32_t& len, DataType& dtype);*/ 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 /*virtual void get_matrix( 00119 void*& matrix, int32_t& num_feat, int32_t& num_vec, DataType& dtype);*/ 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 /*virtual void get_ndarray( 00159 void*& array, int32_t*& dims, int32_t& num_dims, DataType& dtype);*/ 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 /*virtual void get_vector(void*& vector, int32_t& len, DataType& dtype);*/ 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__