version 1.50, 2004/10/17 20:39:17
|
version 1.51, 2004/11/29 18:48:19
|
|
|
// Carol Ann Krug Graves, Hewlett-Packard Company | // Carol Ann Krug Graves, Hewlett-Packard Company |
// (carolann_graves@hp.com) | // (carolann_graves@hp.com) |
// Adriann Schuur (schuur@de.ibm.com) PEP 164 | // Adriann Schuur (schuur@de.ibm.com) PEP 164 |
|
// Dave Sudlik, IBM (dsudlik@us.ibm.com) |
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
|
|
out << x.toString(); | out << x.toString(); |
} | } |
| |
|
inline void _toString(Array<Sint8>& out, const CIMObject& x) |
|
{ |
|
out << x.toString(); |
|
} |
|
|
template<class T> | template<class T> |
void _toString(Array<Sint8>& out, const T* p, Uint32 size) | void _toString(Array<Sint8>& out, const T* p, Uint32 size) |
{ | { |
|
|
set(x); | set(x); |
} | } |
| |
|
CIMValue::CIMValue(const CIMObject& x) |
|
{ |
|
_rep = new CIMValueRep(); |
|
set(x); |
|
} |
|
|
CIMValue::CIMValue(const Array<Boolean>& x) | CIMValue::CIMValue(const Array<Boolean>& x) |
{ | { |
_rep = new CIMValueRep(); | _rep = new CIMValueRep(); |
|
|
set(x); | set(x); |
} | } |
| |
|
CIMValue::CIMValue(const Array<CIMObject>& x) |
|
{ |
|
_rep = new CIMValueRep(); |
|
set(x); |
|
} |
|
|
CIMValue::CIMValue(const CIMValue& x) | CIMValue::CIMValue(const CIMValue& x) |
{ | { |
_rep = new CIMValueRep(); | _rep = new CIMValueRep(); |
|
|
new Array<CIMObjectPath>(*(x._rep->_u._referenceArray)); | new Array<CIMObjectPath>(*(x._rep->_u._referenceArray)); |
break; | break; |
| |
|
case CIMTYPE_OBJECT: |
|
_rep->_u._objectArray = |
|
new Array<CIMObject>(*(x._rep->_u._objectArray)); |
|
break; |
|
|
default: | default: |
PEGASUS_ASSERT(false); | PEGASUS_ASSERT(false); |
} | } |
|
|
new CIMObjectPath(*(x._rep->_u._referenceValue)); | new CIMObjectPath(*(x._rep->_u._referenceValue)); |
break; | break; |
| |
|
case CIMTYPE_OBJECT: |
|
_rep->_u._objectValue = |
|
new CIMObject(x._rep->_u._objectValue->clone()); |
|
break; |
|
|
// Should never get here. testing complete enum | // Should never get here. testing complete enum |
default: | default: |
PEGASUS_ASSERT(false); | PEGASUS_ASSERT(false); |
|
|
delete _rep->_u._referenceArray; | delete _rep->_u._referenceArray; |
break; | break; |
| |
|
case CIMTYPE_OBJECT: |
|
delete _rep->_u._objectArray; |
|
break; |
|
|
default: | default: |
PEGASUS_ASSERT(false); | PEGASUS_ASSERT(false); |
} | } |
|
|
delete _rep->_u._referenceValue; | delete _rep->_u._referenceValue; |
break; | break; |
| |
|
case CIMTYPE_OBJECT: |
|
delete _rep->_u._objectValue; |
|
break; |
|
|
default: | default: |
PEGASUS_ASSERT(false); | PEGASUS_ASSERT(false); |
} | } |
|
|
return _rep->_u._referenceArray->size(); | return _rep->_u._referenceArray->size(); |
break; | break; |
| |
|
case CIMTYPE_OBJECT: |
|
return _rep->_u._objectArray->size(); |
|
break; |
|
|
//default: // Handled below | //default: // Handled below |
} | } |
| |
|
|
set(Array<CIMObjectPath>(arraySize)); | set(Array<CIMObjectPath>(arraySize)); |
break; | break; |
| |
|
case CIMTYPE_OBJECT: |
|
set(Array<CIMObject>(arraySize)); |
|
break; |
|
|
default: | default: |
throw TypeMismatchException(); | throw TypeMismatchException(); |
} | } |
|
|
set(CIMObjectPath()); | set(CIMObjectPath()); |
break; | break; |
| |
|
case CIMTYPE_OBJECT: |
|
set(CIMObject()); |
|
break; |
|
|
default: | default: |
throw TypeMismatchException(); | throw TypeMismatchException(); |
} | } |
|
|
_rep->_isNull = false; | _rep->_isNull = false; |
} | } |
| |
|
void CIMValue::set(const CIMObject& x) |
|
{ |
|
clear(); |
|
if (x.isUninitialized()) { |
|
// Don't need to clone since null CIMObjects aren't shared when created. |
|
// Doesn't work anyway, clone() throws an exception if null. |
|
_rep->_u._objectValue = new CIMObject(x); |
|
} |
|
else { |
|
_rep->_u._objectValue = new CIMObject(x.clone()); |
|
} |
|
_rep->_type = CIMTYPE_OBJECT; |
|
_rep->_isNull = false; |
|
} |
|
|
void CIMValue::set(const Array<Boolean>& x) | void CIMValue::set(const Array<Boolean>& x) |
{ | { |
clear(); | clear(); |
|
|
_rep->_isNull = false; | _rep->_isNull = false; |
} | } |
| |
|
void CIMValue::set(const Array<CIMObject>& x) |
|
{ |
|
clear(); |
|
_rep->_u._objectArray = new Array<CIMObject>(x); |
|
_rep->_type = CIMTYPE_OBJECT; |
|
_rep->_isArray = true; |
|
_rep->_isNull = false; |
|
} |
|
|
void CIMValue::get(Boolean& x) const | void CIMValue::get(Boolean& x) const |
{ | { |
if (_rep->_type != CIMTYPE_BOOLEAN || _rep->_isArray) | if (_rep->_type != CIMTYPE_BOOLEAN || _rep->_isArray) |
|
|
x = *_rep->_u._referenceValue; | x = *_rep->_u._referenceValue; |
} | } |
| |
|
void CIMValue::get(CIMObject& x) const |
|
{ |
|
if (_rep->_type != CIMTYPE_OBJECT || _rep->_isArray) |
|
throw TypeMismatchException(); |
|
|
|
if (!_rep->_isNull) |
|
x = *_rep->_u._objectValue; |
|
} |
|
|
void CIMValue::get(Array<Boolean>& x) const | void CIMValue::get(Array<Boolean>& x) const |
{ | { |
if (_rep->_type != CIMTYPE_BOOLEAN || !_rep->_isArray) | if (_rep->_type != CIMTYPE_BOOLEAN || !_rep->_isArray) |
|
|
x = *_rep->_u._referenceArray; | x = *_rep->_u._referenceArray; |
} | } |
| |
|
void CIMValue::get(Array<CIMObject>& x) const |
|
{ |
|
if (_rep->_type != CIMTYPE_OBJECT || !_rep->_isArray) |
|
throw TypeMismatchException(); |
|
|
|
if (!_rep->_isNull) |
|
x = *_rep->_u._objectArray; |
|
} |
|
|
Boolean CIMValue::equal(const CIMValue& x) const | Boolean CIMValue::equal(const CIMValue& x) const |
{ | { |
if (!typeCompatible(x)) | if (!typeCompatible(x)) |
|
|
return (*_rep->_u._referenceArray) == | return (*_rep->_u._referenceArray) == |
(*x._rep->_u._referenceArray); | (*x._rep->_u._referenceArray); |
| |
|
case CIMTYPE_OBJECT: |
|
return (*_rep->_u._objectArray) == |
|
(*x._rep->_u._objectArray); |
|
|
default: | default: |
PEGASUS_ASSERT(false); | PEGASUS_ASSERT(false); |
} | } |
|
|
return *_rep->_u._referenceValue == | return *_rep->_u._referenceValue == |
*x._rep->_u._referenceValue; | *x._rep->_u._referenceValue; |
| |
|
case CIMTYPE_OBJECT: |
|
return (*_rep->_u._objectValue).identical((*x._rep->_u._objectValue)); |
|
|
default: | default: |
PEGASUS_ASSERT(false); | PEGASUS_ASSERT(false); |
} | } |
|
|
_rep->_u._referenceArray->size()); | _rep->_u._referenceArray->size()); |
break; | break; |
| |
|
case CIMTYPE_OBJECT: |
|
_toString(out, _rep->_u._objectArray->getData(), |
|
_rep->_u._objectArray->size()); |
|
break; |
|
|
default: | default: |
PEGASUS_ASSERT(false); | PEGASUS_ASSERT(false); |
} | } |
|
|
_toString(out, *_rep->_u._referenceValue); | _toString(out, *_rep->_u._referenceValue); |
break; | break; |
| |
|
case CIMTYPE_OBJECT: |
|
_toString(out, *_rep->_u._objectValue); |
|
break; |
|
|
default: | default: |
PEGASUS_ASSERT(false); | PEGASUS_ASSERT(false); |
} | } |