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 
00165     enum DataType
00166     {
00167         siEmpty = 0,    
00168         siInt2 = 2,     
00169         siInt4 = 3,     
00170         siInt8 = 10,    
00171         siFloat = 4,    
00172         siDouble = 5,   
00173         siString = 8,   
00174         siIDispatch = 9, 
00179         siBool = 11,    
00180         siIUnknown = 13, 
00183         siInt1 = 16,    
00184         siUInt1 = 17,   
00185         siUInt2 = 18,   
00186         siUInt4 = 19,   
00187         siUInt8 = 20,   
00188         siWStr  = 31,   
00190         siRef = 666,    
00191         siArray,        
00192         siPtr,          
00193         siRefArray,     
00194         siVector3,      
00195         siLongArray,    
00196         siFloatArray,   
00197         siVector2f=800, 
00198         siVector3f,     
00199         siVector4f,     
00200         siQuaternionf,  
00201         siRotationf,    
00202         siMatrix3f,     
00203         siMatrix4f,     
00204         siColor4f,      
00205         siShape         
00206     };
00207 
00235     union ValueField
00236     {
00237         short               sval;   
00238         LONG                lval;   
00239         float               fval;   
00240         double              dval;   
00241         bool                bval;   
00242         wchar_t*            pwval;  
00243         siPtrType           pval;   
00244         signed char         cval;   
00245         unsigned char       ucval;  
00246         CValueArray*        paval;  
00247         CLongArray*         plaval; 
00248         CFloatArray*        pfaval; 
00249         unsigned short      usval;  
00250         ULONG               ulval;  
00251         MATH::CVector2f*    pv2f;   
00252         MATH::CVector3f*    pv3f;   
00253         MATH::CVector4f*    pv4f;   
00254         MATH::CQuaternionf* pqf;    
00255         MATH::CRotationf*   prf;    
00256         MATH::CMatrix3f*    pm3f;   
00257         MATH::CMatrix4f*    pm4f;   
00258         MATH::CColor4f*     pc4f;   
00259         MATH::CShape*       pshp;   
00260         LLONG               llval;      
00261         ULLONG              ullval;     
00262     }m_u;
00263     DataType m_t;
00264 
00266     CValue();
00267 
00269     virtual ~CValue();
00270 
00274     CValue(const CValue& valSrc);
00275 
00279     CValue(short valSrc);
00280 
00284     CValue(unsigned short valSrc);
00285 
00289     CValue(LONG valSrc);
00290 
00291 #if !defined(linux) || !defined(__x86_64)
00292 
00295     CValue(int valSrc);
00296 #endif
00297 
00301     CValue(ULONG valSrc);
00302 
00307     CValue(LLONG valSrc);
00308 
00313     CValue(ULLONG valSrc);
00314 
00318     CValue(float valSrc);
00319 
00323     CValue(double valSrc);
00324 
00328     CValue(bool valSrc);
00329 
00333     CValue(const CString& valSrc);
00334 
00338     CValue(const CRef& valSrc);
00339 
00344     CValue(const CRefArray& valSrc);
00345 
00349     CValue(unsigned char valSrc);
00350 
00354     CValue(signed char valSrc);
00355 
00359     CValue(const CValueArray& valSrc);
00360 
00365     CValue(const CLongArray& valSrc);
00366 
00371     CValue(const CFloatArray& valSrc);
00372 
00377     CValue(const MATH::CVector3& valSrc);
00378 
00383     CValue(const MATH::CVector2f& valSrc);
00384 
00389     CValue(const MATH::CVector3f& valSrc);
00390 
00395     CValue(const MATH::CVector4f& val);
00396 
00401     CValue(const MATH::CQuaternionf& val);
00402 
00407     CValue(const MATH::CRotationf& val);
00408 
00413     CValue(const MATH::CMatrix3f& val);
00414 
00419     CValue(const MATH::CMatrix4f& val);
00420 
00425     CValue(const MATH::CColor4f& val);
00426 
00431     CValue(const MATH::CShape& val);
00432 
00436     CValue(siPtrType valSrc);
00437 
00441     CValue(const wchar_t* valSrc);
00442 
00446     CValue& operator=(const CValue& valSrc);
00447 
00451     CValue& operator=(short valSrc);
00452 
00456     CValue& operator=(unsigned short valSrc);
00457 
00461     CValue& operator=(LONG valSrc);
00462 
00463 #if !defined(linux) || !defined(__x86_64)
00464 
00467     CValue& operator=(int valSrc);
00468 #endif
00469 
00473     CValue& operator=(ULONG valSrc);
00474 
00479     CValue& operator=(LLONG valSrc);
00480 
00485     CValue& operator=(ULLONG valSrc);
00486 
00490     CValue& operator=(float valSrc);
00491 
00495     CValue& operator=(double valSrc);
00496 
00500     CValue& operator=(bool valSrc);
00501 
00505     CValue& operator=(const CString& valSrc);
00506 
00510     CValue& operator=(const wchar_t * valSrc );
00511 
00515     CValue& operator=(const CRef& valSrc);
00516 
00521     CValue& operator=(const CRefArray& valSrc);
00522 
00527     CValue& operator=(const MATH::CVector3& valSrc);
00528 
00533     CValue& operator=(const MATH::CVector2f& valSrc);
00534 
00539     CValue& operator=(const MATH::CVector3f& valSrc);
00540 
00545     CValue& operator=(const MATH::CVector4f& valSrc);
00546 
00551     CValue& operator=(const MATH::CMatrix3f& valSrc);
00552 
00557     CValue& operator=(const MATH::CMatrix4f& valSrc);
00558 
00563     CValue& operator=(const MATH::CRotationf& valSrc);
00564 
00569     CValue& operator=(const MATH::CQuaternionf& valSrc);
00570 
00575     CValue& operator=(const MATH::CColor4f& valSrc);
00576 
00581     CValue& operator=(const MATH::CShape& valSrc);
00582 
00586     CValue& operator=(unsigned char valSrc);
00587 
00591     CValue& operator=(signed char valSrc);
00592 
00596     CValue& operator=(const CValueArray& valSrc);
00597 
00601     CValue& operator=(const CLongArray& valSrc);
00602 
00606     CValue& operator=(const CFloatArray& valSrc);
00607 
00611     CValue& operator=(siPtrType valSrc);
00612 
00614     operator short () const;
00616     operator unsigned short () const;
00618     operator LONG () const;
00619 
00620 #if !defined(linux) || !defined(__x86_64)
00621 
00624     operator int () const;
00625 #endif
00626 
00630     operator ULONG () const;
00631 
00635     operator LLONG () const;
00636 
00640     operator ULLONG () const;
00641 
00643     operator float () const;
00645     operator double () const;
00647     operator bool () const;
00649     operator CString () const;
00651     operator CRef () const;
00656     operator CRefArray () const;
00658     operator unsigned char () const;
00660     operator signed char () const;
00662     operator CValueArray& () const;
00663 
00667     operator CLongArray& () const;
00668 
00672     operator CFloatArray& () const;
00673 
00677     operator MATH::CVector3 () const;
00678 
00682     operator MATH::CVector2f() const;
00683 
00687     operator MATH::CVector3f() const;
00688 
00692     operator MATH::CVector4f() const;
00693 
00697     operator MATH::CMatrix3f() const;
00698 
00702     operator MATH::CMatrix4f() const;
00703 
00707     operator MATH::CRotationf() const;
00708 
00712     operator MATH::CQuaternionf() const;
00713 
00717     operator MATH::CColor4f() const;
00718 
00722     operator MATH::CShape() const;
00723 
00747     operator siPtrType () const;
00748 
00752     bool operator==(const CValue& valSrc) const;
00753 
00755     inline bool operator== (short) const;
00757     inline bool operator== (unsigned short) const;
00759     inline bool operator== (LONG) const;
00760 #if !defined(linux) || !defined(__x86_64)
00761 
00762     inline bool operator== (int) const;
00763 #endif
00764 
00765     inline bool operator== (ULONG) const;
00766 
00770     inline bool operator== (LLONG) const;
00771 
00775     inline bool operator== (ULLONG) const;
00776 
00778     inline bool operator== (float) const;
00780     inline bool operator== (double) const;
00782     inline bool operator== (bool) const;
00784     inline bool operator== (const CString&) const;
00786     inline bool operator== (const wchar_t*) const;
00788     inline bool operator== (const CRef&) const;
00792     inline bool operator== (const CRefArray&) const;
00794     inline bool operator== (unsigned char) const;
00796     inline bool operator== (signed char) const;
00798     bool operator== (const CValueArray&) const;
00799 
00803     bool operator== (const CLongArray&) const;
00804 
00808     bool operator== (const CFloatArray&) const;
00809 
00811     inline bool operator== (const siPtrType) const;
00812 
00816     inline bool operator== (const MATH::CVector3&) const;
00817 
00821     inline bool operator== (const MATH::CVector2f&) const;
00822 
00826     inline bool operator== (const MATH::CVector3f&) const;
00827 
00831     inline bool operator== (const MATH::CVector4f&) const;
00832 
00836     inline bool operator== (const MATH::CMatrix3f&) const;
00837 
00841     inline bool operator== (const MATH::CMatrix4f&) const;
00842 
00846     inline bool operator== (const MATH::CRotationf&) const;
00847 
00851     inline bool operator== (const MATH::CQuaternionf&) const;
00852 
00856     inline bool operator== (const MATH::CColor4f&) const;
00857 
00861     inline bool operator== (const MATH::CShape&) const;
00862 
00866     bool operator!=(const CValue& valSrc) const;
00867 
00868     // low-level operations
00869 
00913     void ChangeType( CValue::DataType in_type, const CValue* in_pSrc = NULL );
00914 
00916     void Clear();
00917 
00922     void Attach( CValue& in_valSrc);
00923 
00928     CValue Detach();
00929 
00933     CString GetAsText() const;
00934 
00938     inline bool IsEmpty() const;
00939 };
00940 
00941 inline bool CValue::operator== (short val) const
00942 {
00943     return *this == CValue(val);
00944 }
00945 
00946 inline bool CValue::operator== (unsigned short val) const
00947 {
00948     return *this == CValue(val);
00949 }
00950 
00951 inline bool CValue::operator== (LONG val) const
00952 {
00953     return *this == CValue(val);
00954 }
00955 
00956 #if !defined(linux) || !defined(__x86_64)
00957 inline bool CValue::operator== (int val) const
00958 {
00959     return *this == CValue(val);
00960 }
00961 #endif
00962 
00963 inline bool CValue::operator== (ULONG val) const
00964 {
00965     return *this == CValue(val);
00966 }
00967 
00968 inline bool CValue::operator== (LLONG val) const
00969 {
00970     return *this == CValue(val);
00971 }
00972 
00973 inline bool CValue::operator== (ULLONG val) const
00974 {
00975     return *this == CValue(val);
00976 }
00977 
00978 inline bool CValue::operator== (float val) const
00979 {
00980     return *this == CValue(val);
00981 }
00982 
00983 inline bool CValue::operator== (double val) const
00984 {
00985     return *this == CValue(val);
00986 }
00987 
00988 inline bool CValue::operator== (bool val) const
00989 {
00990     return *this == CValue(val);
00991 }
00992 
00993 inline bool CValue::operator== (const CString& val) const
00994 {
00995     return *this == CValue(val);
00996 }
00997 
00998 inline bool CValue::operator== (const wchar_t* val) const
00999 {
01000     return *this == CValue(val);
01001 }
01002 
01003 inline bool CValue::operator== (const CRef& val) const
01004 {
01005     return *this == CValue(val);
01006 }
01007 
01008 inline bool CValue::operator== (const CRefArray& val) const
01009 {
01010     return *this == CValue(val);
01011 }
01012 
01013 inline bool CValue::operator== (unsigned char val) const
01014 {
01015     return *this == CValue(val);
01016 }
01017 
01018 inline bool CValue::operator== (signed char val) const
01019 {
01020     return *this == CValue(val);
01021 }
01022 
01023 inline bool CValue::operator== (const siPtrType val) const
01024 {
01025     return *this == CValue(val);
01026 }
01027 
01028 inline bool CValue::operator== (const MATH::CVector3& val) const
01029 {
01030     return *this == CValue(val);
01031 }
01032 
01033 inline bool CValue::operator== (const MATH::CVector2f& val) const
01034 {
01035     return *this == CValue(val);
01036 }
01037 inline bool CValue::operator== (const MATH::CVector3f& val) const
01038 {
01039     return *this == CValue(val);
01040 }
01041 inline bool CValue::operator== (const MATH::CVector4f& val) const
01042 {
01043     return *this == CValue(val);
01044 }
01045 inline bool CValue::operator== (const MATH::CQuaternionf& val) const
01046 {
01047     return *this == CValue(val);
01048 }
01049 inline bool CValue::operator== (const MATH::CRotationf& val) const
01050 {
01051     return *this == CValue(val);
01052 }
01053 inline bool CValue::operator== (const MATH::CMatrix3f& val) const
01054 {
01055     return *this == CValue(val);
01056 }
01057 inline bool CValue::operator== (const MATH::CMatrix4f& val) const
01058 {
01059     return *this == CValue(val);
01060 }
01061 inline bool CValue::operator== (const MATH::CColor4f& val) const
01062 {
01063     return *this == CValue(val);
01064 }
01065 
01066 inline bool CValue::operator== (const MATH::CShape& val) const
01067 {
01068     return *this == CValue(val);
01069 }
01070 
01071 inline bool CValue::IsEmpty() const
01072 {
01073     return m_t == siEmpty;
01074 }
01075 
01076 //*************************************************************************
01085 //*************************************************************************
01086 class SICPPSDKDECL CValueArray
01087 {
01088 public:
01092     CValueArray(LONG in_size=0);
01093 
01097     CValueArray(const CValueArray& in_array);
01098 
01100     ~CValueArray();
01101 
01106     CValueArray& operator=( const CValueArray& in_array );
01107 
01111     LONG GetCount() const;
01112 
01117     CStatus Add( const CValue& in_item );
01118 
01122     CStatus Clear();
01123 
01130     CStatus Resize( LONG in_size);
01131 
01138     const CValue& operator[]( LONG in_index ) const;
01139 
01145     CValue& operator[]( LONG in_index );
01146 
01152     bool operator==(const CValueArray& in_array) const;
01153 
01159     bool operator!=(const CValueArray& in_array) const;
01160 
01161 
01162 private:
01163 
01164     void* m_ptr;
01165 };
01166 
01167 
01168 };
01169 
01170 #endif // __XSIVALUE_H__