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         siStringArray
    00215     };
    00216
    00244     union ValueField
    00245     {
    00246         short               sval;
    00247         LONG                lval;
    00248         float               fval;
    00249         double              dval;
    00250         bool                bval;
    00251         wchar_t*            pwval;
    00252         siPtrType           pval;
    00253         signed char         cval;
    00254         unsigned char       ucval;
    00255         CValueArray*        paval;
    00256         CLongArray*         plaval;
    00257         CFloatArray*        pfaval;
    00258         unsigned short      usval;
    00259         ULONG               ulval;
    00260         MATH::CVector2f*    pv2f;
    00261         MATH::CVector3f*    pv3f;
    00262         MATH::CVector4f*    pv4f;
    00263         MATH::CQuaternionf* pqf;
    00264         MATH::CRotationf*   prf;
    00265         MATH::CMatrix3f*    pm3f;
    00266         MATH::CMatrix4f*    pm4f;
    00267         MATH::CColor4f*     pc4f;
    00268         MATH::CShape*       pshp;
    00269         LLONG               llval;
    00270         ULLONG              ullval;
    00271         siBlobType*         pblobval;
    00272         CStringArray*       pstrarrayval;
    00273     }m_u;
    00274     DataType m_t;
    00275
    00277     CValue();
    00278
    00280     virtual ~CValue();
    00281
    00285     CValue(const CValue& valSrc);
    00286
    00290     CValue(short valSrc);
    00291
    00295     CValue(unsigned short valSrc);
    00296
    00300     CValue(LONG valSrc);
    00301
    00302 #if !defined(linux) || !defined(__x86_64)
    00303
    00306     CValue(int valSrc);
    00307 #endif
    00308
    00312     CValue(ULONG valSrc);
    00313
    00318     CValue(LLONG valSrc);
    00319
    00324     CValue(ULLONG valSrc);
    00325
    00329     CValue(float valSrc);
    00330
    00334     CValue(double valSrc);
    00335
    00339     CValue(bool valSrc);
    00340
    00344     CValue(const CString& valSrc);
    00345
    00349     CValue(const CRef& valSrc);
    00350
    00355     CValue(const CRefArray& valSrc);
    00356
    00360     CValue(unsigned char valSrc);
    00361
    00365     CValue(signed char valSrc);
    00366
    00370     CValue(const CValueArray& valSrc);
    00371
    00376     CValue(const CLongArray& valSrc);
    00377
    00382     CValue(const CFloatArray& valSrc);
    00383
    00388     CValue(const MATH::CVector3& valSrc);
    00389
    00394     CValue(const MATH::CVector2f& valSrc);
    00395
    00400     CValue(const MATH::CVector3f& valSrc);
    00401
    00406     CValue(const MATH::CVector4f& val);
    00407
    00412     CValue(const MATH::CQuaternionf& val);
    00413
    00418     CValue(const MATH::CRotationf& val);
    00419
    00424     CValue(const MATH::CMatrix3f& val);
    00425
    00430     CValue(const MATH::CMatrix4f& val);
    00431
    00436     CValue(const MATH::CColor4f& val);
    00437
    00442     CValue(const MATH::CShape& val);
    00443
    00447     CValue(siPtrType valSrc);
    00448
    00452     CValue(const siBlobType& valSrc);
    00453
    00457     CValue(const wchar_t* valSrc);
    00458
    00462     CValue(const char* valSrc);
    00463
    00468     CValue(const CStringArray& valSrc);
    00469
    00473     CValue& operator=(const CValue& valSrc);
    00474
    00478     CValue& operator=(short valSrc);
    00479
    00483     CValue& operator=(unsigned short valSrc);
    00484
    00488     CValue& operator=(LONG valSrc);
    00489
    00490 #if !defined(linux) || !defined(__x86_64)
    00491
    00494     CValue& operator=(int valSrc);
    00495 #endif
    00496
    00500     CValue& operator=(ULONG valSrc);
    00501
    00506     CValue& operator=(LLONG valSrc);
    00507
    00512     CValue& operator=(ULLONG valSrc);
    00513
    00517     CValue& operator=(float valSrc);
    00518
    00522     CValue& operator=(double valSrc);
    00523
    00527     CValue& operator=(bool valSrc);
    00528
    00532     CValue& operator=(const CString& valSrc);
    00533
    00537     CValue& operator=(const wchar_t * valSrc );
    00538
    00542     CValue& operator=(const char* valSrc );
    00543
    00547     CValue& operator=(const CRef& valSrc);
    00548
    00553     CValue& operator=(const CRefArray& valSrc);
    00554
    00559     CValue& operator=(const MATH::CVector3& valSrc);
    00560
    00565     CValue& operator=(const MATH::CVector2f& valSrc);
    00566
    00571     CValue& operator=(const MATH::CVector3f& valSrc);
    00572
    00577     CValue& operator=(const MATH::CVector4f& valSrc);
    00578
    00583     CValue& operator=(const MATH::CMatrix3f& valSrc);
    00584
    00589     CValue& operator=(const MATH::CMatrix4f& valSrc);
    00590
    00595     CValue& operator=(const MATH::CRotationf& valSrc);
    00596
    00601     CValue& operator=(const MATH::CQuaternionf& valSrc);
    00602
    00607     CValue& operator=(const MATH::CColor4f& valSrc);
    00608
    00613     CValue& operator=(const MATH::CShape& valSrc);
    00614
    00618     CValue& operator=(unsigned char valSrc);
    00619
    00623     CValue& operator=(signed char valSrc);
    00624
    00628     CValue& operator=(const CValueArray& valSrc);
    00629
    00633     CValue& operator=(const CLongArray& valSrc);
    00634
    00638     CValue& operator=(const CFloatArray& valSrc);
    00639
    00643     CValue& operator=(siPtrType valSrc);
    00644
    00648     CValue& operator=(const siBlobType& valSrc );
    00649
    00654     CValue& operator=(const CStringArray& valSrc );
    00655
    00657     operator short () const;
    00659     operator unsigned short () const;
    00661     operator LONG () const;
    00662
    00663 #if !defined(linux) || !defined(__x86_64)
    00664
    00667     operator int () const;
    00668 #endif
    00669
    00673     operator ULONG () const;
    00674
    00678     operator LLONG () const;
    00679
    00683     operator ULLONG () const;
    00684
    00686     operator float () const;
    00688     operator double () const;
    00690     operator bool () const;
    00692     operator CString () const;
    00694     operator CRef () const;
    00699     operator CRefArray () const;
    00701     operator unsigned char () const;
    00703     operator signed char () const;
    00705     operator CValueArray& () const;
    00706
    00710     operator CLongArray& () const;
    00711
    00715     operator CFloatArray& () const;
    00716
    00720     operator MATH::CVector3 () const;
    00721
    00725     operator MATH::CVector2f() const;
    00726
    00730     operator MATH::CVector3f() const;
    00731
    00735     operator MATH::CVector4f() const;
    00736
    00740     operator MATH::CMatrix3f() const;
    00741
    00745     operator MATH::CMatrix4f() const;
    00746
    00750     operator MATH::CRotationf() const;
    00751
    00755     operator MATH::CQuaternionf() const;
    00756
    00760     operator MATH::CColor4f() const;
    00761
    00765     operator MATH::CShape() const;
    00766
    00790     operator siPtrType () const;
    00791
    00795     operator siBlobType&() const;
    00796
    00800     operator CStringArray&() const;
    00801
    00805     bool operator==(const CValue& valSrc) const;
    00806
    00808     inline bool operator== (short) const;
    00810     inline bool operator== (unsigned short) const;
    00812     inline bool operator== (LONG) const;
    00813 #if !defined(linux) || !defined(__x86_64)
    00814
    00815     inline bool operator== (int) const;
    00816 #endif
    00817
    00818     inline bool operator== (ULONG) const;
    00819
    00823     inline bool operator== (LLONG) const;
    00824
    00828     inline bool operator== (ULLONG) const;
    00829
    00831     inline bool operator== (float) const;
    00833     inline bool operator== (double) const;
    00835     inline bool operator== (bool) const;
    00837     inline bool operator== (const CString&) const;
    00839     inline bool operator== (const wchar_t*) const;
    00841     inline bool operator== (const char*) const;
    00843     inline bool operator== (const CRef&) const;
    00847     inline bool operator== (const CRefArray&) const;
    00849     inline bool operator== (unsigned char) const;
    00851     inline bool operator== (signed char) const;
    00853     bool operator== (const CValueArray&) const;
    00854
    00858     bool operator== (const CLongArray&) const;
    00859
    00863     bool operator== (const CFloatArray&) const;
    00864
    00866     inline bool operator== (const siPtrType) const;
    00867
    00869     inline bool operator == (const siBlobType&) const;
    00870
    00874     inline bool operator== (const MATH::CVector3&) const;
    00875
    00879     inline bool operator== (const MATH::CVector2f&) const;
    00880
    00884     inline bool operator== (const MATH::CVector3f&) const;
    00885
    00889     inline bool operator== (const MATH::CVector4f&) const;
    00890
    00894     inline bool operator== (const MATH::CMatrix3f&) const;
    00895
    00899     inline bool operator== (const MATH::CMatrix4f&) const;
    00900
    00904     inline bool operator== (const MATH::CRotationf&) const;
    00905
    00909     inline bool operator== (const MATH::CQuaternionf&) const;
    00910
    00914     inline bool operator== (const MATH::CColor4f&) const;
    00915
    00919     inline bool operator== (const MATH::CShape&) const;
    00920
    00924     inline bool operator== (const CStringArray&) const;
    00925
    00929     bool operator!=(const CValue& valSrc) const;
    00930
    00948     bool operator > (const CValue& val ) const;
    00949
    00967     bool operator < (const CValue& val ) const;
    00968
    00973     bool operator >= (const CValue& val ) const;
    00974
    00979     bool operator <= (const CValue& val ) const;
    00980
    00981     // low-level operations
    00982
    01026     void ChangeType( CValue::DataType in_type, const CValue* in_pSrc = NULL );
    01027
    01029     void Clear();
    01030
    01035     void Attach( CValue& in_valSrc);
    01036
    01041     CValue Detach();
    01042
    01046     CString GetAsText() const;
    01047
    01051     inline bool IsEmpty() const;
    01052 };
    01053
    01054 inline bool CValue::operator== (short val) const
    01055 {
    01056     return *this == CValue(val);
    01057 }
    01058
    01059 inline bool CValue::operator== (unsigned short val) const
    01060 {
    01061     return *this == CValue(val);
    01062 }
    01063
    01064 inline bool CValue::operator== (LONG val) const
    01065 {
    01066     return *this == CValue(val);
    01067 }
    01068
    01069 #if !defined(linux) || !defined(__x86_64)
    01070 inline bool CValue::operator== (int val) const
    01071 {
    01072     return *this == CValue(val);
    01073 }
    01074 #endif
    01075
    01076 inline bool CValue::operator== (ULONG val) const
    01077 {
    01078     return *this == CValue(val);
    01079 }
    01080
    01081 inline bool CValue::operator== (LLONG val) const
    01082 {
    01083     return *this == CValue(val);
    01084 }
    01085
    01086 inline bool CValue::operator== (ULLONG val) const
    01087 {
    01088     return *this == CValue(val);
    01089 }
    01090
    01091 inline bool CValue::operator== (float val) const
    01092 {
    01093     return *this == CValue(val);
    01094 }
    01095
    01096 inline bool CValue::operator== (double val) const
    01097 {
    01098     return *this == CValue(val);
    01099 }
    01100
    01101 inline bool CValue::operator== (bool val) const
    01102 {
    01103     return *this == CValue(val);
    01104 }
    01105
    01106 inline bool CValue::operator== (const CString& val) const
    01107 {
    01108     return *this == CValue(val);
    01109 }
    01110
    01111 inline bool CValue::operator== (const wchar_t* val) const
    01112 {
    01113     return *this == CValue(val);
    01114 }
    01115
    01116 inline bool CValue::operator== (const char* val) const
    01117 {
    01118     return *this == CValue(val);
    01119 }
    01120
    01121 inline bool CValue::operator== (const CRef& val) const
    01122 {
    01123     return *this == CValue(val);
    01124 }
    01125
    01126 inline bool CValue::operator== (const CRefArray& val) const
    01127 {
    01128     return *this == CValue(val);
    01129 }
    01130
    01131 inline bool CValue::operator== (unsigned char val) const
    01132 {
    01133     return *this == CValue(val);
    01134 }
    01135
    01136 inline bool CValue::operator== (signed char val) const
    01137 {
    01138     return *this == CValue(val);
    01139 }
    01140
    01141 inline bool CValue::operator== (const siPtrType val) const
    01142 {
    01143     return *this == CValue(val);
    01144 }
    01145
    01146 inline bool CValue::operator== (const siBlobType& val) const
    01147 {
    01148     return *this == CValue(val);
    01149 }
    01150
    01151 inline bool CValue::operator== (const MATH::CVector3& val) const
    01152 {
    01153     return *this == CValue(val);
    01154 }
    01155
    01156 inline bool CValue::operator== (const MATH::CVector2f& val) const
    01157 {
    01158     return *this == CValue(val);
    01159 }
    01160 inline bool CValue::operator== (const MATH::CVector3f& val) const
    01161 {
    01162     return *this == CValue(val);
    01163 }
    01164 inline bool CValue::operator== (const MATH::CVector4f& val) const
    01165 {
    01166     return *this == CValue(val);
    01167 }
    01168 inline bool CValue::operator== (const MATH::CQuaternionf& val) const
    01169 {
    01170     return *this == CValue(val);
    01171 }
    01172 inline bool CValue::operator== (const MATH::CRotationf& val) const
    01173 {
    01174     return *this == CValue(val);
    01175 }
    01176 inline bool CValue::operator== (const MATH::CMatrix3f& val) const
    01177 {
    01178     return *this == CValue(val);
    01179 }
    01180 inline bool CValue::operator== (const MATH::CMatrix4f& val) const
    01181 {
    01182     return *this == CValue(val);
    01183 }
    01184 inline bool CValue::operator== (const MATH::CColor4f& val) const
    01185 {
    01186     return *this == CValue(val);
    01187 }
    01188
    01189 inline bool CValue::operator== (const MATH::CShape& val) const
    01190 {
    01191     return *this == CValue(val);
    01192 }
    01193
    01194 inline bool CValue::operator== (const CStringArray& val) const
    01195 {
    01196     return *this == CValue(val);
    01197 }
    01198
    01199 inline bool CValue::IsEmpty() const
    01200 {
    01201     return m_t == siEmpty;
    01202 }
    01203
    01204 //*************************************************************************
    01213 //*************************************************************************
    01214 class SICPPSDKDECL CValueArray
    01215 {
    01216 public:
    01220     CValueArray(LONG in_size=0);
    01221
    01225     CValueArray(const CValueArray& in_array);
    01226
    01228     ~CValueArray();
    01229
    01234     CValueArray& operator=( const CValueArray& in_array );
    01235
    01239     LONG GetCount() const;
    01240
    01245     CStatus Add( const CValue& in_item );
    01246
    01250     CStatus Clear();
    01251
    01258     CStatus Resize( LONG in_size);
    01259
    01266     const CValue& operator[]( LONG in_index ) const;
    01267
    01273     CValue& operator[]( LONG in_index );
    01274
    01280     bool operator==(const CValueArray& in_array) const;
    01281
    01287     bool operator!=(const CValueArray& in_array) const;
    01288
    01289
    01290 private:
    01291
    01292     void* m_ptr;
    01293 };
    01294
    01295
    01296 };
    01297
    01298 #endif // __XSIVALUE_H__