xsi_value.h
Go to the documentation of this file.
00001 //*****************************************************************************
00011 //*****************************************************************************
00012 
00013 #if (_MSC_VER > 1000) || defined(SGI_COMPILER)
00014 #pragma once
00015 #endif
00016 
00017 #ifndef __XSIVALUE_H__
00018 #define __XSIVALUE_H__
00019 
00020 #include "sicppsdk.h"
00021 #include "xsi_ref.h"
00022 
00023 namespace XSI {
00024 
00025 class CLongArray;
00026 class CFloatArray;
00027 class CValueArray;
00028 
00029 namespace MATH {
00030     class CVector3;
00031     class CVector2f;
00032     class CVector3f;
00033     class CVector4f;
00034     class CQuaternionf;
00035     class CRotationf;
00036     class CMatrix3f;
00037     class CMatrix4f;
00038     class CColor4f;
00039     class CShape;
00040 };
00041 
00042 //*****************************************************************************
00157 //*****************************************************************************
00158 
00159 class SICPPSDKDECL CValue
00160 {
00161 public:
00162     typedef void* siPtrType;
00163 
00164     struct Blob
00165     {
00166         ULONG m_nSize;
00167         unsigned char* m_pBlobData;
00168     };
00169     typedef Blob siBlobType;
00170 
00172     enum DataType
00173     {
00174         siEmpty = 0,    
00175         siInt2 = 2,     
00176         siInt4 = 3,     
00177         siInt8 = 10,    
00178         siFloat = 4,    
00179         siDouble = 5,   
00180         siString = 8,   
00181         siIDispatch = 9, 
00186         siBool = 11,    
00187         siIUnknown = 13, 
00190         siInt1 = 16,    
00191         siUInt1 = 17,   
00192         siUInt2 = 18,   
00193         siUInt4 = 19,   
00194         siUInt8 = 20,   
00195         siWStr  = 31,   
00197         siRef = 666,    
00198         siArray,        
00199         siPtr,          
00200         siRefArray,     
00201         siVector3,      
00202         siLongArray,    
00203         siFloatArray,   
00204         siVector2f=800, 
00205         siVector3f,     
00206         siVector4f,     
00207         siQuaternionf,  
00208         siRotationf,    
00209         siMatrix3f,     
00210         siMatrix4f,     
00211         siColor4f,      
00212         siShape,        
00213         siBlob          
00214     };
00215 
00243     union ValueField
00244     {
00245         short               sval;       
00246         LONG                lval;       
00247         float               fval;       
00248         double              dval;       
00249         bool                bval;       
00250         wchar_t*            pwval;      
00251         siPtrType           pval;       
00252         signed char         cval;       
00253         unsigned char       ucval;      
00254         CValueArray*        paval;      
00255         CLongArray*         plaval;     
00256         CFloatArray*        pfaval;     
00257         unsigned short      usval;      
00258         ULONG               ulval;      
00259         MATH::CVector2f*    pv2f;       
00260         MATH::CVector3f*    pv3f;       
00261         MATH::CVector4f*    pv4f;       
00262         MATH::CQuaternionf* pqf;        
00263         MATH::CRotationf*   prf;        
00264         MATH::CMatrix3f*    pm3f;       
00265         MATH::CMatrix4f*    pm4f;       
00266         MATH::CColor4f*     pc4f;       
00267         MATH::CShape*       pshp;       
00268         LLONG               llval;      
00269         ULLONG              ullval;     
00270         siBlobType*         pblobval;   
00271     }m_u;
00272     DataType m_t;
00273 
00275     CValue();
00276 
00278     virtual ~CValue();
00279 
00283     CValue(const CValue& valSrc);
00284 
00288     CValue(short valSrc);
00289 
00293     CValue(unsigned short valSrc);
00294 
00298     CValue(LONG valSrc);
00299 
00300 #if !defined(linux) || !defined(__x86_64)
00301 
00304     CValue(int valSrc);
00305 #endif
00306 
00310     CValue(ULONG valSrc);
00311 
00316     CValue(LLONG valSrc);
00317 
00322     CValue(ULLONG valSrc);
00323 
00327     CValue(float valSrc);
00328 
00332     CValue(double valSrc);
00333 
00337     CValue(bool valSrc);
00338 
00342     CValue(const CString& valSrc);
00343 
00347     CValue(const CRef& valSrc);
00348 
00353     CValue(const CRefArray& valSrc);
00354 
00358     CValue(unsigned char valSrc);
00359 
00363     CValue(signed char valSrc);
00364 
00368     CValue(const CValueArray& valSrc);
00369 
00374     CValue(const CLongArray& valSrc);
00375 
00380     CValue(const CFloatArray& valSrc);
00381 
00386     CValue(const MATH::CVector3& valSrc);
00387 
00392     CValue(const MATH::CVector2f& valSrc);
00393 
00398     CValue(const MATH::CVector3f& valSrc);
00399 
00404     CValue(const MATH::CVector4f& val);
00405 
00410     CValue(const MATH::CQuaternionf& val);
00411 
00416     CValue(const MATH::CRotationf& val);
00417 
00422     CValue(const MATH::CMatrix3f& val);
00423 
00428     CValue(const MATH::CMatrix4f& val);
00429 
00434     CValue(const MATH::CColor4f& val);
00435 
00440     CValue(const MATH::CShape& val);
00441 
00445     CValue(siPtrType valSrc);
00446 
00450     CValue(const siBlobType& valSrc);
00451 
00455     CValue(const wchar_t* valSrc);
00456 
00460     CValue(const char* valSrc);
00461 
00465     CValue& operator=(const CValue& valSrc);
00466 
00470     CValue& operator=(short valSrc);
00471 
00475     CValue& operator=(unsigned short valSrc);
00476 
00480     CValue& operator=(LONG valSrc);
00481 
00482 #if !defined(linux) || !defined(__x86_64)
00483 
00486     CValue& operator=(int valSrc);
00487 #endif
00488 
00492     CValue& operator=(ULONG valSrc);
00493 
00498     CValue& operator=(LLONG valSrc);
00499 
00504     CValue& operator=(ULLONG valSrc);
00505 
00509     CValue& operator=(float valSrc);
00510 
00514     CValue& operator=(double valSrc);
00515 
00519     CValue& operator=(bool valSrc);
00520 
00524     CValue& operator=(const CString& valSrc);
00525 
00529     CValue& operator=(const wchar_t * valSrc );
00530 
00534     CValue& operator=(const char* valSrc );
00535 
00539     CValue& operator=(const CRef& valSrc);
00540 
00545     CValue& operator=(const CRefArray& valSrc);
00546 
00551     CValue& operator=(const MATH::CVector3& valSrc);
00552 
00557     CValue& operator=(const MATH::CVector2f& valSrc);
00558 
00563     CValue& operator=(const MATH::CVector3f& valSrc);
00564 
00569     CValue& operator=(const MATH::CVector4f& valSrc);
00570 
00575     CValue& operator=(const MATH::CMatrix3f& valSrc);
00576 
00581     CValue& operator=(const MATH::CMatrix4f& valSrc);
00582 
00587     CValue& operator=(const MATH::CRotationf& valSrc);
00588 
00593     CValue& operator=(const MATH::CQuaternionf& valSrc);
00594 
00599     CValue& operator=(const MATH::CColor4f& valSrc);
00600 
00605     CValue& operator=(const MATH::CShape& valSrc);
00606 
00610     CValue& operator=(unsigned char valSrc);
00611 
00615     CValue& operator=(signed char valSrc);
00616 
00620     CValue& operator=(const CValueArray& valSrc);
00621 
00625     CValue& operator=(const CLongArray& valSrc);
00626 
00630     CValue& operator=(const CFloatArray& valSrc);
00631 
00635     CValue& operator=(siPtrType valSrc);
00636 
00640     CValue& operator=(const siBlobType& valSrc );
00641 
00643     operator short () const;
00645     operator unsigned short () const;
00647     operator LONG () const;
00648 
00649 #if !defined(linux) || !defined(__x86_64)
00650 
00653     operator int () const;
00654 #endif
00655 
00659     operator ULONG () const;
00660 
00664     operator LLONG () const;
00665 
00669     operator ULLONG () const;
00670 
00672     operator float () const;
00674     operator double () const;
00676     operator bool () const;
00678     operator CString () const;
00680     operator CRef () const;
00685     operator CRefArray () const;
00687     operator unsigned char () const;
00689     operator signed char () const;
00691     operator CValueArray& () const;
00692 
00696     operator CLongArray& () const;
00697 
00701     operator CFloatArray& () const;
00702 
00706     operator MATH::CVector3 () const;
00707 
00711     operator MATH::CVector2f() const;
00712 
00716     operator MATH::CVector3f() const;
00717 
00721     operator MATH::CVector4f() const;
00722 
00726     operator MATH::CMatrix3f() const;
00727 
00731     operator MATH::CMatrix4f() const;
00732 
00736     operator MATH::CRotationf() const;
00737 
00741     operator MATH::CQuaternionf() const;
00742 
00746     operator MATH::CColor4f() const;
00747 
00751     operator MATH::CShape() const;
00752 
00776     operator siPtrType () const;
00777 
00781     operator siBlobType&() const;
00782 
00786     bool operator==(const CValue& valSrc) const;
00787 
00789     inline bool operator== (short) const;
00791     inline bool operator== (unsigned short) const;
00793     inline bool operator== (LONG) const;
00794 #if !defined(linux) || !defined(__x86_64)
00795 
00796     inline bool operator== (int) const;
00797 #endif
00798 
00799     inline bool operator== (ULONG) const;
00800 
00804     inline bool operator== (LLONG) const;
00805 
00809     inline bool operator== (ULLONG) const;
00810 
00812     inline bool operator== (float) const;
00814     inline bool operator== (double) const;
00816     inline bool operator== (bool) const;
00818     inline bool operator== (const CString&) const;
00820     inline bool operator== (const wchar_t*) const;
00822     inline bool operator== (const char*) const;
00824     inline bool operator== (const CRef&) const;
00828     inline bool operator== (const CRefArray&) const;
00830     inline bool operator== (unsigned char) const;
00832     inline bool operator== (signed char) const;
00834     bool operator== (const CValueArray&) const;
00835 
00839     bool operator== (const CLongArray&) const;
00840 
00844     bool operator== (const CFloatArray&) const;
00845 
00847     inline bool operator== (const siPtrType) const;
00848 
00850     inline bool operator == (const siBlobType&) const;
00851 
00855     inline bool operator== (const MATH::CVector3&) const;
00856 
00860     inline bool operator== (const MATH::CVector2f&) const;
00861 
00865     inline bool operator== (const MATH::CVector3f&) const;
00866 
00870     inline bool operator== (const MATH::CVector4f&) const;
00871 
00875     inline bool operator== (const MATH::CMatrix3f&) const;
00876 
00880     inline bool operator== (const MATH::CMatrix4f&) const;
00881 
00885     inline bool operator== (const MATH::CRotationf&) const;
00886 
00890     inline bool operator== (const MATH::CQuaternionf&) const;
00891 
00895     inline bool operator== (const MATH::CColor4f&) const;
00896 
00900     inline bool operator== (const MATH::CShape&) const;
00901 
00905     bool operator!=(const CValue& valSrc) const;
00906 
00924     bool operator > (const CValue& val ) const;
00925 
00943     bool operator < (const CValue& val ) const;
00944 
00949     bool operator >= (const CValue& val ) const;
00950 
00955     bool operator <= (const CValue& val ) const;
00956 
00957     // low-level operations
00958 
01002     void ChangeType( CValue::DataType in_type, const CValue* in_pSrc = NULL );
01003 
01005     void Clear();
01006 
01011     void Attach( CValue& in_valSrc);
01012 
01017     CValue Detach();
01018 
01022     CString GetAsText() const;
01023 
01027     inline bool IsEmpty() const;
01028 };
01029 
01030 inline bool CValue::operator== (short val) const
01031 {
01032     return *this == CValue(val);
01033 }
01034 
01035 inline bool CValue::operator== (unsigned short val) const
01036 {
01037     return *this == CValue(val);
01038 }
01039 
01040 inline bool CValue::operator== (LONG val) const
01041 {
01042     return *this == CValue(val);
01043 }
01044 
01045 #if !defined(linux) || !defined(__x86_64)
01046 inline bool CValue::operator== (int val) const
01047 {
01048     return *this == CValue(val);
01049 }
01050 #endif
01051 
01052 inline bool CValue::operator== (ULONG val) const
01053 {
01054     return *this == CValue(val);
01055 }
01056 
01057 inline bool CValue::operator== (LLONG val) const
01058 {
01059     return *this == CValue(val);
01060 }
01061 
01062 inline bool CValue::operator== (ULLONG val) const
01063 {
01064     return *this == CValue(val);
01065 }
01066 
01067 inline bool CValue::operator== (float val) const
01068 {
01069     return *this == CValue(val);
01070 }
01071 
01072 inline bool CValue::operator== (double val) const
01073 {
01074     return *this == CValue(val);
01075 }
01076 
01077 inline bool CValue::operator== (bool val) const
01078 {
01079     return *this == CValue(val);
01080 }
01081 
01082 inline bool CValue::operator== (const CString& val) const
01083 {
01084     return *this == CValue(val);
01085 }
01086 
01087 inline bool CValue::operator== (const wchar_t* val) const
01088 {
01089     return *this == CValue(val);
01090 }
01091 
01092 inline bool CValue::operator== (const char* val) const
01093 {
01094     return *this == CValue(val);
01095 }
01096 
01097 inline bool CValue::operator== (const CRef& val) const
01098 {
01099     return *this == CValue(val);
01100 }
01101 
01102 inline bool CValue::operator== (const CRefArray& val) const
01103 {
01104     return *this == CValue(val);
01105 }
01106 
01107 inline bool CValue::operator== (unsigned char val) const
01108 {
01109     return *this == CValue(val);
01110 }
01111 
01112 inline bool CValue::operator== (signed char val) const
01113 {
01114     return *this == CValue(val);
01115 }
01116 
01117 inline bool CValue::operator== (const siPtrType val) const
01118 {
01119     return *this == CValue(val);
01120 }
01121 
01122 inline bool CValue::operator== (const siBlobType& val) const
01123 {
01124     return *this == CValue(val);
01125 }
01126 
01127 inline bool CValue::operator== (const MATH::CVector3& val) const
01128 {
01129     return *this == CValue(val);
01130 }
01131 
01132 inline bool CValue::operator== (const MATH::CVector2f& val) const
01133 {
01134     return *this == CValue(val);
01135 }
01136 inline bool CValue::operator== (const MATH::CVector3f& val) const
01137 {
01138     return *this == CValue(val);
01139 }
01140 inline bool CValue::operator== (const MATH::CVector4f& val) const
01141 {
01142     return *this == CValue(val);
01143 }
01144 inline bool CValue::operator== (const MATH::CQuaternionf& val) const
01145 {
01146     return *this == CValue(val);
01147 }
01148 inline bool CValue::operator== (const MATH::CRotationf& val) const
01149 {
01150     return *this == CValue(val);
01151 }
01152 inline bool CValue::operator== (const MATH::CMatrix3f& val) const
01153 {
01154     return *this == CValue(val);
01155 }
01156 inline bool CValue::operator== (const MATH::CMatrix4f& val) const
01157 {
01158     return *this == CValue(val);
01159 }
01160 inline bool CValue::operator== (const MATH::CColor4f& val) const
01161 {
01162     return *this == CValue(val);
01163 }
01164 
01165 inline bool CValue::operator== (const MATH::CShape& val) const
01166 {
01167     return *this == CValue(val);
01168 }
01169 
01170 inline bool CValue::IsEmpty() const
01171 {
01172     return m_t == siEmpty;
01173 }
01174 
01175 //*************************************************************************
01184 //*************************************************************************
01185 class SICPPSDKDECL CValueArray
01186 {
01187 public:
01191     CValueArray(LONG in_size=0);
01192 
01196     CValueArray(const CValueArray& in_array);
01197 
01199     ~CValueArray();
01200 
01205     CValueArray& operator=( const CValueArray& in_array );
01206 
01210     LONG GetCount() const;
01211 
01216     CStatus Add( const CValue& in_item );
01217 
01221     CStatus Clear();
01222 
01229     CStatus Resize( LONG in_size);
01230 
01237     const CValue& operator[]( LONG in_index ) const;
01238 
01244     CValue& operator[]( LONG in_index );
01245 
01251     bool operator==(const CValueArray& in_array) const;
01252 
01258     bool operator!=(const CValueArray& in_array) const;
01259 
01260 
01261 private:
01262 
01263     void* m_ptr;
01264 };
01265 
01266 
01267 };
01268 
01269 #endif // __XSIVALUE_H__