[omniORB] Help: How to check that _var
(_CORBA_ConstrType_Variable_Var) contains null (nil) object
Tomasz Bech
tbech at polbox.com
Fri Jul 18 14:33:49 BST 2003
The type _CORBA_ConstrType_Variable_Var has no T* operator and no is_nil
so there is not possible to write:
if ( MyVar==0)
or if (MyVar.is_nil())
The extremely ugly way is :
if (MyVar.operator->()==0)
1. Did I miss something?
2. Why there is no operator T* or funciton is_nil on var?
3. Is this ugly way the only one?
Thanks,
Tom
_CORBA_ConstrType_Variable_Var is declared as follows:
template <class T>
class _CORBA_ConstrType_Variable_Var {
public:
typedef _CORBA_ConstrType_Variable_Var<T> T_var;
inline _CORBA_ConstrType_Variable_Var() { pd_data = 0; }
inline _CORBA_ConstrType_Variable_Var(T* p) { pd_data = p; }
inline _CORBA_ConstrType_Variable_Var(const T_var& p) {
if( !p.pd_data ) pd_data = 0;
else {
pd_data = new T;
if( !pd_data ) _CORBA_new_operator_return_null();
*pd_data = *p.pd_data;
}
}
inline ~_CORBA_ConstrType_Variable_Var() { if( pd_data ) delete
pd_data; }
inline T_var& operator= (T* p) {
if( pd_data ) delete pd_data;
pd_data = p;
return *this;
}
inline T_var& operator= (const T_var& p) {
if( &p == this ) return *this;
if( p.pd_data ) {
if( !pd_data ) {
pd_data = new T;
if( !pd_data ) _CORBA_new_operator_return_null();
}
*pd_data = *p.pd_data;
}
else {
if( pd_data ) delete pd_data;
pd_data = 0;
}
return *this;
}
inline T* operator->() const { return (T*)pd_data; }
//#if defined(__GNUG__) && __GNUG__ == 2 && __GNUC_MINOR__ == 7
#if defined(__GNUG__)
inline operator T& () const { return (T&) *pd_data; }
#else
inline operator const T& () const { return *pd_data; }
inline operator T& () { return *pd_data; }
#endif
// This conversion operator is necessary to support the implicit
conversion
// when this var type is used as the IN or INOUT argument of an operation.
// The following coversion operators are needed to support the casting
// of this var type to a const T* or a T*. The CORBA spec. doesn't say
// these castings must be supported so they are deliberately left out.
// In fact, the operator->() can always be used to get to the T*.
//
// inline operator const T* () const { return pd_data; }
// inline operator T* () { return pd_data; }
const T& in() const { return *pd_data; }
T& inout() { return *pd_data; }
T*& out() { if (pd_data) { delete pd_data; pd_data = 0; } return
pd_data; }
T* _retn() { T* tmp = pd_data; pd_data = 0; return tmp; }
friend class _CORBA_ConstrType_Variable_OUT_arg<T, T_var>;
protected:
T* pd_data;
};
More information about the omniORB-list
mailing list