GME  13
OCLObject.cpp
Go to the documentation of this file.
00001 //###############################################################################################################################################
00002 //
00003 //      Object Constraint Language Generic Manager
00004 //      OCLObject.cpp
00005 //
00006 //###############################################################################################################################################
00007 #include "Solve4786.h"
00008 #include "OCLObject.h"
00009 
00010 #define UNDEFINED_TYPENAME ""
00011 
00012 namespace OclMeta
00013 {
00014         typedef OclCommon::RCSmart<OclImplementation::Object> RCObject;
00015 
00016 //##############################################################################################################################################
00017 //
00018 //      C L A S S : OclMetat::Object <<< # OclCommon::RCSmart< OclImplementation::Object >
00019 //
00020 //##############################################################################################################################################
00021 
00022         const Object Object::UNDEFINED = Object();
00023 
00024         Object::Object()
00025                 : RCObject(), m_strStaticTypeName( UNDEFINED_TYPENAME )
00026         {
00027         }
00028 
00029         Object::Object( OclImplementation::Object* pImplementation )
00030                 : RCObject( pImplementation ), m_strStaticTypeName( pImplementation->GetTypeName() )
00031         {
00032         }
00033 
00034         Object::Object( const Object& object )
00035                 : RCObject( object ), m_strStaticTypeName( object.m_strStaticTypeName )
00036         {
00037         }
00038 
00039         Object& Object::operator=( const Object& object )
00040         {
00041                 if ( this != &object ) {
00042                         m_strStaticTypeName = object.m_strStaticTypeName;
00043                 }
00044                 RCObject::operator=( object );
00045                 return *this;
00046         }
00047 
00048         bool Object::Equals( const Object& object ) const
00049         {
00050                 if ( IsUndefined() )
00051                         if ( object.IsUndefined() )
00052                                 return true;
00053                         else
00054                                 return false;
00055                 else
00056                         if ( object.IsUndefined() )
00057                                 return false;
00058                         else
00059                                 return Ptr()->Equals( *object.Ptr() );
00060         }
00061 
00062         bool Object::operator==( const Object& object ) const
00063         {
00064                 return Equals( object );
00065         }
00066 
00067         bool Object::operator!=( const Object& object ) const
00068         {
00069                 return ! Equals( object );
00070         }
00071 
00072         std::string Object::GetTypeName() const
00073         {
00074                 return ( IsUndefined() ) ? UNDEFINED_TYPENAME : Ptr()->GetTypeName();
00075         }
00076 
00077         std::string Object::GetStaticTypeName() const
00078         {
00079                 return m_strStaticTypeName;
00080         }
00081 
00082         void Object::SetStaticTypeName( const std::string& strStaticTypeName )
00083         {
00084                 m_strStaticTypeName = strStaticTypeName;
00085         }
00086 
00087         bool Object::IsCompound() const
00088         {
00089                 if ( IsUndefined() )
00090                         return false;
00091                 return Ptr()->IsCompound();
00092         }
00093 
00094         bool Object::IsComparable() const
00095         {
00096                 if ( IsUndefined() )
00097                         return false;
00098                 return Ptr()->IsComparable();
00099         }
00100 
00101         bool Object::IsUndefined() const
00102         {
00103                 return IsNull() || Ptr()->IsUndefined();
00104         }
00105 
00106         OclImplementation::Object* Object::GetImplementation() const
00107         {
00108                 return ( IsUndefined() ) ? NULL : Ptr();
00109         }
00110 
00111         Object Object::Clone() const
00112         {
00113                 return ( IsUndefined() ) ? UNDEFINED : Object( Ptr()->Clone() );
00114         }
00115 
00116         std::string Object::Print() const
00117         {
00118                 return ( IsUndefined() ) ? "undefined" : Ptr()->Print();
00119         }
00120 
00121         IUnknown* Object::GetObject() const
00122         {
00123                 return ( IsUndefined() ) ? NULL : Ptr()->GetObject();
00124         }
00125 
00126 }; // namespace OclMeta
00127