mirror of
https://github.com/Unidata/netcdf-c.git
synced 2024-11-21 03:13:42 +08:00
94 lines
2.4 KiB
C++
94 lines
2.4 KiB
C++
#include "ncVlenType.h"
|
|
#include "ncGroup.h"
|
|
#include "ncCheck.h"
|
|
#include "ncException.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 <netcdf.h>
|
|
using namespace std;
|
|
using namespace netCDF;
|
|
using namespace netCDF::exceptions;
|
|
|
|
// Class represents a netCDF variable.
|
|
using namespace netCDF;
|
|
|
|
// assignment operator
|
|
NcVlenType& NcVlenType::operator=(const NcVlenType& rhs)
|
|
{
|
|
NcType::operator=(rhs); // assign base class parts
|
|
return *this;
|
|
}
|
|
|
|
// assignment operator
|
|
NcVlenType& NcVlenType::operator=(const NcType& rhs)
|
|
{
|
|
if (&rhs != this) {
|
|
// check the rhs is the base of an Opaque type
|
|
if(getTypeClass() != NC_VLEN) throw NcException("NcException","The NcType object must be the base of an Vlen type.",__FILE__,__LINE__);
|
|
// assign base class parts
|
|
NcType::operator=(rhs);
|
|
}
|
|
return *this;
|
|
}
|
|
|
|
// The copy constructor.
|
|
NcVlenType::NcVlenType(const NcVlenType& rhs):
|
|
NcType(rhs)
|
|
{
|
|
}
|
|
|
|
|
|
// Constructor generates a null object.
|
|
NcVlenType::NcVlenType() :
|
|
NcType() // invoke base class constructor
|
|
{}
|
|
|
|
// constructor
|
|
NcVlenType::NcVlenType(const NcGroup& grp, const string& name) :
|
|
NcType(grp,name)
|
|
{}
|
|
|
|
// constructor
|
|
NcVlenType::NcVlenType(const NcType& ncType):
|
|
NcType(ncType)
|
|
{
|
|
// check the nctype object is the base of a Vlen type
|
|
if(getTypeClass() != NC_VLEN) throw NcException("NcException","The NcType object must be the base of a Vlen type.",__FILE__,__LINE__);
|
|
}
|
|
|
|
// Returns the base type.
|
|
NcType NcVlenType::getBaseType() const
|
|
{
|
|
char charName[NC_MAX_NAME+1];
|
|
nc_type base_nc_typep;
|
|
size_t datum_sizep;
|
|
ncCheck(nc_inq_vlen(groupId,myId,charName,&datum_sizep,&base_nc_typep),__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);
|
|
}
|
|
}
|