libalvalue  1.14
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
alvalue.h
Go to the documentation of this file.
1 
10 #pragma once
11 #ifndef _LIBALVALUE_ALVALUE_ALVALUE_H_
12 #define _LIBALVALUE_ALVALUE_ALVALUE_H_
13 
14 # include <cstdio>
15 # include <string>
16 # include <vector>
17 
18 # include <alvalue/config.h>
19 
20 namespace AL
21 {
22 
27 #ifndef ALVALUE_VERBOSITY
28 # define ALVALUE_VERBOSITY
29 
33  typedef enum ALVALUE_API _TVerbosity {
37  VerbosityFull
38  } Verbosity;
39 #endif
40 
49  class ALVALUE_API ALValue
50  {
51  friend void ConvertALValueToSoapXml(const ALValue *pAlValue,
52  std::string &strToFill,
53  bool bInAnArray);
54  friend class ALNetwork;
55 
56  public:
61  typedef int TALValueInt;
66  typedef float TALValueFloat;
71  typedef double TALValueDouble;
76  typedef bool TALValueBool;
81  typedef std::string TALValueString;
82 
87  typedef std::vector<unsigned char> TAlValueBinaryData;
92  typedef TAlValueBinaryData::iterator ITAlValueBinaryData;
97  typedef TAlValueBinaryData::const_iterator CITAlValueBinaryData;
98 
103  typedef std::vector<ALValue> TAlValueArray;
108  typedef TAlValueArray::iterator ITAlValueArray;
113  typedef TAlValueArray::const_iterator CITAlValueArray;
114 
119  union unionValue {
127  };
128 
129  public:
142  enum Type {
143  TypeInvalid = 0,
150  TypeBinary
151  };
152 
153  public:
155  ALValue();
160  ALValue(const bool &value);
165  ALValue(const int &value);
170  ALValue(const double &value);
175  ALValue(const float &value);
180  ALValue(const std::string &value);
185  ALValue(const char *value);
186 
191  ALValue(const std::vector<std::string> &pListString);
196  ALValue(const std::vector<float> &pListFloat);
201  ALValue(const std::vector<int> &pListInt);
202 
208  ALValue(const void *value, int nBytes);
214  ALValue(const char **pArrayOfString, int nNbrString);
220  ALValue(const float *pFloat, int nNbrElement);
226  ALValue(const int *pInt, int nNbrElement);
227 
232  ALValue(const TAlValueBinaryData &rhs);
237  ALValue(ALValue const &rhs);
238 
240  virtual ~ALValue();
241 
243  void clear();
244 
251  ALValue& operator=(const ALValue &rhs);
253  ALValue& operator=(const bool &rhs);
255  ALValue& operator=(const int &rhs);
257  ALValue& operator=(const double &rhs);
259  ALValue& operator=(const float &rhs);
261  ALValue& operator=(const char *rhs);
263  ALValue& operator=(const TAlValueBinaryData &rhs);
264 
270  bool operator==(ALValue const &other) const;
276  bool operator!=(ALValue const &other) const;
277 
285  operator bool&();
293  operator const bool() const;
301  operator int&();
309  operator const int() const;
317  operator float&();
325  operator const float() const;
326 
334  operator const double() const;
335 
343  operator std::string&();
351  operator const std::string&() const;
352 
360  operator TAlValueBinaryData&();
368  operator const TAlValueBinaryData&() const;
376  operator const void*() const;
377 
382  typedef std::vector<std::string> TStringArray;
387  typedef std::vector<float> TFloatArray;
392  typedef std::vector<int> TIntArray;
393 
401  operator TStringArray() const;
409  operator TFloatArray() const;
417  operator TIntArray() const;
418 
425  ALValue& setObject(const void* pData, int nDataSizeInBytes);
426 
432  void SetBinary(const void *rhs, int nDataSizeInBytes);
439  ALValue& SetBinaryNoCopy(const void *rhs, int nDataSizeInBytes);
440 
445  const void* GetBinary() const;
450  const void* getObject() const;
451 
456  float *getPtrValue();
457 
467  void ToStringArray(TStringArray &pArrayToFill,
468  bool bInsertDefaultOnError = false) const;
478  void ToFloatArray(TFloatArray &pArrayToFill,
479  bool bInsertDefaultOnError = false) const;
489  void ToIntArray(TIntArray &pArrayToFill,
490  bool bInsertDefaultOnError = false) const;
491 
492 
499  ALValue& operator[](int i);
500 
507  const ALValue& operator[](int i) const;
508 
513  enum Type getType() const;
514 
519  bool isValid () const;
524  bool isArray () const;
529  bool isBool () const;
534  bool isInt () const;
539  bool isFloat () const;
544  bool isString() const;
549  bool isObject() const;
554  bool isBinary() const;
555 
556 
562  unsigned int getSize() const;
563 
564 
574  void arrayReserve(int size);
575 
581  void arraySetSize(int size);
582 
592  void arrayPush(const ALValue &pSrcToCopyNotOwned);
593 
601  void arrayPopFront();
602 
613  std::string toString(Verbosity pnVerbosity = VerbosityMini) const;
614 
624  std::string toPythonBuffer() const;
625 
635  bool decodeB64(const char *pszB64);
636 
646  bool decodeB64Object(const char *pszB64);
647 
652  void encodeB64(std::string &strOutput) const;
653 
666  static enum Type deduceType(const char *szInput,
667  int nLimitToLen = 0x7FFFFFFF);
668 
677  void unSerializeFromText(const char *szInput,
678  int nLimitToLen = 0x7FFFFFFF);
679 
685  std::string serializeToText(void) const;
686 
692  static bool xUnSerializeFromText_InnerTest(void);
693 
694  template <typename T0>
695  static ALValue array(const T0 &a0);
696  template <typename T0, typename T1>
697  static ALValue array(const T0 &a0, const T1 &a1);
698  template <typename T0, typename T1, typename T2>
699  static ALValue array(const T0 &a0, const T1 &a1, const T2 &a2);
700  template <typename T0, typename T1, typename T2, typename T3>
701  static ALValue array(const T0 &a0, const T1 &a1, const T2 &a2, const T3 &a3);
702  template <typename T0, typename T1, typename T2, typename T3, typename T4>
703  static ALValue array(const T0 &a0, const T1 &a1, const T2 &a2, const T3 &a3, const T4 &a4);
704  template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
705  static ALValue array(const T0 &a0, const T1 &a1, const T2 &a2, const T3 &a3, const T4 &a4, const T5 &a5);
706  template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
707  static ALValue array(const T0 &a0, const T1 &a1, const T2 &a2, const T3 &a3, const T4 &a4, const T5 &a5, const T6 &a6);
708  template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
709  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);
710  template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
711  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);
712  template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
713  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);
714 
715  protected:
717  void xInvalidate();
718  void xAssertCompatibleType(enum Type pnWantedType);
719  void xAssertType(enum Type pnWantedType) const;
720  void xAssertArraySize(int pnSize) const;
725  void assertStruct();
729  int _type;
731  union unionValue _value;
732 
733  public:
738  const unionValue getUnionValue();
739 
744  TAlValueArray *getArrayPtr() const;
745 
751  static std::string TypeToString(enum Type pnType);
752 
753  };
754 
755  template <typename T0>
756  ALValue ALValue::array(const T0 &a0)
757  {
758  ALValue result;
759  result.arraySetSize(1);
760  result[0] = a0;
761  return result;
762  }
763 
764  template <typename T0, typename T1>
765  ALValue ALValue::array(const T0 &a0, const T1 &a1)
766  {
767  ALValue result;
768  result.arraySetSize(2);
769  result[0] = a0;
770  result[1] = a1;
771  return result;
772  }
773 
774  template <typename T0, typename T1, typename T2>
775  ALValue ALValue::array(const T0 &a0, const T1 &a1, const T2 &a2)
776  {
777  ALValue result;
778  result.arraySetSize(3);
779  result[0] = a0;
780  result[1] = a1;
781  result[2] = a2;
782  return result;
783  }
784 
785  template <typename T0, typename T1, typename T2, typename T3>
786  ALValue ALValue::array(const T0 &a0, const T1 &a1, const T2 &a2, const T3 &a3)
787  {
788  ALValue result;
789  result.arraySetSize(4);
790  result[0] = a0;
791  result[1] = a1;
792  result[2] = a2;
793  result[3] = a3;
794  return result;
795  }
796 
797  template <typename T0, typename T1, typename T2, typename T3, typename T4>
798  ALValue ALValue::array(const T0 &a0, const T1 &a1, const T2 &a2, const T3 &a3, const T4 &a4)
799  {
800  ALValue result;
801  result.arraySetSize(5);
802  result[0] = a0;
803  result[1] = a1;
804  result[2] = a2;
805  result[3] = a3;
806  result[4] = a4;
807  return result;
808  }
809 
810  template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5>
811  ALValue ALValue::array(const T0 &a0, const T1 &a1, const T2 &a2, const T3 &a3, const T4 &a4, const T5 &a5)
812  {
813  ALValue result;
814  result.arraySetSize(6);
815  result[0] = a0;
816  result[1] = a1;
817  result[2] = a2;
818  result[3] = a3;
819  result[4] = a4;
820  result[5] = a5;
821  return result;
822  }
823 
824  template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6>
825  ALValue ALValue::array(const T0 &a0, const T1 &a1, const T2 &a2, const T3 &a3, const T4 &a4, const T5 &a5, const T6 &a6)
826  {
827  ALValue result;
828  result.arraySetSize(7);
829  result[0] = a0;
830  result[1] = a1;
831  result[2] = a2;
832  result[3] = a3;
833  result[4] = a4;
834  result[5] = a5;
835  result[6] = a6;
836  return result;
837  }
838 
839  template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7>
840  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)
841  {
842  ALValue result;
843  result.arraySetSize(8);
844  result[0] = a0;
845  result[1] = a1;
846  result[2] = a2;
847  result[3] = a3;
848  result[4] = a4;
849  result[5] = a5;
850  result[6] = a6;
851  result[7] = a7;
852  return result;
853  }
854 
855  template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8>
856  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)
857  {
858  ALValue result;
859  result.arraySetSize(9);
860  result[0] = a0;
861  result[1] = a1;
862  result[2] = a2;
863  result[3] = a3;
864  result[4] = a4;
865  result[5] = a5;
866  result[6] = a6;
867  result[7] = a7;
868  result[8] = a8;
869  return result;
870  }
871 
872  template <typename T0, typename T1, typename T2, typename T3, typename T4, typename T5, typename T6, typename T7, typename T8, typename T9>
873  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)
874  {
875  ALValue result;
876  result.arraySetSize(10);
877  result[0] = a0;
878  result[1] = a1;
879  result[2] = a2;
880  result[3] = a3;
881  result[4] = a4;
882  result[5] = a5;
883  result[6] = a6;
884  result[7] = a7;
885  result[8] = a8;
886  result[9] = a9;
887  return result;
888  }
889 } // namespace AL
890 
896 std::ostream &operator<<(std::ostream &os, const AL::ALValue &a);
897 
898 #endif // _LIBALVALUE_ALVALUE_ALVALUE_H_