SHOGUN v0.9.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-2010 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 #include <stdio.h> 00013 #include <stdlib.h> 00014 #include <string.h> 00015 00016 #include "lib/File.h" 00017 00018 #include "features/StringFeatures.h" 00019 #include "features/SparseFeatures.h" 00020 00021 using namespace shogun; 00022 00023 CFile::CFile() : CSGObject() 00024 { 00025 file=NULL; 00026 filename=NULL; 00027 variable_name=NULL; 00028 } 00029 00030 CFile::CFile(FILE* f, const char* name) : CSGObject() 00031 { 00032 file=f; 00033 filename=NULL; 00034 variable_name=NULL; 00035 00036 if (name) 00037 set_variable_name(name); 00038 } 00039 00040 CFile::CFile(char* fname, char rw, const char* name) : CSGObject() 00041 { 00042 variable_name=NULL; 00043 task=rw; 00044 filename=strdup(fname); 00045 char mode[2]; 00046 mode[0]=rw; 00047 mode[1]='\0'; 00048 00049 if (rw=='r' || rw == 'w') 00050 { 00051 if (filename) 00052 { 00053 if (!(file=fopen((const char*) filename, (const char*) mode))) 00054 SG_ERROR("Error opening file '%s'\n", filename); 00055 } 00056 } 00057 else 00058 SG_ERROR("unknown mode '%c'\n", mode[0]); 00059 00060 if (name) 00061 set_variable_name(name); 00062 } 00063 00064 void CFile::get_bool_vector(bool*& vector, int32_t& len) 00065 { 00066 int32_t* int_vector; 00067 get_int_vector(int_vector, len); 00068 00069 ASSERT(len>0); 00070 vector= new bool[len]; 00071 00072 for (int32_t i=0; i<len; i++) 00073 vector[i]= (int_vector[i]!=0); 00074 00075 delete[] int_vector; 00076 } 00077 00078 void CFile::set_bool_vector(const bool* vector, int32_t len) 00079 { 00080 int32_t* int_vector = new int32_t[len]; 00081 for (int32_t i=0;i<len;i++) 00082 { 00083 if (vector[i]) 00084 int_vector[i]=1; 00085 else 00086 int_vector[i]=0; 00087 } 00088 set_int_vector(int_vector,len); 00089 delete[] int_vector; 00090 } 00091 00092 void CFile::get_bool_matrix(bool*& matrix, int32_t& num_feat, int32_t& num_vec) 00093 { 00094 SG_NOTIMPLEMENTED; 00095 } 00096 00097 void CFile::set_bool_matrix(const bool* matrix, int32_t num_feat, int32_t num_vec) 00098 { 00099 SG_NOTIMPLEMENTED; 00100 } 00101 00102 void CFile::get_bool_string_list( 00103 TString<bool>*& strings, int32_t& num_str, 00104 int32_t& max_string_len) 00105 { 00106 TString<int32_t>* strs; 00107 get_int_string_list(strs, num_str, max_string_len); 00108 00109 ASSERT(num_str>0 && max_string_len>0); 00110 strings=new TString<bool>[num_str]; 00111 00112 SG_NOTIMPLEMENTED; 00113 //FIXME 00114 } 00115 00116 void CFile::set_bool_string_list(const TString<bool>* strings, int32_t num_str) 00117 { 00118 SG_NOTIMPLEMENTED; 00119 //FIXME 00120 } 00121 00122 CFile::~CFile() 00123 { 00124 close(); 00125 } 00126 00127 void CFile::set_variable_name(const char* name) 00128 { 00129 free(variable_name); 00130 variable_name=strdup(name); 00131 } 00132 00133 char* CFile::get_variable_name() 00134 { 00135 return strdup(variable_name); 00136 }