From 567c04276158059089d64e0e9fd5b9c7e1b8d7ba Mon Sep 17 00:00:00 2001 From: Binh-Minh Ribler Date: Thu, 16 May 2002 17:41:00 -0500 Subject: [svn-r5428] Purpose: New Feature - per library change Description: Added the new member function getMemberIndex to classes EnumType and CompType to match the new C API H5Tget_member_index. Given the name of a member of an enumeration or compound datatype, this new function queries the index of the member. Platforms: SunOS 5.7 (arabica) Linux 6.2 (eirene) --- c++/src/H5CompType.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++-- c++/src/H5CompType.h | 4 ++++ c++/src/H5EnumType.cpp | 29 +++++++++++++++++++++++++++++ c++/src/H5EnumType.h | 4 ++++ 4 files changed, 81 insertions(+), 2 deletions(-) diff --git a/c++/src/H5CompType.cpp b/c++/src/H5CompType.cpp index 6fdba0b..3816751 100644 --- a/c++/src/H5CompType.cpp +++ b/c++/src/H5CompType.cpp @@ -68,11 +68,53 @@ string CompType::getMemberName( int member_num ) const return( member_name ); // return the member name string } -// Retrieves the offset of a member of a compound datatype. +/*------------------------------------------------------------------------- + * Function: getMemberIndex + * + * Purpose: Returns the index of a member in a compound data type. + * Members are stored in no particular order with numbers 0 + * through N-1, where N is the value returned by the member + * function getNmembers. + * + * Return: Success: index of the member if exists. + * Failure: DataTypeIException + * + * BMR - May 16, 2002 + *------------------------------------------------------------------------- + */ +int CompType::getMemberIndex(const char* name) const +{ + int member_index = H5Tget_member_index(id, name); + if( member_index < 0 ) + { + throw DataTypeIException("CompType::getMemberIndex", + "H5Tget_member_index returns negative value"); + } + return( member_index ); +} +int CompType::getMemberIndex(const string& name) const +{ + return(getMemberIndex(name.c_str())); +} + +/*------------------------------------------------------------------------- + * Function: getMemberOffset + * + * Purpose: Returns the byte offset of the beginning of a member with + * respect to the beginning of the compound data type datum. + * Members are stored in no particular order with numbers 0 + * through N-1, where N is the value returned by the member + * function getNmembers. + * + * Return: Success: Byte offset. + * Failure: Quincey: for now, 0 is not a failure + * + * BMR - 2000 + *------------------------------------------------------------------------- + */ size_t CompType::getMemberOffset( int member_num ) const { size_t offset = H5Tget_member_offset( id, member_num ); - // Q. said: for now, 0 is not a failure //if( offset == 0 ) //{ //throw DataTypeIException("CompType::getMemberOffset", diff --git a/c++/src/H5CompType.h b/c++/src/H5CompType.h index bca5722..42cd913 100644 --- a/c++/src/H5CompType.h +++ b/c++/src/H5CompType.h @@ -23,6 +23,10 @@ class __DLLCPP__ CompType : public DataType { // Returns the name of a member of this compound datatype. string getMemberName( int member_num ) const; + // Returns the index of a member in this compound data type. + int getMemberIndex(const char* name) const; + int getMemberIndex(const string& name) const; + // Returns the offset of a member of this compound datatype. size_t getMemberOffset( int memb_no ) const; diff --git a/c++/src/H5EnumType.cpp b/c++/src/H5EnumType.cpp index 5bf9ece..f10ff18 100644 --- a/c++/src/H5EnumType.cpp +++ b/c++/src/H5EnumType.cpp @@ -108,6 +108,35 @@ void EnumType::valueOf( const char* name, void *value ) const } } +/*------------------------------------------------------------------------- + * Function: getMemberIndex + * + * Purpose: Returns the index of a member in an enumeration data type. + * Members are stored in no particular order with numbers 0 + * through N-1, where N is the value returned by the member + * function getNmembers. + * + * Return: Success: index of the member if exists. + * Failure: DataTypeIException + * + * BMR - May 16, 2002 + *------------------------------------------------------------------------- + */ +int EnumType::getMemberIndex(const char *name) const +{ + int member_index = H5Tget_member_index(id, name); + if( member_index < 0 ) + { + throw DataTypeIException("EnumType::getMemberIndex", + "H5Tget_member_index returns negative value"); + } + return( member_index ); +} +int EnumType::getMemberIndex(const string& name) const +{ + return(EnumType::getMemberIndex(name.c_str())); +} + // Retrieves the value of a member in this enumeration datatype, given the // member's index. void EnumType::getMemberValue( int memb_no, void *value ) const diff --git a/c++/src/H5EnumType.h b/c++/src/H5EnumType.h index b003e43..db4bbbb 100644 --- a/c++/src/H5EnumType.h +++ b/c++/src/H5EnumType.h @@ -41,6 +41,10 @@ class __DLLCPP__ EnumType : public DataType { void valueOf( const string& name, void *value ) const; void valueOf( const char* name, void *value ) const; + // Returns the index of a member in this enumeration data type. + int getMemberIndex(const char* name) const; + int getMemberIndex(const string& name) const; + // Returns the value of an enumeration datatype member void getMemberValue( int memb_no, void *value ) const; -- cgit v0.12