SHOGUN  v2.0.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
SerializableAsciiReader00.cpp
Go to the documentation of this file.
1 /*
2  * This program is free software; you can redistribute it and/or modify
3  * it under the terms of the GNU General Public License as published by
4  * the Free Software Foundation; either version 3 of the License, or
5  * (at your option) any later version.
6  *
7  * Written (W) 2010 Soeren Sonnenburg
8  * Copyright (C) 2010 Berlin Institute of Technology
9  */
10 
12 
13 using namespace shogun;
14 
16  CSerializableAsciiFile* file) { m_file = file; }
17 
19 
20 bool
21 SerializableAsciiReader00::read_scalar_wrapped(
22  const TSGDataType* type, void* param)
23 {
24  switch (type->m_ptype) {
25  case PT_BOOL:
26  char bool_buf;
27 
28  if (fscanf(m_file->m_fstream, "%c", &bool_buf) != 1)
29  return false;
30 
31  switch (bool_buf) {
32  case 't': *(bool*) param = true; break;
33  case 'f': *(bool*) param = false; break;
34  default: return false;
35  }
36 
37  break;
38  case PT_CHAR:
39  if (fscanf(m_file->m_fstream, "%"SCNu8, (uint8_t*) param)
40  != 1) return false;
41  break;
42  case PT_INT8:
43  if (fscanf(m_file->m_fstream, "%"SCNi8, (int8_t*) param)
44  != 1) return false;
45  break;
46  case PT_UINT8:
47  if (fscanf(m_file->m_fstream, "%"SCNu8, (uint8_t*) param)
48  != 1) return false;
49  break;
50  case PT_INT16:
51  if (fscanf(m_file->m_fstream, "%"SCNi16, (int16_t*) param)
52  != 1) return false;
53  break;
54  case PT_UINT16:
55  if (fscanf(m_file->m_fstream, "%"SCNu16, (uint16_t*) param)
56  != 1) return false;
57  break;
58  case PT_INT32:
59  if (fscanf(m_file->m_fstream, "%"SCNi32, (int32_t*) param)
60  != 1) return false;
61  break;
62  case PT_UINT32:
63  if (fscanf(m_file->m_fstream, "%"SCNu32, (uint32_t*) param)
64  != 1) return false;
65  break;
66  case PT_INT64:
67  if (fscanf(m_file->m_fstream, "%"SCNi64, (int64_t*) param)
68  != 1) return false;
69  break;
70  case PT_UINT64:
71  if (fscanf(m_file->m_fstream, "%"SCNu64, (uint64_t*) param)
72  != 1) return false;
73  break;
74  case PT_FLOAT32:
75  if (fscanf(m_file->m_fstream, "%g", (float32_t*) param)
76  != 1) return false;
77  break;
78  case PT_FLOAT64:
79  if (fscanf(m_file->m_fstream, "%lg", (float64_t*) param)
80  != 1) return false;
81  break;
82  case PT_FLOATMAX:
83  if (fscanf(m_file->m_fstream, "%Lg", (floatmax_t*) param)
84  != 1) return false;
85  break;
86  case PT_SGOBJECT:
87  SG_ERROR("read_scalar_wrapped(): Implementation error during"
88  " reading AsciiFile!");
89  return false;
90  }
91 
92  return true;
93 }
94 
95 bool
96 SerializableAsciiReader00::read_cont_begin_wrapped(
97  const TSGDataType* type, index_t* len_read_y, index_t* len_read_x)
98 {
99  switch (type->m_ctype) {
100  case CT_NDARRAY:
102  case CT_SCALAR:
103  SG_ERROR("read_cont_begin_wrapped(): Implementation error "
104  "during writing AsciiFile!");
105  return false;
106  case CT_VECTOR: case CT_SGVECTOR:
107  if (fscanf(m_file->m_fstream, "%"SCNi32" ", len_read_y) != 1)
108  return false;
109  *len_read_x = 1;
110  break;
111  case CT_MATRIX: case CT_SGMATRIX:
112  if (fscanf(m_file->m_fstream, "%"SCNi32" %"SCNi32" ",
113  len_read_y, len_read_x) != 2)
114  return false;
115  break;
116  }
117 
118  if (fgetc(m_file->m_fstream) != CHAR_CONT_BEGIN) return false;
119 
120  return true;
121 }
122 
123 bool
124 SerializableAsciiReader00::read_cont_end_wrapped(
125  const TSGDataType* type, index_t len_read_y, index_t len_read_x)
126 {
127  if (fgetc(m_file->m_fstream) != CHAR_CONT_END) return false;
128 
129  return true;
130 }
131 
132 bool
133 SerializableAsciiReader00::read_string_begin_wrapped(
134  const TSGDataType* type, index_t* length)
135 {
136  if (fscanf(m_file->m_fstream, "%"PRIi32, length) != 1)
137  return false;
138  if (fgetc(m_file->m_fstream) != ' ') return false;
139  if (fgetc(m_file->m_fstream) != CHAR_STRING_BEGIN) return false;
140 
141  return true;
142 }
143 
144 bool
145 SerializableAsciiReader00::read_string_end_wrapped(
146  const TSGDataType* type, index_t length)
147 {
148  if (fgetc(m_file->m_fstream) != CHAR_STRING_END) return false;
149 
150  return true;
151 }
152 
153 bool
154 SerializableAsciiReader00::read_stringentry_begin_wrapped(
155  const TSGDataType* type, index_t y)
156 {
157  if (fgetc(m_file->m_fstream) != CHAR_ITEM_BEGIN) return false;
158 
159  return true;
160 }
161 
162 bool
163 SerializableAsciiReader00::read_stringentry_end_wrapped(
164  const TSGDataType* type, index_t y)
165 {
166  if (fgetc(m_file->m_fstream) != CHAR_ITEM_END) return false;
167 
168  return true;
169 }
170 
171 bool
172 SerializableAsciiReader00::read_sparse_begin_wrapped(
173  const TSGDataType* type, index_t* length)
174 {
175  if (fscanf(m_file->m_fstream, "%"PRIi32, length) != 2) return false;
176  if (fgetc(m_file->m_fstream) != ' ') return false;
177  if (fgetc(m_file->m_fstream) != CHAR_SPARSE_BEGIN) return false;
178 
179  return true;
180 }
181 
182 bool
183 SerializableAsciiReader00::read_sparse_end_wrapped(
184  const TSGDataType* type, index_t length)
185 {
186  if (fgetc(m_file->m_fstream) != CHAR_SPARSE_END) return false;
187 
188  return true;
189 }
190 
191 bool
192 SerializableAsciiReader00::read_sparseentry_begin_wrapped(
193  const TSGDataType* type, SGSparseVectorEntry<char>* first_entry,
194  index_t* feat_index, index_t y)
195 {
196  if (fscanf(m_file->m_fstream, "%"PRIi32, feat_index) != 1)
197  return false;
198  if (fgetc(m_file->m_fstream) != ' ') return false;
199  if (fgetc(m_file->m_fstream) != CHAR_ITEM_BEGIN) return false;
200 
201  return true;
202 }
203 
204 bool
205 SerializableAsciiReader00::read_sparseentry_end_wrapped(
206  const TSGDataType* type, SGSparseVectorEntry<char>* first_entry,
207  index_t* feat_index, index_t y)
208 {
209  if (fgetc(m_file->m_fstream) != CHAR_ITEM_END) return false;
210 
211  return true;
212 }
213 
214 bool
215 SerializableAsciiReader00::read_item_begin_wrapped(
216  const TSGDataType* type, index_t y, index_t x)
217 {
218  if (fgetc(m_file->m_fstream) != CHAR_ITEM_BEGIN) return false;
219 
220  return true;
221 }
222 
223 bool
224 SerializableAsciiReader00::read_item_end_wrapped(
225  const TSGDataType* type, index_t y, index_t x)
226 {
227  if (fgetc(m_file->m_fstream) != CHAR_ITEM_END) return false;
228 
229  return true;
230 }
231 
232 bool
233 SerializableAsciiReader00::read_sgserializable_begin_wrapped(
234  const TSGDataType* type, char* sgserializable_name,
235  EPrimitiveType* generic)
236 {
237  if (fscanf(m_file->m_fstream, "%"STRING_LEN_STR"s ",
238  sgserializable_name) != 1) return false;
239 
240  if (strcmp(sgserializable_name, STR_SGSERIAL_NULL) == 0) {
241  if (fgetc(m_file->m_fstream) != CHAR_SGSERIAL_BEGIN)
242  return false;
243 
244  *sgserializable_name = '\0';
245  } else {
246  string_t buf;
247  if (fscanf(m_file->m_fstream, "%"STRING_LEN_STR"s ", buf)
248  != 1) return false;
249 
250  if (buf[0] != CHAR_SGSERIAL_BEGIN) {
251  if (!TSGDataType::string_to_ptype(generic, buf))
252  return false;
253 
254  if (fgetc(m_file->m_fstream) != CHAR_SGSERIAL_BEGIN)
255  return false;
256  if (fgetc(m_file->m_fstream) != CHAR_TYPE_END)
257  return false;
258  }
259  }
260 
261  m_file->m_stack_fpos.push_back(ftell(m_file->m_fstream));
262 
263  return true;
264 }
265 
266 bool
267 SerializableAsciiReader00::read_sgserializable_end_wrapped(
268  const TSGDataType* type, const char* sgserializable_name,
269  EPrimitiveType generic)
270 {
271  if (fgetc(m_file->m_fstream) != CHAR_SGSERIAL_END) return false;
272 
273  m_file->m_stack_fpos.pop_back();
274 
275  return true;
276 }
277 
278 bool
279 SerializableAsciiReader00::read_type_begin_wrapped(
280  const TSGDataType* type, const char* name, const char* prefix)
281 {
282  if (fseek(m_file->m_fstream, m_file->m_stack_fpos.back(), SEEK_SET
283  ) != 0) return false;
284 
286 
287  string_t type_str;
288  type->to_string(type_str, STRING_LEN);
289 
290  string_t r_name, r_type;
291  while (true) {
292  if (fscanf(m_file->m_fstream, "%"STRING_LEN_STR"s %"
293  STRING_LEN_STR "s ", r_name, r_type) != 2)
294  return false;
295 
296  if (strcmp(r_name, name) == 0
297  && strcmp(r_type, type_str) == 0) return true;
298 
299  if (!m_file->ignore()) return false;
300  }
301 
302  return false;
303 }
304 
305 bool
306 SerializableAsciiReader00::read_type_end_wrapped(
307  const TSGDataType* type, const char* name, const char* prefix)
308 {
309  if (fgetc(m_file->m_fstream) != CHAR_TYPE_END) return false;
310 
312 
313  return true;
314 }

SHOGUN Machine Learning Toolbox - Documentation