1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
|
#include "ncEnumType.h"
#include "ncGroup.h"
#include "ncCheck.h"
#include "ncByte.h"
#include "ncUbyte.h"
#include "ncChar.h"
#include "ncShort.h"
#include "ncUshort.h"
#include "ncInt.h"
#include "ncUint.h"
#include "ncInt64.h"
#include "ncUint64.h"
#include "ncFloat.h"
#include "ncDouble.h"
#include "ncString.h"
#include "ncException.h"
using namespace std;
using namespace netCDF;
using namespace netCDF::exceptions;
// Class represents a netCDF variable.
// assignment operator
NcEnumType& NcEnumType::operator=(const NcEnumType& rhs)
{
NcType::operator=(rhs); // assign base class parts
return *this;
}
// assignment operator
NcEnumType& NcEnumType::operator=(const NcType& rhs)
{
if (&rhs != this) {
// check the rhs is the base of an Enum type
if(getTypeClass() != NC_ENUM) throw NcException("The NcType object must be the base of an Enum type.",__FILE__,__LINE__);
// assign base class parts
NcType::operator=(rhs);
}
return *this;
}
// The copy constructor.
NcEnumType::NcEnumType(const NcEnumType& rhs):
NcType(rhs)
{
}
// Constructor generates a null object.
NcEnumType::NcEnumType() :
NcType() // invoke base class constructor
{}
// constructor
NcEnumType::NcEnumType(const NcGroup& grp, const string& name):
NcType(grp,name)
{}
// constructor
NcEnumType::NcEnumType(const NcType& ncType):
NcType(ncType)
{
// check the nctype object is the base of an Enum type
if(getTypeClass() != NC_ENUM) throw NcException("The NcType object must be the base of an Enum type.",__FILE__,__LINE__);
}
// Returns the base type.
NcType NcEnumType::getBaseType() const
{
char charName[NC_MAX_NAME+1];
nc_type base_nc_typep;
size_t *base_sizep=NULL;
size_t *num_membersp=NULL;
ncCheck(nc_inq_enum(groupId,myId,charName,&base_nc_typep,base_sizep,num_membersp),__FILE__,__LINE__);
switch (base_nc_typep) {
case NC_BYTE : return ncByte;
case NC_UBYTE : return ncUbyte;
case NC_CHAR : return ncChar;
case NC_SHORT : return ncShort;
case NC_USHORT : return ncUshort;
case NC_INT : return ncInt;
case NC_UINT : return ncUint;
case NC_INT64 : return ncInt64;
case NC_UINT64 : return ncUint64;
case NC_FLOAT : return ncFloat;
case NC_DOUBLE : return ncDouble;
case NC_STRING : return ncString;
default:
// this is a user defined type
return NcType(getParentGroup(),base_nc_typep);
}
}
// Returns number of members in this NcEnumType object.
size_t NcEnumType::getMemberCount() const{
char charName[NC_MAX_NAME+1];
nc_type* base_nc_typep=NULL;
size_t* base_sizep=NULL;
size_t num_membersp;
ncCheck(nc_inq_enum(groupId,myId,charName,base_nc_typep,base_sizep,&num_membersp),__FILE__,__LINE__);
return num_membersp;
};
// Returns the member name for the given zero-based index.
string NcEnumType::getMemberNameFromIndex(int index) const{
void* value=NULL;
char charName[NC_MAX_NAME+1];
ncCheck(nc_inq_enum_member(groupId,myId,index,charName,value),__FILE__,__LINE__);
return static_cast<string> (charName);
};
|