libalvalue  1.12
alvalue/alvalue.h
Go to the documentation of this file.
00001 
00010 #pragma once
00011 #ifndef _LIBALVALUE_ALVALUE_ALVALUE_H_
00012 #define _LIBALVALUE_ALVALUE_ALVALUE_H_
00013 
00014 # include <cstdio>
00015 # include <string>
00016 # include <vector>
00017 
00018 # include <alvalue/config.h>
00019 
00020 namespace AL
00021 {
00022 
00027 #ifndef ALVALUE_VERBOSITY
00028 # define ALVALUE_VERBOSITY
00029 
00033   typedef enum ALVALUE_API _TVerbosity {
00034     VerbosityNone=0,   
00035       VerbosityMini,   
00036       VerbosityMedium, 
00037       VerbosityFull    
00038       } Verbosity;
00039 #endif
00040 
00049   class ALVALUE_API ALValue
00050   {
00051     friend void ConvertALValueToSoapXml(const ALValue *pAlValue,
00052                                         std::string &strToFill,
00053                                         bool bInAnArray);
00054     friend class ALNetwork;
00055 
00056   public:
00061     typedef int                                TALValueInt;
00066     typedef float                              TALValueFloat;
00071     typedef double                             TALValueDouble;
00076     typedef bool                               TALValueBool;
00081     typedef std::string                        TALValueString;
00082 
00087     typedef std::vector<unsigned char>         TAlValueBinaryData;
00092     typedef TAlValueBinaryData::iterator       ITAlValueBinaryData;
00097     typedef TAlValueBinaryData::const_iterator CITAlValueBinaryData;
00098 
00103     typedef std::vector<ALValue>               TAlValueArray;
00108     typedef TAlValueArray::iterator            ITAlValueArray;
00113     typedef TAlValueArray::const_iterator      CITAlValueArray;
00114 
00119     union unionValue {
00120       TAlValueArray      *asArray;  
00121       TALValueBool       asBool;    
00122       TALValueInt        asInt;     
00123       TALValueFloat      asFloat;   
00124       TALValueString     *asString; 
00125       TAlValueBinaryData *asObject; 
00126       TAlValueBinaryData *asBinary; 
00127     };
00128 
00129   public:
00142     enum Type {
00143       TypeInvalid = 0, 
00144       TypeArray,       
00145       TypeBool,        
00146       TypeInt,         
00147       TypeFloat,       
00148       TypeString,      
00149       TypeObject,      
00150       TypeBinary       
00151     };
00152 
00153   public:
00155     ALValue();
00160     ALValue(const bool &value);
00165     ALValue(const int &value);
00170     ALValue(const double &value);
00175     ALValue(const float &value);
00180     ALValue(const std::string &value);
00185     ALValue(const char *value);
00186 
00191     ALValue(const std::vector<std::string> &pListString);
00196     ALValue(const std::vector<float> &pListFloat);
00201     ALValue(const std::vector<int> &pListInt);
00202 
00208     ALValue(const void *value, int nBytes);
00214     ALValue(const char **pArrayOfString, int nNbrString);
00220     ALValue(const float *pFloat, int nNbrElement);
00226     ALValue(const int *pInt, int nNbrElement);
00227 
00232     ALValue(const TAlValueBinaryData &rhs);
00237     ALValue(ALValue const &rhs);
00238 
00240     virtual ~ALValue();
00241 
00243     void clear();
00244 
00251     ALValue& operator=(const ALValue &rhs);
00253     ALValue& operator=(const bool &rhs);
00255     ALValue& operator=(const int &rhs);
00257     ALValue& operator=(const double &rhs);
00259     ALValue& operator=(const float &rhs);
00261     ALValue& operator=(const char *rhs);
00263     ALValue& operator=(const TAlValueBinaryData &rhs);
00264 
00270     bool operator==(ALValue const &other) const;
00276     bool operator!=(ALValue const &other) const;
00277 
00285     operator       bool&();
00293     operator const bool() const;
00301     operator       int&();
00309     operator const int() const;
00317     operator       float&();
00325     operator const float() const;
00326 
00334     operator const double() const;
00335 
00343     operator       std::string&();
00351     operator const std::string&() const;
00352 
00360     operator       TAlValueBinaryData&();
00368     operator const TAlValueBinaryData&() const;
00376     operator const void*() const;
00377 
00382     typedef std::vector<std::string> TStringArray;
00387     typedef std::vector<float>       TFloatArray;
00392     typedef std::vector<int>         TIntArray;
00393 
00401     operator TStringArray() const;
00409     operator TFloatArray() const;
00417     operator TIntArray() const;
00418 
00425     ALValue& setObject(const void* pData, int nDataSizeInBytes);
00426 
00432     void     SetBinary(const void *rhs, int nDataSizeInBytes);
00439     ALValue& SetBinaryNoCopy(const void *rhs, int nDataSizeInBytes);
00440 
00445     const void* GetBinary() const;
00450     const void* getObject() const;
00451 
00456     float *getPtrValue();
00457 
00467     void ToStringArray(TStringArray &pArrayToFill,
00468                        bool bInsertDefaultOnError = false) const;
00478     void ToFloatArray(TFloatArray &pArrayToFill,
00479                       bool bInsertDefaultOnError = false) const;
00489     void ToIntArray(TIntArray &pArrayToFill,
00490                     bool bInsertDefaultOnError = false) const;
00491 
00492 
00499     ALValue& operator[](int i);
00500 
00507     const ALValue& operator[](int i) const;
00508 
00513     enum Type getType() const;
00514 
00519     bool isValid () const;
00524     bool isArray () const;
00529     bool isBool  () const;
00534     bool isInt   () const;
00539     bool isFloat () const;
00544     bool isString() const;
00549     bool isObject() const;
00554     bool isBinary() const;
00555 
00556 
00562     unsigned int getSize() const;
00563 
00564 
00574     void arrayReserve(int size);
00575 
00581     void arraySetSize(int size);
00582 
00592     void arrayPush(const ALValue &pSrcToCopyNotOwned);
00593 
00604     std::string toString(Verbosity pnVerbosity = VerbosityMini) const;
00605 
00615     std::string toPythonBuffer() const;
00616 
00626     bool decodeB64(const char *pszB64);
00627 
00637     bool decodeB64Object(const char *pszB64);
00638 
00643     void encodeB64(std::string &strOutput) const;
00644 
00657     static enum Type deduceType(const char *szInput,
00658                                 int nLimitToLen = 0x7FFFFFFF);
00659 
00668     void unSerializeFromText(const char *szInput,
00669                              int nLimitToLen = 0x7FFFFFFF);
00670 
00676     std::string serializeToText(void) const;
00677 
00683     static bool xUnSerializeFromText_InnerTest(void);
00684 
00685     template <typename T0>
00686       static ALValue array(const T0 &a0);
00687     template <typename T0, typename T1>
00688       static ALValue array(const T0 &a0, const T1 &a1);
00689     template <typename T0, typename T1, typename T2>
00690       static ALValue array(const T0 &a0, const T1 &a1, const T2 &a2);
00691     template <typename T0, typename T1, typename T2, typename T3>
00692       static ALValue array(const T0 &a0, const T1 &a1, const T2 &a2, const T3 &a3);
00693     template <typename T0, typename T1, typename T2, typename T3, typename T4>
00694       static ALValue array(const T0 &a0, const T1 &a1, const T2 &a2, const T3 &a3, const T4 &a4);
00695     template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
00696       static ALValue array(const T0 &a0, const T1 &a1, const T2 &a2, const T3 &a3, const T4 &a4, const T5 &a5);
00697     template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
00698       static ALValue array(const T0 &a0, const T1 &a1, const T2 &a2, const T3 &a3, const T4 &a4, const T5 &a5, const T6 &a6);
00699     template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
00700       static ALValue array(const T0 &a0, const T1 &a1, const T2 &a2, const T3 &a3, const T4 &a4, const T5 &a5, const T6 &a6, const T7 &a7);
00701     template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
00702       static ALValue array(const T0 &a0, const T1 &a1, const T2 &a2, const T3 &a3, const T4 &a4, const T5 &a5, const T6 &a6, const T7 &a7, const T8 &a8);
00703     template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
00704       static ALValue array(const T0 &a0, const T1 &a1, const T2 &a2, const T3 &a3, const T4 &a4, const T5 &a5, const T6 &a6, const T7 &a7, const T8 &a8, const T9 &a9);
00705 
00706   protected:
00708     void xInvalidate();
00709     void xAssertCompatibleType(enum Type pnWantedType);
00710     void xAssertType(enum Type pnWantedType) const;
00711     void xAssertArraySize(int pnSize) const;
00716     void assertStruct();
00720     int              _type;
00722     union unionValue _value;
00723 
00724   public:
00729     const unionValue getUnionValue();
00730 
00735     TAlValueArray *getArrayPtr() const;
00736 
00742     static std::string TypeToString(enum Type pnType);
00743 
00744   };
00745 
00746   template <typename T0>
00747   ALValue ALValue::array(const T0 &a0)
00748   {
00749     ALValue result;
00750     result.arraySetSize(1);
00751     result[0] = a0;
00752     return result;
00753   }
00754 
00755   template <typename T0, typename T1>
00756   ALValue ALValue::array(const T0 &a0, const T1 &a1)
00757   {
00758     ALValue result;
00759     result.arraySetSize(2);
00760     result[0] = a0;
00761     result[1] = a1;
00762     return result;
00763   }
00764 
00765   template <typename T0, typename T1, typename T2>
00766   ALValue ALValue::array(const T0 &a0, const T1 &a1, const T2 &a2)
00767   {
00768     ALValue result;
00769     result.arraySetSize(3);
00770     result[0] = a0;
00771     result[1] = a1;
00772     result[2] = a2;
00773     return result;
00774   }
00775 
00776   template <typename T0, typename T1, typename T2, typename T3>
00777   ALValue ALValue::array(const T0 &a0, const T1 &a1, const T2 &a2, const T3 &a3)
00778   {
00779     ALValue result;
00780     result.arraySetSize(4);
00781     result[0] = a0;
00782     result[1] = a1;
00783     result[2] = a2;
00784     result[3] = a3;
00785     return result;
00786   }
00787 
00788   template <typename T0, typename T1, typename T2, typename T3, typename T4>
00789   ALValue ALValue::array(const T0 &a0, const T1 &a1, const T2 &a2, const T3 &a3, const T4 &a4)
00790   {
00791     ALValue result;
00792     result.arraySetSize(5);
00793     result[0] = a0;
00794     result[1] = a1;
00795     result[2] = a2;
00796     result[3] = a3;
00797     result[4] = a4;
00798     return result;
00799   }
00800 
00801   template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
00802   ALValue ALValue::array(const T0 &a0, const T1 &a1, const T2 &a2, const T3 &a3, const T4 &a4, const T5 &a5)
00803   {
00804     ALValue result;
00805     result.arraySetSize(6);
00806     result[0] = a0;
00807     result[1] = a1;
00808     result[2] = a2;
00809     result[3] = a3;
00810     result[4] = a4;
00811     result[5] = a5;
00812     return result;
00813   }
00814 
00815   template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
00816   ALValue ALValue::array(const T0 &a0, const T1 &a1, const T2 &a2, const T3 &a3, const T4 &a4, const T5 &a5, const T6 &a6)
00817   {
00818     ALValue result;
00819     result.arraySetSize(7);
00820     result[0] = a0;
00821     result[1] = a1;
00822     result[2] = a2;
00823     result[3] = a3;
00824     result[4] = a4;
00825     result[5] = a5;
00826     result[6] = a6;
00827     return result;
00828   }
00829 
00830   template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
00831   ALValue ALValue::array(const T0 &a0, const T1 &a1, const T2 &a2, const T3 &a3, const T4 &a4, const T5 &a5, const T6 &a6, const T7 &a7)
00832   {
00833     ALValue result;
00834     result.arraySetSize(8);
00835     result[0] = a0;
00836     result[1] = a1;
00837     result[2] = a2;
00838     result[3] = a3;
00839     result[4] = a4;
00840     result[5] = a5;
00841     result[6] = a6;
00842     result[7] = a7;
00843     return result;
00844   }
00845 
00846   template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
00847   ALValue ALValue::array(const T0 &a0, const T1 &a1, const T2 &a2, const T3 &a3, const T4 &a4, const T5 &a5, const T6 &a6, const T7 &a7, const T8 &a8)
00848   {
00849     ALValue result;
00850     result.arraySetSize(9);
00851     result[0] = a0;
00852     result[1] = a1;
00853     result[2] = a2;
00854     result[3] = a3;
00855     result[4] = a4;
00856     result[5] = a5;
00857     result[6] = a6;
00858     result[7] = a7;
00859     result[8] = a8;
00860     return result;
00861   }
00862 
00863   template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
00864   ALValue ALValue::array(const T0 &a0, const T1 &a1, const T2 &a2, const T3 &a3, const T4 &a4, const T5 &a5, const T6 &a6, const T7 &a7, const T8 &a8, const T9 &a9)
00865   {
00866     ALValue result;
00867     result.arraySetSize(10);
00868     result[0] = a0;
00869     result[1] = a1;
00870     result[2] = a2;
00871     result[3] = a3;
00872     result[4] = a4;
00873     result[5] = a5;
00874     result[6] = a6;
00875     result[7] = a7;
00876     result[8] = a8;
00877     result[9] = a9;
00878     return result;
00879   }
00880 } // namespace AL
00881 
00887 std::ostream &operator<<(std::ostream &os, const AL::ALValue &a);
00888 
00889 #endif  // _LIBALVALUE_ALVALUE_ALVALUE_H_
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines