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)