blob: 5ed0cdfeba2d1692282740f07cf51e3b345e4699 [file] [log] [blame]
#include "CimData.h"
#include "CimStatus.h"
#include "CimObjectPath.h"
#include "CimInstance.h"
#include "CimString.h"
#include "CimDateTime.h"
#include "CimArray.h"
cimcData CimData::getEnc() {
return _data;
}
cimcValue* CimData::getValue() {
return &_data.value;
}
cimcType CimData::getType() {
return _data.type;
}
CimData::CimData(cimcData data) {
this->_data=data;
if (data.type & CIMC_ENC) switch (data.type) {
case CIMC_string: cim.string=new CimString(data.value.string);
break;
case CIMC_ref: cim.ref=new CimObjectPath(data.value.ref);
break;
case CIMC_dateTime: cim.dateTime=new CimDateTime(data.value.dateTime);
break;
case CIMC_instance: cim.inst=new CimInstance(data.value.inst);
break;
}
}
CimData::~CimData() {
if (_data.type & CIMC_ENC) switch (_data.type) {
case CIMC_string: delete cim.string;
break;
case CIMC_ref: delete cim.ref;
break;
case CIMC_dateTime: delete cim.dateTime;
break;
case CIMC_instance: delete cim.inst;
break;
}
}
CimData::CimData(cimcSint8 d) {
_data.state=CIMC_goodValue;
_data.value.sint8=d;
_data.type=CIMC_sint8;
}
CimData::CimData(cimcSint16 d) {
_data.state=CIMC_goodValue;
_data.value.sint16=d;
_data.type=CIMC_sint16;
}
CimData::CimData(cimcSint32 d) {
_data.state=CIMC_goodValue;
_data.value.sint32=d;
_data.type=CIMC_sint32;
}
CimData::CimData(cimcSint64 d) {
_data.state=CIMC_goodValue;
_data.value.sint64=d;
_data.type=CIMC_sint64;
}
CimData::CimData(cimcUint8 d) {
_data.state=CIMC_goodValue;
_data.value.uint8=d;
_data.type=CIMC_uint8;
}
CimData::CimData(cimcUint16 d) {
_data.state=CIMC_goodValue;
_data.value.uint16=d;
_data.type=CIMC_uint16;
}
CimData::CimData(cimcUint32 d) {
_data.state=CIMC_goodValue;
_data.value.uint32=d;
_data.type=CIMC_uint32;
}
CimData::CimData(cimcUint64 d) {
_data.state=CIMC_goodValue;
_data.value.uint64=d;
_data.type=CIMC_uint64;
}
CimData::CimData(cimcReal32 d) {
_data.state=CIMC_goodValue;
_data.value.real32=d;
_data.type=CIMC_real32;
}
CimData::CimData(cimcReal64 d) {
_data.state=CIMC_goodValue;
_data.value.real64=d;
_data.type=CIMC_real64;
}
CimData::CimData(const CimString& d) {
_data.state=CIMC_goodValue;
_data.value.chars=strdup((const char*)(&d)->enc);
_data.type=CIMC_chars;
}
CimData::CimData(const char* d) {
_data.state=CIMC_goodValue;
_data.value.chars=(char*)d;
_data.type=CIMC_chars;
}
CimData::CimData(const CimDateTime& d) {
_data.state=CIMC_goodValue;
cim.dateTime=&((CimDateTime&)d);
_data.type=CIMC_dateTime;
}
CimData::CimData(const CimArray& d) {
_data.state=CIMC_goodValue;
cim.array=&((CimArray&)d);
_data.type=(d->getEnc()->ft)->getSimpleType(d->getEnc(),0) | CIMC_ARRAY;
}
CimData::operator CimString() const {
if (_data.type!=CIMC_string)
throw CimStatus(CIMC_RC_ERR_TYPE_MISMATCH);
return *cim.string;
}
CimData::operator const char* () const {
if (_data.type!=CIMC_string)
throw CimStatus(CIMC_RC_ERR_TYPE_MISMATCH);
else return (const char*)cim.string;
}
CimData::operator CimDateTime() const {
if (_data.type!=CIMC_dateTime)
throw CimStatus(CIMC_RC_ERR_TYPE_MISMATCH);
return *cim.dateTime;
}
CimData::operator cimcSint8() const {
if (_data.type!=CIMC_sint8)
throw CimStatus(CIMC_RC_ERR_TYPE_MISMATCH);
else return _data.value.sint8;
}
CimData::operator cimcSint16() const {
if (_data.type!=CIMC_sint16)
throw CimStatus(CIMC_RC_ERR_TYPE_MISMATCH);
else return _data.value.sint16;
}
CimData::operator cimcSint32() const {
if (_data.type!=CIMC_sint32)
throw CimStatus(CIMC_RC_ERR_TYPE_MISMATCH);
else return _data.value.sint32;
}
CimData::operator cimcSint64() const {
if (_data.type!=CIMC_sint64)
throw CimStatus(CIMC_RC_ERR_TYPE_MISMATCH);
else return _data.value.sint64;
}
CimData::operator unsigned char() const {
if (_data.type!=CIMC_uint8 && _data.type!=CIMC_boolean)
throw CimStatus(CIMC_RC_ERR_TYPE_MISMATCH);
if (_data.type==CIMC_uint8)
return _data.value.uint8;
else return _data.value.boolean;
}
CimData::operator unsigned short() const {
if (_data.type!=CIMC_uint16 && _data.type!=CIMC_char16)
throw CimStatus(CIMC_RC_ERR_TYPE_MISMATCH);
if (_data.type==CIMC_uint16)
return _data.value.uint16;
else return _data.value.char16;
}
CimData::operator cimcUint32() const {
if (_data.type!=CIMC_uint32)
throw CimStatus(CIMC_RC_ERR_TYPE_MISMATCH);
else return _data.value.uint32;
}
CimData::operator cimcUint64() const {
if (_data.type!=CIMC_uint64)
throw CimStatus(CIMC_RC_ERR_TYPE_MISMATCH);
else return _data.value.uint64;
}
CimData::operator cimcReal32() const {
if (_data.type!=CIMC_real32)
throw CimStatus(CIMC_RC_ERR_TYPE_MISMATCH);
else return _data.value.real32;
}
CimData::operator cimcReal64() const {
if (_data.type!=CIMC_real64)
throw CimStatus(CIMC_RC_ERR_TYPE_MISMATCH);
else return _data.value.real64;
}
CimData::CimData(const CimObjectPath& d) {
_data.state=d->getEnc()==0?CIMC_nullValue:CIMC_goodValue;
_data.value.ref=(cimcObjectPath*)d->getEnc();
_data.type=CIMC_ref;
}
CimData::operator CimInstance() const {
if (_data.type!=CIMC_instance)
throw CimStatus(CIMC_RC_ERR_TYPE_MISMATCH);
else return *cim.inst;
}
CimData::operator CimObjectPath() const {
if (_data.type!=CIMC_ref)
throw CimStatus(CIMC_RC_ERR_TYPE_MISMATCH);
else return *cim.ref;
}
CimData::operator CimArray() const {
if (!(_data.type&CIMC_ARRAY))
throw CimStatus(CIMC_RC_ERR_TYPE_MISMATCH);
else return *cim.array;
}
int CimData::isNullValue() const {
return (_data.state & CIMC_nullValue);
}
int CimData::isNotFound() const {
return (_data.state & CIMC_notFound);
}