00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include <shogun/io/streaming/StreamingFile.h>
00012
00013 #include <ctype.h>
00014
00015 namespace shogun
00016 {
00028
00029 #define GET_VECTOR(fname, conv, sg_type) \
00030 void CStreamingFile::get_vector \
00031 (sg_type*& vector, int32_t& num_feat) \
00032 { \
00033 vector=NULL; \
00034 num_feat=-1; \
00035 SG_ERROR("Read function not supported by the feature type!"); \
00036 }
00037
00038 GET_VECTOR(get_bool_vector, atoi, bool)
00039 GET_VECTOR(get_byte_vector, atoi, uint8_t)
00040 GET_VECTOR(get_char_vector, atoi, char)
00041 GET_VECTOR(get_int_vector, atoi, int32_t)
00042 GET_VECTOR(get_shortreal_vector, atof, float32_t)
00043 GET_VECTOR(get_real_vector, atof, float64_t)
00044 GET_VECTOR(get_short_vector, atoi, int16_t)
00045 GET_VECTOR(get_word_vector, atoi, uint16_t)
00046 GET_VECTOR(get_int8_vector, atoi, int8_t)
00047 GET_VECTOR(get_uint_vector, atoi, uint32_t)
00048 GET_VECTOR(get_long_vector, atoi, int64_t)
00049 GET_VECTOR(get_ulong_vector, atoi, uint64_t)
00050 GET_VECTOR(get_longreal_vector, atoi, floatmax_t)
00051 #undef GET_VECTOR
00052
00053
00054 #define GET_VECTOR_AND_LABEL(fname, conv, sg_type) \
00055 void CStreamingFile::get_vector_and_label \
00056 (sg_type*& vector, int32_t& num_feat, float64_t& label) \
00057 { \
00058 vector=NULL; \
00059 num_feat=-1; \
00060 SG_ERROR("Read function not supported by the feature type!"); \
00061 }
00062
00063 GET_VECTOR_AND_LABEL(get_bool_vector_and_label, str_to_bool, bool)
00064 GET_VECTOR_AND_LABEL(get_byte_vector_and_label, atoi, uint8_t)
00065 GET_VECTOR_AND_LABEL(get_char_vector_and_label, atoi, char)
00066 GET_VECTOR_AND_LABEL(get_int_vector_and_label, atoi, int32_t)
00067 GET_VECTOR_AND_LABEL(get_shortreal_vector_and_label, atof, float32_t)
00068 GET_VECTOR_AND_LABEL(get_real_vector_and_label, atof, float64_t)
00069 GET_VECTOR_AND_LABEL(get_short_vector_and_label, atoi, int16_t)
00070 GET_VECTOR_AND_LABEL(get_word_vector_and_label, atoi, uint16_t)
00071 GET_VECTOR_AND_LABEL(get_int8_vector_and_label, atoi, int8_t)
00072 GET_VECTOR_AND_LABEL(get_uint_vector_and_label, atoi, uint32_t)
00073 GET_VECTOR_AND_LABEL(get_long_vector_and_label, atoi, int64_t)
00074 GET_VECTOR_AND_LABEL(get_ulong_vector_and_label, atoi, uint64_t)
00075 GET_VECTOR_AND_LABEL(get_longreal_vector_and_label, atoi, floatmax_t)
00076 #undef GET_VECTOR_AND_LABEL
00077
00078
00079 #define GET_STRING(fname, conv, sg_type) \
00080 void CStreamingFile::get_string \
00081 (sg_type*& vector, int32_t& num_feat) \
00082 { \
00083 vector=NULL; \
00084 num_feat=-1; \
00085 SG_ERROR("Read function not supported by the feature type!"); \
00086 }
00087
00088 GET_STRING(get_bool_string, str_to_bool, bool)
00089 GET_STRING(get_byte_string, atoi, uint8_t)
00090 GET_STRING(get_char_string, atoi, char)
00091 GET_STRING(get_int_string, atoi, int32_t)
00092 GET_STRING(get_shortreal_string, atof, float32_t)
00093 GET_STRING(get_real_string, atof, float64_t)
00094 GET_STRING(get_short_string, atoi, int16_t)
00095 GET_STRING(get_word_string, atoi, uint16_t)
00096 GET_STRING(get_int8_string, atoi, int8_t)
00097 GET_STRING(get_uint_string, atoi, uint32_t)
00098 GET_STRING(get_long_string, atoi, int64_t)
00099 GET_STRING(get_ulong_string, atoi, uint64_t)
00100 GET_STRING(get_longreal_string, atoi, floatmax_t)
00101 #undef GET_STRING
00102
00103
00104 #define GET_STRING_AND_LABEL(fname, conv, sg_type) \
00105 void CStreamingFile::get_string_and_label \
00106 (sg_type*& vector, int32_t& num_feat, float64_t& label) \
00107 { \
00108 vector=NULL; \
00109 num_feat=-1; \
00110 SG_ERROR("Read function not supported by the feature type!"); \
00111 }
00112
00113 GET_STRING_AND_LABEL(get_bool_string_and_label, str_to_bool, bool)
00114 GET_STRING_AND_LABEL(get_byte_string_and_label, atoi, uint8_t)
00115 GET_STRING_AND_LABEL(get_char_string_and_label, atoi, char)
00116 GET_STRING_AND_LABEL(get_int_string_and_label, atoi, int32_t)
00117 GET_STRING_AND_LABEL(get_shortreal_string_and_label, atof, float32_t)
00118 GET_STRING_AND_LABEL(get_real_string_and_label, atof, float64_t)
00119 GET_STRING_AND_LABEL(get_short_string_and_label, atoi, int16_t)
00120 GET_STRING_AND_LABEL(get_word_string_and_label, atoi, uint16_t)
00121 GET_STRING_AND_LABEL(get_int8_string_and_label, atoi, int8_t)
00122 GET_STRING_AND_LABEL(get_uint_string_and_label, atoi, uint32_t)
00123 GET_STRING_AND_LABEL(get_long_string_and_label, atoi, int64_t)
00124 GET_STRING_AND_LABEL(get_ulong_string_and_label, atoi, uint64_t)
00125 GET_STRING_AND_LABEL(get_longreal_string_and_label, atoi, floatmax_t)
00126 #undef GET_STRING_AND_LABEL
00127
00128
00129 #define GET_SPARSE_VECTOR(fname, conv, sg_type) \
00130 \
00131 void CStreamingFile::get_sparse_vector \
00132 (SGSparseVectorEntry<sg_type>*& vector, int32_t& num_feat) \
00133 { \
00134 vector=NULL; \
00135 num_feat=-1; \
00136 SG_ERROR("Read function not supported by the feature type!"); \
00137 }
00138
00139 GET_SPARSE_VECTOR(get_bool_sparse_vector, str_to_bool, bool)
00140 GET_SPARSE_VECTOR(get_byte_sparse_vector, atoi, uint8_t)
00141 GET_SPARSE_VECTOR(get_char_sparse_vector, atoi, char)
00142 GET_SPARSE_VECTOR(get_int_sparse_vector, atoi, int32_t)
00143 GET_SPARSE_VECTOR(get_shortreal_sparse_vector, atof, float32_t)
00144 GET_SPARSE_VECTOR(get_real_sparse_vector, atof, float64_t)
00145 GET_SPARSE_VECTOR(get_short_sparse_vector, atoi, int16_t)
00146 GET_SPARSE_VECTOR(get_word_sparse_vector, atoi, uint16_t)
00147 GET_SPARSE_VECTOR(get_int8_sparse_vector, atoi, int8_t)
00148 GET_SPARSE_VECTOR(get_uint_sparse_vector, atoi, uint32_t)
00149 GET_SPARSE_VECTOR(get_long_sparse_vector, atoi, int64_t)
00150 GET_SPARSE_VECTOR(get_ulong_sparse_vector, atoi, uint64_t)
00151 GET_SPARSE_VECTOR(get_longreal_sparse_vector, atoi, floatmax_t)
00152 #undef GET_SPARSE_VECTOR
00153
00154
00155 #define GET_SPARSE_VECTOR_AND_LABEL(fname, conv, sg_type) \
00156 \
00157 void CStreamingFile::get_sparse_vector_and_label \
00158 (SGSparseVectorEntry<sg_type>*& vector, \
00159 int32_t& num_feat, \
00160 float64_t& label) \
00161 { \
00162 vector=NULL; \
00163 num_feat=-1; \
00164 SG_ERROR("Read function not supported by the feature type!"); \
00165 }
00166
00167 GET_SPARSE_VECTOR_AND_LABEL(get_bool_sparse_vector_and_label, str_to_bool, bool)
00168 GET_SPARSE_VECTOR_AND_LABEL(get_byte_sparse_vector_and_label, atoi, uint8_t)
00169 GET_SPARSE_VECTOR_AND_LABEL(get_char_sparse_vector_and_label, atoi, char)
00170 GET_SPARSE_VECTOR_AND_LABEL(get_int_sparse_vector_and_label, atoi, int32_t)
00171 GET_SPARSE_VECTOR_AND_LABEL(get_shortreal_sparse_vector_and_label, atof, float32_t)
00172 GET_SPARSE_VECTOR_AND_LABEL(get_real_sparse_vector_and_label, atof, float64_t)
00173 GET_SPARSE_VECTOR_AND_LABEL(get_short_sparse_vector_and_label, atoi, int16_t)
00174 GET_SPARSE_VECTOR_AND_LABEL(get_word_sparse_vector_and_label, atoi, uint16_t)
00175 GET_SPARSE_VECTOR_AND_LABEL(get_int8_sparse_vector_and_label, atoi, int8_t)
00176 GET_SPARSE_VECTOR_AND_LABEL(get_uint_sparse_vector_and_label, atoi, uint32_t)
00177 GET_SPARSE_VECTOR_AND_LABEL(get_long_sparse_vector_and_label, atoi, int64_t)
00178 GET_SPARSE_VECTOR_AND_LABEL(get_ulong_sparse_vector_and_label, atoi, uint64_t)
00179 GET_SPARSE_VECTOR_AND_LABEL(get_longreal_sparse_vector_and_label, atoi, floatmax_t)
00180 #undef GET_SPARSE_VECTOR_AND_LABEL
00181
00182 void CStreamingFile::get_vector(VwExample*& ex, int32_t &len)
00183 {
00184 SG_ERROR("Read function not supported by the feature type!\n");
00185 }
00186
00187 void CStreamingFile::get_vector_and_label(VwExample*& ex, int32_t& len, float64_t& label)
00188 {
00189 SG_ERROR("Read function not supported by the feature type!\n");
00190 }
00191
00192 }
00193 using namespace shogun;
00194
00195 CStreamingFile::CStreamingFile() : CSGObject()
00196 {
00197 buf=NULL;
00198 filename=NULL;
00199 }
00200
00201 CStreamingFile::CStreamingFile(const char* fname, char rw) : CSGObject()
00202 {
00203 task=rw;
00204 filename=strdup(fname);
00205 int mode = O_LARGEFILE;
00206
00207 switch (rw)
00208 {
00209 case 'r':
00210 mode |= O_RDONLY;
00211 break;
00212 case 'w':
00213 mode |= O_WRONLY;
00214 break;
00215 default:
00216 SG_ERROR("Unknown mode '%c'\n", task);
00217 }
00218
00219 if (filename)
00220 {
00221 int file = open((const char*) filename, mode);
00222 if (file < 0)
00223 SG_ERROR("Error opening file '%s'\n", filename);
00224
00225 buf = new CIOBuffer(file);
00226 SG_REF(buf);
00227 }
00228 else
00229 SG_ERROR("Error getting the file name!\n");
00230 }
00231
00232 CStreamingFile::~CStreamingFile()
00233 {
00234 SG_FREE(filename);
00235 SG_UNREF(buf);
00236 }