Mercurial > hg > octave-nkf
comparison src/ov-struct.cc @ 9857:43a7adf62534
save dims for empty structs (binary fmt)
author | Jaroslav Hajek <highegg@gmail.com> |
---|---|
date | Tue, 24 Nov 2009 07:35:47 +0100 |
parents | 1fac51c5f83f |
children | b3089dba88bf |
comparison
equal
deleted
inserted
replaced
9856:870a69bac55c | 9857:43a7adf62534 |
---|---|
1363 { | 1363 { |
1364 Octave_map m = map_value (); | 1364 Octave_map m = map_value (); |
1365 | 1365 |
1366 octave_idx_type nf = m.nfields (); | 1366 octave_idx_type nf = m.nfields (); |
1367 | 1367 |
1368 dim_vector d = dims (); | |
1369 if (d.length () < 1) | |
1370 return false; | |
1371 | |
1372 // Use negative value for ndims | |
1373 int32_t di = - d.length(); | |
1374 os.write (reinterpret_cast<char *> (&di), 4); | |
1375 for (int i = 0; i < d.length (); i++) | |
1376 { | |
1377 di = d(i); | |
1378 os.write (reinterpret_cast<char *> (&di), 4); | |
1379 } | |
1380 | |
1368 int32_t len = nf; | 1381 int32_t len = nf; |
1369 os.write (reinterpret_cast<char *> (&len), 4); | 1382 os.write (reinterpret_cast<char *> (&len), 4); |
1370 | 1383 |
1371 // Iterating over the list of keys will preserve the order of the | 1384 // Iterating over the list of keys will preserve the order of the |
1372 // fields. | 1385 // fields. |
1396 if (! is.read (reinterpret_cast<char *> (&len), 4)) | 1409 if (! is.read (reinterpret_cast<char *> (&len), 4)) |
1397 return false; | 1410 return false; |
1398 if (swap) | 1411 if (swap) |
1399 swap_bytes<4> (&len); | 1412 swap_bytes<4> (&len); |
1400 | 1413 |
1414 dim_vector dv (1, 1); | |
1415 | |
1416 if (len < 0) | |
1417 { | |
1418 // We have explicit dimensions. | |
1419 int mdims = -len; | |
1420 | |
1421 int32_t di; | |
1422 dv.resize (mdims); | |
1423 | |
1424 for (int i = 0; i < mdims; i++) | |
1425 { | |
1426 if (! is.read (reinterpret_cast<char *> (&di), 4)) | |
1427 return false; | |
1428 if (swap) | |
1429 swap_bytes<4> (&di); | |
1430 dv(i) = di; | |
1431 } | |
1432 | |
1433 if (! is.read (reinterpret_cast<char *> (&len), 4)) | |
1434 return false; | |
1435 if (swap) | |
1436 swap_bytes<4> (&len); | |
1437 } | |
1438 | |
1401 if (len > 0) | 1439 if (len > 0) |
1402 { | 1440 { |
1403 Octave_map m (map); | 1441 Octave_map m (dv); |
1404 | 1442 |
1405 for (octave_idx_type j = 0; j < len; j++) | 1443 for (octave_idx_type j = 0; j < len; j++) |
1406 { | 1444 { |
1407 octave_value t2; | 1445 octave_value t2; |
1408 bool dummy; | 1446 bool dummy; |
1432 { | 1470 { |
1433 error ("load: failed to load structure"); | 1471 error ("load: failed to load structure"); |
1434 success = false; | 1472 success = false; |
1435 } | 1473 } |
1436 } | 1474 } |
1437 else if (len == 0 ) | 1475 else if (len == 0) |
1438 map = Octave_map (dim_vector (1, 1)); | 1476 map = Octave_map (dv); |
1439 else | 1477 else |
1440 panic_impossible (); | 1478 success = false; |
1441 | 1479 |
1442 return success; | 1480 return success; |
1443 } | 1481 } |
1444 | 1482 |
1445 #if defined (HAVE_HDF5) | 1483 #if defined (HAVE_HDF5) |