comparison src/ov-range.cc @ 11176:2271261f088a

Address precision issue in ranges saved to HDF5 files
author David Bateman <dbateman@free.fr>
date Tue, 02 Nov 2010 16:27:30 +0100
parents 0de5cc44e690
children fd0a3ac60b0e
comparison
equal deleted inserted replaced
11175:c0a95a5c6d25 11176:2271261f088a
546 double range_vals[3]; 546 double range_vals[3];
547 range_vals[0] = r.base (); 547 range_vals[0] = r.base ();
548 range_vals[1] = r.inc () != 0 ? r.limit () : r.nelem (); 548 range_vals[1] = r.inc () != 0 ? r.limit () : r.nelem ();
549 range_vals[2] = r.inc (); 549 range_vals[2] = r.inc ();
550 550
551 retval = H5Dwrite (data_hid, type_hid, H5S_ALL, H5S_ALL, H5P_DEFAULT, 551 if (H5Dwrite (data_hid, type_hid, H5S_ALL, H5S_ALL, H5P_DEFAULT,
552 range_vals) >= 0; 552 range_vals) >= 0)
553 {
554 octave_idx_type nel = r.nelem ();
555 retval = hdf5_add_scalar_attr (data_hid, H5T_NATIVE_IDX,
556 "OCTAVE_RANGE_NELEM", &nel) >= 0;
557 }
558 else
559 retval = false;
553 560
554 H5Dclose (data_hid); 561 H5Dclose (data_hid);
555 H5Tclose (type_hid); 562 H5Tclose (type_hid);
556 H5Sclose (space_hid); 563 H5Sclose (space_hid);
557 564
593 double rangevals[3]; 600 double rangevals[3];
594 if (H5Dread (data_hid, range_type, H5S_ALL, H5S_ALL, H5P_DEFAULT, 601 if (H5Dread (data_hid, range_type, H5S_ALL, H5S_ALL, H5P_DEFAULT,
595 rangevals) >= 0) 602 rangevals) >= 0)
596 { 603 {
597 retval = true; 604 retval = true;
598 if (rangevals[2] != 0) 605 octave_idx_type nel;
599 range = Range (rangevals[0], rangevals[1], rangevals[2]); 606 if (hdf5_get_scalar_attr (data_hid, H5T_NATIVE_IDX,
607 "OCTAVE_RANGE_NELEM", &nel))
608 range = Range (rangevals[0], rangevals[2], nel);
600 else 609 else
601 range = Range (rangevals[0], rangevals[2], 610 {
602 static_cast<octave_idx_type> (rangevals[1])); 611 if (rangevals[2] != 0)
612 range = Range (rangevals[0], rangevals[1], rangevals[2]);
613 else
614 range = Range (rangevals[0], rangevals[2],
615 static_cast<octave_idx_type> (rangevals[1]));
616 }
603 } 617 }
604 618
605 H5Tclose (range_type); 619 H5Tclose (range_type);
606 H5Sclose (space_hid); 620 H5Sclose (space_hid);
607 H5Dclose (data_hid); 621 H5Dclose (data_hid);