Mercurial > octave-nkf
diff src/ov-bool.cc @ 4687:e95c86d48732
[project @ 2004-01-06 21:53:34 by jwe]
author | jwe |
---|---|
date | Tue, 06 Jan 2004 21:53:34 +0000 |
parents | d44675070f1a |
children | 2eb844b27953 |
line wrap: on
line diff
--- a/src/ov-bool.cc Tue Jan 06 19:31:57 2004 +0000 +++ b/src/ov-bool.cc Tue Jan 06 21:53:34 2004 +0000 @@ -43,6 +43,9 @@ #include "ov-scalar.h" #include "pr-output.h" +#include "ls-oct-ascii.h" +#include "ls-hdf5.h" + template class octave_base_scalar<bool>; DEFINE_OCTAVE_ALLOCATOR (octave_bool); @@ -112,6 +115,110 @@ return octave_value (s); } +bool +octave_bool::save_ascii (std::ostream& os, bool& /* infnan_warned */, + bool /* strip_nan_and_inf */) +{ + double d = double_value (); + + octave_write_double (os, d); + os << "\n"; + + return true; +} + +bool +octave_bool::load_ascii (std::istream& is) +{ + scalar = (octave_read_double (is) != 0.); + + if (!is) + { + error ("load: failed to load scalar constant"); + return false; + } + + return true; +} + +bool +octave_bool::save_binary (std::ostream& os, bool& /* save_as_floats */) +{ + char tmp = (scalar ? 1 : 0); + os.write (X_CAST (char *, &tmp), 1); + + return true; +} + +bool +octave_bool::load_binary (std::istream& is, bool /* swap */, + oct_mach_info::float_format /* fmt */) +{ + char tmp; + if (! is.read (X_CAST (char *, &tmp), 1)) + return false; + scalar = (tmp ? 1 : 0); + return true; +} + +#if defined (HAVE_HDF5) +bool +octave_bool::save_hdf5 (hid_t loc_id, const char *name, + bool /* save_as_floats */) +{ + hsize_t dimens[3]; + hid_t space_hid = -1, data_hid = -1; + bool retval = true; + + space_hid = H5Screate_simple (0, dimens, (hsize_t*) 0); + if (space_hid < 0) return false; + + data_hid = H5Dcreate (loc_id, name, H5T_NATIVE_DOUBLE, space_hid, + H5P_DEFAULT); + if (data_hid < 0) + { + H5Sclose (space_hid); + return false; + } + + double tmp = double_value (); + retval = H5Dwrite (data_hid, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, + H5P_DEFAULT, (void*) &tmp) >= 0; + + H5Dclose (data_hid); + H5Sclose (space_hid); + return retval; +} + +bool +octave_bool::load_hdf5 (hid_t loc_id, const char *name, + bool /* have_h5giterate_bug */) +{ + hid_t data_hid = H5Dopen (loc_id, name); + hid_t space_id = H5Dget_space (data_hid); + + hsize_t rank = H5Sget_simple_extent_ndims (space_id); + + if (rank != 0) + { + H5Dclose (data_hid); + return false; + } + + double dtmp; + if (H5Dread (data_hid, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, + H5P_DEFAULT, (void *) &dtmp) < 0) + { + H5Dclose (data_hid); + return false; + } + + scalar = (dtmp != 0.); + H5Dclose (data_hid); + return true; +} +#endif + /* ;;; Local Variables: *** ;;; mode: C++ ***