diff options
author | Binh-Minh Ribler <bmribler@hdfgroup.org> | 2000-12-07 00:04:08 (GMT) |
---|---|---|
committer | Binh-Minh Ribler <bmribler@hdfgroup.org> | 2000-12-07 00:04:08 (GMT) |
commit | f148ff3caf533e9f6029798617f0a8087bcd6c05 (patch) | |
tree | 00bb6ca4d0e50aa0e591eed6a0d739c04c93c5e7 /c++/src/H5AtomType.cpp | |
parent | 7df8cd5cfe22372f603ea058334647fe4017008e (diff) | |
download | hdf5-f148ff3caf533e9f6029798617f0a8087bcd6c05.zip hdf5-f148ff3caf533e9f6029798617f0a8087bcd6c05.tar.gz hdf5-f148ff3caf533e9f6029798617f0a8087bcd6c05.tar.bz2 |
[svn-r3080]
Purpose:
Support portability
Description:
I forgot that source file extension .C will not work on Windows.
Solution:
Changed all source file from *.C to *.cpp for portability.
Platforms tested:
arabica (sparc-sun-solaris 2.7)
Diffstat (limited to 'c++/src/H5AtomType.cpp')
-rw-r--r-- | c++/src/H5AtomType.cpp | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/c++/src/H5AtomType.cpp b/c++/src/H5AtomType.cpp new file mode 100644 index 0000000..bdd98b0 --- /dev/null +++ b/c++/src/H5AtomType.cpp @@ -0,0 +1,146 @@ +#include <string> + +#include "H5Include.h" +#include "H5RefCounter.h" +#include "H5Exception.h" +#include "H5IdComponent.h" +#include "H5PropList.h" +#include "H5Object.h" +#include "H5DataType.h" +#include "H5AtomType.h" + +#ifndef H5_NO_NAMESPACE +namespace H5 { +#endif + +// Default constructor +AtomType::AtomType() : DataType() {} + +// Constructor that takes an existing id +AtomType::AtomType( const hid_t existing_id ) : DataType( existing_id ) {} + +// Copy constructor: makes a copy of the original AtomType object. +AtomType::AtomType( const AtomType& original ) : DataType( original ) {} + +// Sets the total size for an atomic datatype. +void AtomType::setSize( size_t size ) const +{ + // Call C routine H5Tset_size to set the total size + herr_t ret_value = H5Tset_size( id, size ); + if( ret_value < 0 ) + { + throw DataTypeIException(); + } +} + +// Returns the byte order of an atomic datatype. Inheritance class??? +H5T_order_t AtomType::getOrder( string& order_string ) const +{ + // Call C routine to get the byte ordering + H5T_order_t type_order = H5Tget_order( id ); + + // return a byte order constant if successful + if( type_order == H5T_ORDER_ERROR ) + { + throw DataTypeIException(); + } + if( type_order == H5T_ORDER_LE ) + order_string = "Little endian byte ordering (0)"; + else if( type_order == H5T_ORDER_BE ) + order_string = "Big endian byte ordering (1)"; + else if( type_order == H5T_ORDER_VAX ) + order_string = "VAX mixed byte ordering (2)"; + return( type_order ); +} + +// Sets the byte ordering of an atomic datatype. Inheritance class??? +void AtomType::setOrder( H5T_order_t order ) const +{ + // Call C routine to set the byte ordering + herr_t ret_value = H5Tset_order( id, order ); + if( ret_value < 0 ) + { + throw DataTypeIException(); + } +} + +// Returns the precision of an atomic datatype. +size_t AtomType::getPrecision() const +{ + size_t num_signi_bits = H5Tget_precision( id ); // C routine + + // returns number of significant bits if successful + if( num_signi_bits == 0 ) + { + throw DataTypeIException(); + } + return( num_signi_bits ); +} + +// Sets the precision of an atomic datatype. +void AtomType::setPrecision( size_t precision ) const +{ + // Call C routine to set the datatype precision + herr_t ret_value = H5Tset_precision( id, precision ); + if( ret_value < 0 ) + { + throw DataTypeIException(); + } +} + +// Retrieves the bit offset of the first significant bit. +// 12/05/00: due to C API change +// - return type changed from size_t to int +// - offset = -1 when failure occurs vs. 0 +int AtomType::getOffset() const +{ + int offset = H5Tget_offset( id ); // C routine + + // returns a non-negative offset value if successful + if( offset == -1 ) + { + throw DataTypeIException(); + } + return( offset ); +} + +// Sets the bit offset of the first significant bit. +void AtomType::setOffset( size_t offset ) const +{ + // Call C routine to set the bit offset + herr_t ret_value = H5Tset_offset( id, offset ); + if( ret_value < 0 ) + { + throw DataTypeIException(); + } +} + +// Retrieves the padding type of the least and most-significant bit padding. +// these two are for Opaque type +//void AtomType::getPad( H5T_pad_t& lsb, H5T_pad_t& msb ) const +//{ + // Call C routine to get the padding type + //herr_t ret_value = H5Tget_pad( id, &lsb, &msb ); + //if( ret_value < 0 ) + //{ + //throw DataTypeIException(); + //} +//} + +// Sets the least and most-significant bits padding types +//void AtomType::setPad( H5T_pad_t lsb, H5T_pad_t msb ) const +//{ + // Call C routine to set the padding type + //herr_t ret_value = H5Tset_pad( id, lsb, msb ); + //if( ret_value < 0 ) + //{ + //throw DataTypeIException(); + //} +//} + +// This destructor terminates access to the datatype; it calls ~DataType +AtomType::~AtomType() {} + +#ifndef H5_NO_NAMESPACE +} // end namespace +#endif |