SHOGUN
v3.2.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 template <class ST> struct SGSparseVectorEntry; 00024 00034 class CFile : public CSGObject 00035 { 00036 public: 00038 CFile(); 00039 00045 CFile(FILE* f, const char* name=NULL); 00046 00053 CFile(int fd, const char* mode, const char* name=NULL); 00054 00061 CFile(const char* fname, char rw='r', const char* name=NULL); 00062 00064 virtual ~CFile(); 00065 00067 void close() 00068 { 00069 SG_FREE(variable_name); 00070 SG_FREE(filename); 00071 if (file) 00072 fclose(file); 00073 variable_name=NULL; 00074 filename=NULL; 00075 file=NULL; 00076 } 00077 00082 FILE* get_file_descriptor() 00083 { 00084 return file; 00085 } 00086 00093 void set_variable_name(const char* name); 00094 00101 char* get_variable_name(); 00102 00104 /*virtual DataType get_data_type()=0;*/ 00105 00107 /*virtual void get_vector(void*& vector, int32_t& len, DataType& dtype);*/ 00108 00116 virtual void get_vector(bool*& vector, int32_t& len); 00117 virtual void get_vector(int8_t*& vector, int32_t& len)=0; 00118 virtual void get_vector(uint8_t*& vector, int32_t& len)=0; 00119 virtual void get_vector(char*& vector, int32_t& len)=0; 00120 virtual void get_vector(int32_t*& vector, int32_t& len)=0; 00121 virtual void get_vector(uint32_t*& vector, int32_t& len)=0; 00122 virtual void get_vector(float64_t*& vector, int32_t& len)=0; 00123 virtual void get_vector(float32_t*& vector, int32_t& len)=0; 00124 virtual void get_vector(floatmax_t*& vector, int32_t& len)=0; 00125 virtual void get_vector(int16_t*& vector, int32_t& len)=0; 00126 virtual void get_vector(uint16_t*& vector, int32_t& len)=0; 00127 virtual void get_vector(int64_t*& vector, int32_t& len)=0; 00128 virtual void get_vector(uint64_t*& vector, int32_t& len)=0; 00130 00132 /*virtual void get_matrix( 00133 void*& matrix, int32_t& num_feat, int32_t& num_vec, DataType& dtype);*/ 00134 00143 virtual void get_matrix( 00144 bool*& matrix, int32_t& num_feat, int32_t& num_vec); 00145 virtual void get_matrix( 00146 uint8_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00147 virtual void get_matrix( 00148 int8_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00149 virtual void get_matrix( 00150 char*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00151 virtual void get_matrix( 00152 int32_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00153 virtual void get_matrix( 00154 uint32_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00155 virtual void get_matrix( 00156 int64_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00157 virtual void get_matrix( 00158 uint64_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00159 virtual void get_matrix( 00160 float32_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00161 virtual void get_matrix( 00162 float64_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00163 virtual void get_matrix( 00164 floatmax_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00165 virtual void get_matrix( 00166 int16_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00167 virtual void get_matrix( 00168 uint16_t*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00170 00172 /*virtual void get_ndarray( 00173 void*& array, int32_t*& dims, int32_t& num_dims, DataType& dtype);*/ 00174 00183 virtual void get_ndarray( 00184 uint8_t*& array, int32_t*& dims, int32_t& num_dims)=0; 00185 virtual void get_ndarray( 00186 char*& array, int32_t*& dims, int32_t& num_dims)=0; 00187 virtual void get_ndarray( 00188 int32_t*& array, int32_t*& dims, int32_t& num_dims)=0; 00189 virtual void get_ndarray( 00190 float32_t*& array, int32_t*& dims, int32_t& num_dims)=0; 00191 virtual void get_ndarray( 00192 float64_t*& array, int32_t*& dims, int32_t& num_dims)=0; 00193 virtual void get_ndarray( 00194 int16_t*& array, int32_t*& dims, int32_t& num_dims)=0; 00195 virtual void get_ndarray( 00196 uint16_t*& array, int32_t*& dims, int32_t& num_dims)=0; 00198 // 00206 virtual void get_sparse_vector( 00207 SGSparseVectorEntry<bool>*& entries, int32_t& num_feat); 00208 virtual void get_sparse_vector( 00209 SGSparseVectorEntry<uint8_t>*& entries, int32_t& num_feat); 00210 virtual void get_sparse_vector( 00211 SGSparseVectorEntry<int8_t>*& entries, int32_t& num_feat); 00212 virtual void get_sparse_vector( 00213 SGSparseVectorEntry<char>*& entries, int32_t& num_feat); 00214 virtual void get_sparse_vector( 00215 SGSparseVectorEntry<int32_t>*& entries, int32_t& num_feat); 00216 virtual void get_sparse_vector( 00217 SGSparseVectorEntry<uint32_t>*& entries, int32_t& num_feat); 00218 virtual void get_sparse_vector( 00219 SGSparseVectorEntry<int64_t>*& entries, int32_t& num_feat); 00220 virtual void get_sparse_vector( 00221 SGSparseVectorEntry<uint64_t>*& entries, int32_t& num_feat); 00222 virtual void get_sparse_vector( 00223 SGSparseVectorEntry<int16_t>*& entries, int32_t& num_feat); 00224 virtual void get_sparse_vector( 00225 SGSparseVectorEntry<uint16_t>*& entries, int32_t& num_feat); 00226 virtual void get_sparse_vector( 00227 SGSparseVectorEntry<float32_t>*& entries, int32_t& num_feat); 00228 virtual void get_sparse_vector( 00229 SGSparseVectorEntry<float64_t>*& entries, int32_t& num_feat); 00230 virtual void get_sparse_vector( 00231 SGSparseVectorEntry<floatmax_t>*& entries, int32_t& num_feat); 00233 00242 virtual void get_sparse_matrix( 00243 SGSparseVector<bool>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00244 virtual void get_sparse_matrix( 00245 SGSparseVector<uint8_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00246 virtual void get_sparse_matrix( 00247 SGSparseVector<int8_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00248 virtual void get_sparse_matrix( 00249 SGSparseVector<char>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00250 virtual void get_sparse_matrix( 00251 SGSparseVector<int32_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00252 virtual void get_sparse_matrix( 00253 SGSparseVector<uint32_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00254 virtual void get_sparse_matrix( 00255 SGSparseVector<int64_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00256 virtual void get_sparse_matrix( 00257 SGSparseVector<uint64_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00258 virtual void get_sparse_matrix( 00259 SGSparseVector<int16_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00260 virtual void get_sparse_matrix( 00261 SGSparseVector<uint16_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00262 virtual void get_sparse_matrix( 00263 SGSparseVector<float32_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00264 virtual void get_sparse_matrix( 00265 SGSparseVector<float64_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00266 virtual void get_sparse_matrix( 00267 SGSparseVector<floatmax_t>*& matrix, int32_t& num_feat, int32_t& num_vec)=0; 00269 00270 00279 virtual void get_string_list( 00280 SGString<bool>*& strings, int32_t& num_str, 00281 int32_t& max_string_len); 00282 virtual void get_string_list( 00283 SGString<uint8_t>*& strings, int32_t& num_str, 00284 int32_t& max_string_len)=0; 00285 virtual void get_string_list( 00286 SGString<int8_t>*& strings, int32_t& num_str, 00287 int32_t& max_string_len)=0; 00288 virtual void get_string_list( 00289 SGString<char>*& strings, int32_t& num_str, 00290 int32_t& max_string_len)=0; 00291 virtual void get_string_list( 00292 SGString<int32_t>*& strings, int32_t& num_str, 00293 int32_t& max_string_len)=0; 00294 virtual void get_string_list( 00295 SGString<uint32_t>*& strings, int32_t& num_str, 00296 int32_t& max_string_len)=0; 00297 virtual void get_string_list( 00298 SGString<int16_t>*& strings, int32_t& num_str, 00299 int32_t& max_string_len)=0; 00300 virtual void get_string_list( 00301 SGString<uint16_t>*& strings, int32_t& num_str, 00302 int32_t& max_string_len)=0; 00303 virtual void get_string_list( 00304 SGString<int64_t>*& strings, int32_t& num_str, 00305 int32_t& max_string_len)=0; 00306 virtual void get_string_list( 00307 SGString<uint64_t>*& strings, int32_t& num_str, 00308 int32_t& max_string_len)=0; 00309 virtual void get_string_list( 00310 SGString<float32_t>*& strings, int32_t& num_str, 00311 int32_t& max_string_len)=0; 00312 virtual void get_string_list( 00313 SGString<float64_t>*& strings, int32_t& num_str, 00314 int32_t& max_string_len)=0; 00315 virtual void get_string_list( 00316 SGString<floatmax_t>*& strings, int32_t& num_str, 00317 int32_t& max_string_len)=0; 00319 00321 /*virtual void get_vector(void*& vector, int32_t& len, DataType& dtype);*/ 00322 00330 virtual void set_vector(const bool* vector, int32_t len); 00331 virtual void set_vector(const int8_t* vector, int32_t len)=0; 00332 virtual void set_vector(const uint8_t* vector, int32_t len)=0; 00333 virtual void set_vector(const char* vector, int32_t len)=0; 00334 virtual void set_vector(const int32_t* vector, int32_t len)=0; 00335 virtual void set_vector(const uint32_t* vector, int32_t len)=0; 00336 virtual void set_vector(const float32_t* vector, int32_t len)=0; 00337 virtual void set_vector(const float64_t* vector, int32_t len)=0; 00338 virtual void set_vector(const floatmax_t* vector, int32_t len)=0; 00339 virtual void set_vector(const int16_t* vector, int32_t len)=0; 00340 virtual void set_vector(const uint16_t* vector, int32_t len)=0; 00341 virtual void set_vector(const int64_t* vector, int32_t len)=0; 00342 virtual void set_vector(const uint64_t* vector, int32_t len)=0; 00344 00345 00353 virtual void set_matrix( 00354 const bool* matrix, int32_t num_feat, int32_t num_vec); 00355 virtual void set_matrix( 00356 const uint8_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00357 virtual void set_matrix( 00358 const int8_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00359 virtual void set_matrix( 00360 const char* matrix, int32_t num_feat, int32_t num_vec)=0; 00361 virtual void set_matrix( 00362 const int32_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00363 virtual void set_matrix( 00364 const uint32_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00365 virtual void set_matrix( 00366 const int64_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00367 virtual void set_matrix( 00368 const uint64_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00369 virtual void set_matrix( 00370 const float32_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00371 virtual void set_matrix( 00372 const float64_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00373 virtual void set_matrix( 00374 const floatmax_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00375 virtual void set_matrix( 00376 const int16_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00377 virtual void set_matrix( 00378 const uint16_t* matrix, int32_t num_feat, int32_t num_vec)=0; 00380 // 00388 virtual void set_sparse_vector( 00389 const SGSparseVectorEntry<bool>* entries, int32_t num_feat); 00390 virtual void set_sparse_vector( 00391 const SGSparseVectorEntry<uint8_t>* entries, int32_t num_feat); 00392 virtual void set_sparse_vector( 00393 const SGSparseVectorEntry<int8_t>* entries, int32_t num_feat); 00394 virtual void set_sparse_vector( 00395 const SGSparseVectorEntry<char>* entries, int32_t num_feat); 00396 virtual void set_sparse_vector( 00397 const SGSparseVectorEntry<int32_t>* entries, int32_t num_feat); 00398 virtual void set_sparse_vector( 00399 const SGSparseVectorEntry<uint32_t>* entries, int32_t num_feat); 00400 virtual void set_sparse_vector( 00401 const SGSparseVectorEntry<int64_t>* entries, int32_t num_feat); 00402 virtual void set_sparse_vector( 00403 const SGSparseVectorEntry<uint64_t>* entries, int32_t num_feat); 00404 virtual void set_sparse_vector( 00405 const SGSparseVectorEntry<int16_t>* entries, int32_t num_feat); 00406 virtual void set_sparse_vector( 00407 const SGSparseVectorEntry<uint16_t>* entries, int32_t num_feat); 00408 virtual void set_sparse_vector( 00409 const SGSparseVectorEntry<float32_t>* entries, int32_t num_feat); 00410 virtual void set_sparse_vector( 00411 const SGSparseVectorEntry<float64_t>* entries, int32_t num_feat); 00412 virtual void set_sparse_vector( 00413 const SGSparseVectorEntry<floatmax_t>* entries, int32_t num_feat); 00415 00423 virtual void set_sparse_matrix( 00424 const SGSparseVector<bool>* matrix, int32_t num_feat, int32_t num_vec)=0; 00425 virtual void set_sparse_matrix( 00426 const SGSparseVector<uint8_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00427 virtual void set_sparse_matrix( 00428 const SGSparseVector<int8_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00429 virtual void set_sparse_matrix( 00430 const SGSparseVector<char>* matrix, int32_t num_feat, int32_t num_vec)=0; 00431 virtual void set_sparse_matrix( 00432 const SGSparseVector<int32_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00433 virtual void set_sparse_matrix( 00434 const SGSparseVector<uint32_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00435 virtual void set_sparse_matrix( 00436 const SGSparseVector<int64_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00437 virtual void set_sparse_matrix( 00438 const SGSparseVector<uint64_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00439 virtual void set_sparse_matrix( 00440 const SGSparseVector<int16_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00441 virtual void set_sparse_matrix( 00442 const SGSparseVector<uint16_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00443 virtual void set_sparse_matrix( 00444 const SGSparseVector<float32_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00445 virtual void set_sparse_matrix( 00446 const SGSparseVector<float64_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00447 virtual void set_sparse_matrix( 00448 const SGSparseVector<floatmax_t>* matrix, int32_t num_feat, int32_t num_vec)=0; 00450 00451 00460 virtual void set_string_list( 00461 const SGString<bool>* strings, int32_t num_str); 00462 virtual void set_string_list( 00463 const SGString<uint8_t>* strings, int32_t num_str)=0; 00464 virtual void set_string_list( 00465 const SGString<int8_t>* strings, int32_t num_str)=0; 00466 virtual void set_string_list( 00467 const SGString<char>* strings, int32_t num_str)=0; 00468 virtual void set_string_list( 00469 const SGString<int32_t>* strings, int32_t num_str)=0; 00470 virtual void set_string_list( 00471 const SGString<uint32_t>* strings, int32_t num_str)=0; 00472 virtual void set_string_list( 00473 const SGString<int16_t>* strings, int32_t num_str)=0; 00474 virtual void set_string_list( 00475 const SGString<uint16_t>* strings, int32_t num_str)=0; 00476 virtual void set_string_list( 00477 const SGString<int64_t>* strings, int32_t num_str)=0; 00478 virtual void set_string_list( 00479 const SGString<uint64_t>* strings, int32_t num_str)=0; 00480 virtual void set_string_list( 00481 const SGString<float32_t>* strings, int32_t num_str)=0; 00482 virtual void set_string_list( 00483 const SGString<float64_t>* strings, int32_t num_str)=0; 00484 virtual void set_string_list( 00485 const SGString<floatmax_t>* strings, int32_t num_str)=0; 00487 00489 virtual const char* get_name() const { return "File"; } 00490 00497 static char* read_whole_file(char* fname, size_t& len); 00498 00499 protected: 00501 FILE* file; 00503 char task; 00505 char* filename; 00507 char* variable_name; 00508 }; 00509 } 00510 #endif // __FILE_H__