comparison liboctave/util/data-conv.cc @ 17424:6690dba6078a

improve efficiency of fwrite * oct-stream.h, oct-stream.cc (write_int, do_write): Delete. (convert_ints, convert_data, octave_stream::write_bytes octave_stream::skip_bytes): New functions. (octave_stream::write): Improve efficiency by writing data in larger chunks. * oct-stream.cc: Delete unnecessary template instantiations. * data-conv.h, data-conv.cc (is_equivalent_type): New template. Provide specializations for core Octave data types. (oct_data_conv::data_type_size): New function. (oct_data_conv::data_type_to_string): Correct spelling of unsigned.
author John W. Eaton <jwe@octave.org>
date Fri, 13 Sep 2013 23:31:11 -0400
parents 3856298f1ff8
children
comparison
equal deleted inserted replaced
17423:3856298f1ff8 17424:6690dba6078a
171 retval = dt_unknown; \ 171 retval = dt_unknown; \
172 break; \ 172 break; \
173 } \ 173 } \
174 } \ 174 } \
175 while (0) 175 while (0)
176
177 size_t
178 oct_data_conv::data_type_size (data_type dt)
179 {
180 size_t retval = -1;
181
182 switch (dt)
183 {
184 case oct_data_conv::dt_int8:
185 retval = sizeof (int8_t);
186 break;
187
188 case oct_data_conv::dt_uint8:
189 retval = sizeof (uint8_t);
190 break;
191
192 case oct_data_conv::dt_int16:
193 retval = sizeof (int16_t);
194 break;
195
196 case oct_data_conv::dt_uint16:
197 retval = sizeof (uint16_t);
198 break;
199
200 case oct_data_conv::dt_int32:
201 retval = sizeof (int32_t);
202 break;
203
204 case oct_data_conv::dt_uint32:
205 retval = sizeof (uint32_t);
206 break;
207
208 case oct_data_conv::dt_int64:
209 retval = sizeof (int64_t);
210 break;
211
212 case oct_data_conv::dt_uint64:
213 retval = sizeof (uint64_t);
214 break;
215
216 case oct_data_conv::dt_float:
217 case oct_data_conv::dt_single:
218 retval = sizeof (float);
219 break;
220
221 case oct_data_conv::dt_double:
222 retval = sizeof (double);
223 break;
224
225 case oct_data_conv::dt_char:
226 retval = sizeof (char);
227 break;
228
229 case oct_data_conv::dt_schar:
230 retval = sizeof (signed char);
231 break;
232
233 case oct_data_conv::dt_uchar:
234 retval = sizeof (unsigned char);
235 break;
236
237 case oct_data_conv::dt_short:
238 retval = sizeof (short);
239 break;
240
241 case oct_data_conv::dt_ushort:
242 retval = sizeof (unsigned short);
243 break;
244
245 case oct_data_conv::dt_int:
246 retval = sizeof (int);
247 break;
248
249 case oct_data_conv::dt_uint:
250 retval = sizeof (unsigned int);
251 break;
252
253 case oct_data_conv::dt_long:
254 retval = sizeof (long);
255 break;
256
257 case oct_data_conv::dt_ulong:
258 retval = sizeof (unsigned long);
259 break;
260
261 case oct_data_conv::dt_longlong:
262 retval = sizeof (long long);
263 break;
264
265 case oct_data_conv::dt_ulonglong:
266 retval = sizeof (unsigned long long);
267 break;
268
269 case oct_data_conv::dt_logical:
270 retval = sizeof (bool);
271 break;
272
273 case oct_data_conv::dt_unknown:
274 default:
275 abort ();
276 break;
277 }
278
279 return retval;
280 }
176 281
177 oct_data_conv::data_type 282 oct_data_conv::data_type
178 oct_data_conv::string_to_data_type (const std::string& str) 283 oct_data_conv::string_to_data_type (const std::string& str)
179 { 284 {
180 data_type retval = dt_unknown; 285 data_type retval = dt_unknown;
424 case oct_data_conv::dt_schar: 529 case oct_data_conv::dt_schar:
425 retval = "signed char"; 530 retval = "signed char";
426 break; 531 break;
427 532
428 case oct_data_conv::dt_uchar: 533 case oct_data_conv::dt_uchar:
429 retval = "usigned char"; 534 retval = "unsigned char";
430 break; 535 break;
431 536
432 case oct_data_conv::dt_short: 537 case oct_data_conv::dt_short:
433 retval = "short"; 538 retval = "short";
434 break; 539 break;
440 case oct_data_conv::dt_int: 545 case oct_data_conv::dt_int:
441 retval = "int"; 546 retval = "int";
442 break; 547 break;
443 548
444 case oct_data_conv::dt_uint: 549 case oct_data_conv::dt_uint:
445 retval = "usigned int"; 550 retval = "unsigned int";
446 break; 551 break;
447 552
448 case oct_data_conv::dt_long: 553 case oct_data_conv::dt_long:
449 retval = "long"; 554 retval = "long";
450 break; 555 break;
451 556
452 case oct_data_conv::dt_ulong: 557 case oct_data_conv::dt_ulong:
453 retval = "usigned long"; 558 retval = "unsigned long";
454 break; 559 break;
455 560
456 case oct_data_conv::dt_longlong: 561 case oct_data_conv::dt_longlong:
457 retval = "long long"; 562 retval = "long long";
458 break; 563 break;