version 1.65.2.2, 2006/02/10 16:09:35
|
version 1.66, 2006/01/30 16:16:47
|
|
|
#include <cstdio> | #include <cstdio> |
#include <cctype> | #include <cctype> |
#include "CIMValue.h" | #include "CIMValue.h" |
#ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
#include "CIMInstance.h" |
|
#endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
#include "Union.h" | #include "Union.h" |
#include "Indentor.h" | #include "Indentor.h" |
#include "XmlWriter.h" | #include "XmlWriter.h" |
|
|
{ | { |
out << x.toString(); | out << x.toString(); |
} | } |
#ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
inline void _toString(Buffer& out, const CIMInstance& x) |
|
{ |
|
out << CIMObject(x).toString(); |
|
} |
|
#endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
| |
template<class T> | template<class T> |
void _toString(Buffer& out, const T* p, Uint32 size) | void _toString(Buffer& out, const T* p, Uint32 size) |
|
|
case CIMTYPE_OBJECT: | case CIMTYPE_OBJECT: |
CIMValueType<CIMObject>::destructArray(this); | CIMValueType<CIMObject>::destructArray(this); |
break; | break; |
#ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
case CIMTYPE_INSTANCE: |
|
CIMValueType<CIMInstance>::destructArray(this); |
|
break; |
|
#endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
} | } |
} | } |
else | else |
|
|
case CIMTYPE_OBJECT: | case CIMTYPE_OBJECT: |
CIMValueType<CIMObject>::destruct(this); | CIMValueType<CIMObject>::destruct(this); |
break; | break; |
#ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
case CIMTYPE_INSTANCE: |
|
CIMValueType<CIMInstance>::destruct(this); |
|
break; |
|
#endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
} | } |
} | } |
} | } |
|
|
case CIMTYPE_OBJECT: | case CIMTYPE_OBJECT: |
CIMValueType<CIMObject>::setNull(_rep, type, isArray, arraySize); | CIMValueType<CIMObject>::setNull(_rep, type, isArray, arraySize); |
break; | break; |
#ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
case CIMTYPE_INSTANCE: |
|
CIMValueType<CIMInstance>::setNull(_rep, type, isArray, arraySize); |
|
break; |
|
#endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
| |
default: | default: |
PEGASUS_ASSERT(0); | PEGASUS_ASSERT(0); |
|
|
_rep = new CIMValueRep; | _rep = new CIMValueRep; |
CIMValueType<CIMObject>::set(_rep, x.clone()); | CIMValueType<CIMObject>::set(_rep, x.clone()); |
} | } |
#ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
CIMValue::CIMValue(const CIMInstance& x) |
|
{ |
|
if (x.isUninitialized()) |
|
{ |
|
// Bug 3373, throw exception if uninitialized object is passed to set(). |
|
throw UninitializedObjectException(); |
|
} |
|
| |
_rep = new CIMValueRep; |
|
CIMValueType<CIMInstance>::set(_rep, x.clone()); |
|
} |
|
#endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
CIMValue::CIMValue(const Array<Boolean>& x) | CIMValue::CIMValue(const Array<Boolean>& x) |
{ | { |
_rep = new CIMValueRep; | _rep = new CIMValueRep; |
|
|
CIMValueType<CIMObject>::setArray(_rep, tmp); | CIMValueType<CIMObject>::setArray(_rep, tmp); |
} | } |
| |
#ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
CIMValue::CIMValue(const Array<CIMInstance>& x) |
|
{ |
|
Array<CIMInstance> tmp; |
|
|
|
for (Uint32 i = 0, n = x.size(); i < n; i++) |
|
{ |
|
if (x[i].isUninitialized()) |
|
{ |
|
// Bug 3373, throw exception on uninitialized object. |
|
_rep = &CIMValueRep::_emptyRep; |
|
throw UninitializedObjectException(); |
|
} |
|
|
|
tmp.append(x[i].clone()); |
|
} |
|
_rep = new CIMValueRep; |
|
CIMValueType<CIMInstance>::setArray(_rep, tmp); |
|
} |
|
#endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
|
|
void CIMValue::clear() | void CIMValue::clear() |
{ | { |
CIMValueRep::unref(_rep); | CIMValueRep::unref(_rep); |
|
|
| |
case CIMTYPE_OBJECT: | case CIMTYPE_OBJECT: |
return CIMValueType<CIMObject>::arraySize(_rep); | return CIMValueType<CIMObject>::arraySize(_rep); |
#ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
case CIMTYPE_INSTANCE: |
|
return CIMValueType<CIMInstance>::arraySize(_rep); |
|
#endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
default: | default: |
PEGASUS_ASSERT(0); | PEGASUS_ASSERT(0); |
} | } |
|
|
case CIMTYPE_OBJECT: | case CIMTYPE_OBJECT: |
CIMValueType<CIMObject>::setNull(_rep, type, isArray, arraySize); | CIMValueType<CIMObject>::setNull(_rep, type, isArray, arraySize); |
break; | break; |
#ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
case CIMTYPE_INSTANCE: |
|
CIMValueType<CIMInstance>::setNull(_rep, type, isArray, arraySize); |
|
break; |
|
#endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
default: | default: |
PEGASUS_ASSERT(0); | PEGASUS_ASSERT(0); |
} | } |
|
|
_release(_rep); | _release(_rep); |
CIMValueType<CIMObject>::set(_rep, x.clone()); | CIMValueType<CIMObject>::set(_rep, x.clone()); |
} | } |
#ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
void CIMValue::set(const CIMInstance& x) |
|
{ |
|
if (x.isUninitialized()) |
|
{ |
|
// Bug 3373, throw exception on uninitialized object. |
|
throw UninitializedObjectException(); |
|
} |
|
| |
_release(_rep); |
|
CIMValueType<CIMInstance>::set(_rep, x.clone()); |
|
} |
|
#endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
void CIMValue::set(const Array<Boolean>& x) | void CIMValue::set(const Array<Boolean>& x) |
{ | { |
_release(_rep); | _release(_rep); |
|
|
_release(_rep); | _release(_rep); |
CIMValueType<CIMObject>::setArray(_rep, tmp); | CIMValueType<CIMObject>::setArray(_rep, tmp); |
} | } |
#ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
void CIMValue::set(const Array<CIMInstance>& a) |
|
{ |
|
Array<CIMInstance> tmp; |
|
|
|
for (Uint32 i = 0, n = a.size(); i < n; i++) |
|
{ |
|
if (a[i].isUninitialized()) |
|
{ |
|
// Bug 3373, throw exception on uninitialized object. |
|
throw UninitializedObjectException(); |
|
} |
|
| |
tmp.append(a[i].clone()); |
|
} |
|
|
|
_release(_rep); |
|
CIMValueType<CIMInstance>::setArray(_rep, tmp); |
|
} |
|
#endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
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) |
|
|
// changing the one we refer to as well. | // changing the one we refer to as well. |
x = CIMValueType<CIMObject>::ref(_rep).clone(); | x = CIMValueType<CIMObject>::ref(_rep).clone(); |
} | } |
#ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
void CIMValue::get(CIMInstance& x) const |
|
{ |
|
if (_rep->type != CIMTYPE_INSTANCE || _rep->isArray) |
|
throw TypeMismatchException(); |
|
| |
if (!_rep->isNull) |
|
{ |
|
if (_rep->refs.get() != 1) |
|
{ |
|
// We have to make our own unique copy since we are about to |
|
// return an object to the caller that he can modify; thereby, |
|
// changing the one we refer to as well. |
|
|
|
CIMInstance tmp = CIMValueType<CIMInstance>::ref(_rep); |
|
((CIMValue*)this)->set(tmp); |
|
} |
|
|
|
x = CIMValueType<CIMInstance>::ref(_rep); |
|
} |
|
} |
|
#endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
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) |
|
|
} | } |
} | } |
} | } |
#ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
void CIMValue::get(Array<CIMInstance>& x) const |
|
{ |
|
if (_rep->type != CIMTYPE_INSTANCE || !_rep->isArray) |
|
throw TypeMismatchException(); |
|
| |
if (!_rep->isNull) |
|
{ |
|
if (_rep->refs.get() != 1) |
|
{ |
|
// We have to make our own unique copy since we are about to |
|
// return an object to the caller that he can modify; thereby, |
|
// changing the one we refer to as well. |
|
Array<CIMInstance> tmp = CIMValueType<CIMInstance>::aref(_rep); |
|
((CIMValue*)this)->set(tmp); |
|
} |
|
|
|
x = CIMValueType<CIMInstance>::aref(_rep); |
|
} |
|
} |
|
#endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
Boolean CIMValue::equal(const CIMValue& x) const | Boolean CIMValue::equal(const CIMValue& x) const |
{ | { |
if (!typeCompatible(x)) | if (!typeCompatible(x)) |
|
|
| |
case CIMTYPE_OBJECT: | case CIMTYPE_OBJECT: |
return CIMValueType<CIMObject>::equalArray(_rep, x._rep); | return CIMValueType<CIMObject>::equalArray(_rep, x._rep); |
#ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
case CIMTYPE_INSTANCE: |
|
return CIMValueType<CIMInstance>::equalArray(_rep, x._rep); |
|
#endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
default: | default: |
PEGASUS_ASSERT(0); | PEGASUS_ASSERT(0); |
} | } |
|
|
case CIMTYPE_OBJECT: | case CIMTYPE_OBJECT: |
return CIMValueType<CIMObject>::ref(_rep).identical( | return CIMValueType<CIMObject>::ref(_rep).identical( |
CIMValueType<CIMObject>::ref(x._rep)); | CIMValueType<CIMObject>::ref(x._rep)); |
#ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
case CIMTYPE_INSTANCE: |
|
return CIMValueType<CIMInstance>::ref(_rep).identical( |
|
CIMValueType<CIMInstance>::ref(x._rep)); |
|
#endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
default: | default: |
PEGASUS_ASSERT(0); | PEGASUS_ASSERT(0); |
} | } |
|
|
_toString(out, a.getData(), a.size()); | _toString(out, a.getData(), a.size()); |
break; | break; |
} | } |
#ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
case CIMTYPE_INSTANCE: |
|
{ |
|
const Array<CIMInstance>& a = |
|
CIMValueType<CIMInstance>::aref(_rep); |
|
_toString(out, a.getData(), a.size()); |
|
break; |
|
} |
|
#endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
default: | default: |
PEGASUS_ASSERT(0); | PEGASUS_ASSERT(0); |
} | } |
|
|
case CIMTYPE_OBJECT: | case CIMTYPE_OBJECT: |
_toString(out, CIMValueType<CIMObject>::ref(_rep)); | _toString(out, CIMValueType<CIMObject>::ref(_rep)); |
break; | break; |
#ifdef PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
case CIMTYPE_INSTANCE: |
|
_toString(out, CIMValueType<CIMInstance>::ref(_rep)); |
|
break; |
|
#endif // PEGASUS_EMBEDDED_INSTANCE_SUPPORT |
|
default: | default: |
PEGASUS_ASSERT(0); | PEGASUS_ASSERT(0); |
} | } |