// $Id$
// Author: Sergey Linev  4.03.2014

/*************************************************************************
 * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/

#ifndef ROOT_TBufferJSON
#define ROOT_TBufferJSON

#ifndef ROOT_TBuffer
#include "TBuffer.h"
#endif
#ifndef ROOT_TString
#include "TString.h"
#endif
#ifndef ROOT_TObjArray
#include "TObjArray.h"
#endif

#include <map>

class TVirtualStreamerInfo;
class TStreamerInfo;
class TStreamerElement;
class TObjArray;
class TMemberStreamer;
class TDataMember;
class TJSONStackObj;


#include "TNamed.h"
#include "TArrayF.h"
#include "TArrayL.h"
#include "TObjString.h"
#include "TClonesArray.h"

class TTestObject : public TNamed {
protected:
   Int_t    fIntValue;
   Float_t  fFloatValue;
   Int_t    fIntArray[5];
   Int_t    fInt2Array[3][4];
   Int_t    fInt3Array[2][3][4];
   TString  fStrValue;
   TString *fStrPtr;
   TArrayF  fArrayF;
   TArrayL  fArrayL;
   TClonesArray fNames;

public:
   TTestObject() : TNamed()
   {
      fIntValue    = 123;
      fFloatValue  = 23.45;
      for (int n = 0; n < 5; n++) fIntArray[n] = (n + 7) * 12;
      for (int n1 = 0; n1 < 3; n1++)
         for (int n2 = 0; n2 < 4; n2++)
            fInt2Array[n1][n2] = (n1 + 1) * (n2 + 2);
      for (int n0 = 0; n0 < 2; n0++)
         for (int n1 = 0; n1 < 3; n1++)
            for (int n2 = 0; n2 < 4; n2++)
               fInt3Array[n0][n1][n2] = (n0 + 1) * (n1 + 2) * (n2 + 3);

      fStrValue = "";
      fStrPtr = 0;
      fArrayF.Set(0);
      fArrayL.Set(0);
   }

   TTestObject(const char *name, const char *title) :
      TNamed(name, title)
   {
      fIntValue    = 123;
      fFloatValue  = 23.45;
      for (int n = 0; n < 5; n++) fIntArray[n] = (n + 7) * 12;
      for (int n1 = 0; n1 < 3; n1++)
         for (int n2 = 0; n2 < 4; n2++)
            fInt2Array[n1][n2] = (n1 + 1) * (n2 + 2);

      for (int n0 = 0; n0 < 2; n0++)
         for (int n1 = 0; n1 < 3; n1++)
            for (int n2 = 0; n2 < 4; n2++)
               fInt3Array[n0][n1][n2] = (n0 + 1) * (n1 + 2) * (n2 + 3);

      fStrValue = "string value";
      fStrPtr = &fStrValue;
      fArrayF.Set(10);
      fArrayF.Reset(123);
      fArrayL.Set(12);
      fArrayL.Reset(77);

      fNames.SetClass("TObjString", 10);
      for (Int_t n = 0; n <= 10; n++) {
         new(fNames[n]) TObjString(Form("str%d", n));
         //fNames.Add(s);
      }
      printf("Num names %d\n", fNames.GetLast() + 1);
   }


   ClassDef(TTestObject, 1);

};


class TBufferJSON : public TBuffer {

public:

   TBufferJSON();
   virtual ~TBufferJSON();

   void SetCompact(int level);

   static TString   ConvertToJSON(const TObject *obj, Int_t compact = 0);
   static TString   ConvertToJSON(const void *obj, const TClass *cl, Int_t compact = 0);
   static TString   ConvertToJSON(const void *obj, TDataMember *member, Int_t compact = 0);

   // suppress class writing/reading

   virtual TClass  *ReadClass(const TClass *cl = 0, UInt_t *objTag = 0);
   virtual void     WriteClass(const TClass *cl);

   // redefined virtual functions of TBuffer

   virtual Int_t    CheckByteCount(UInt_t startpos, UInt_t bcnt, const TClass *clss); // SL
   virtual Int_t    CheckByteCount(UInt_t startpos, UInt_t bcnt, const char *classname); // SL
   virtual void     SetByteCount(UInt_t cntpos, Bool_t packInVersion = kFALSE);  // SL

   virtual void      SkipVersion(const TClass *cl = 0);
   virtual Version_t ReadVersion(UInt_t *start = 0, UInt_t *bcnt = 0, const TClass *cl = 0);  // SL
   virtual Version_t ReadVersionNoCheckSum(UInt_t *, UInt_t *)
   {
      return 0;
   }
   virtual UInt_t    WriteVersion(const TClass *cl, Bool_t useBcnt = kFALSE);  // SL

   virtual void    *ReadObjectAny(const TClass *clCast);
   virtual void     SkipObjectAny();

   // these methods used in streamer info to indicate currently streamed element,
   virtual void     IncrementLevel(TVirtualStreamerInfo *);
   virtual void     SetStreamerElementNumber(Int_t);
   virtual void     DecrementLevel(TVirtualStreamerInfo *);

   virtual void     ClassBegin(const TClass *, Version_t = -1);
   virtual void     ClassEnd(const TClass *);
   virtual void     ClassMember(const char *name, const char *typeName = 0, Int_t arrsize1 = -1, Int_t arrsize2 = -1);

   virtual void     WriteObject(const TObject *obj);

   virtual void     ReadFloat16(Float_t *f, TStreamerElement *ele = 0);
   virtual void     WriteFloat16(Float_t *f, TStreamerElement *ele = 0);
   virtual void     ReadDouble32(Double_t *d, TStreamerElement *ele = 0);
   virtual void     WriteDouble32(Double_t *d, TStreamerElement *ele = 0);
   virtual void     ReadWithFactor(Float_t *ptr, Double_t factor, Double_t minvalue);
   virtual void     ReadWithNbits(Float_t *ptr, Int_t nbits);
   virtual void     ReadWithFactor(Double_t *ptr, Double_t factor, Double_t minvalue);
   virtual void     ReadWithNbits(Double_t *ptr, Int_t nbits);

   virtual Int_t    ReadArray(Bool_t    *&b);
   virtual Int_t    ReadArray(Char_t    *&c);
   virtual Int_t    ReadArray(UChar_t   *&c);
   virtual Int_t    ReadArray(Short_t   *&h);
   virtual Int_t    ReadArray(UShort_t  *&h);
   virtual Int_t    ReadArray(Int_t     *&i);
   virtual Int_t    ReadArray(UInt_t    *&i);
   virtual Int_t    ReadArray(Long_t    *&l);
   virtual Int_t    ReadArray(ULong_t   *&l);
   virtual Int_t    ReadArray(Long64_t  *&l);
   virtual Int_t    ReadArray(ULong64_t *&l);
   virtual Int_t    ReadArray(Float_t   *&f);
   virtual Int_t    ReadArray(Double_t  *&d);
   virtual Int_t    ReadArrayFloat16(Float_t  *&f, TStreamerElement *ele = 0);
   virtual Int_t    ReadArrayDouble32(Double_t  *&d, TStreamerElement *ele = 0);

   virtual Int_t    ReadStaticArray(Bool_t    *b);
   virtual Int_t    ReadStaticArray(Char_t    *c);
   virtual Int_t    ReadStaticArray(UChar_t   *c);
   virtual Int_t    ReadStaticArray(Short_t   *h);
   virtual Int_t    ReadStaticArray(UShort_t  *h);
   virtual Int_t    ReadStaticArray(Int_t     *i);
   virtual Int_t    ReadStaticArray(UInt_t    *i);
   virtual Int_t    ReadStaticArray(Long_t    *l);
   virtual Int_t    ReadStaticArray(ULong_t   *l);
   virtual Int_t    ReadStaticArray(Long64_t  *l);
   virtual Int_t    ReadStaticArray(ULong64_t *l);
   virtual Int_t    ReadStaticArray(Float_t   *f);
   virtual Int_t    ReadStaticArray(Double_t  *d);
   virtual Int_t    ReadStaticArrayFloat16(Float_t  *f, TStreamerElement *ele = 0);
   virtual Int_t    ReadStaticArrayDouble32(Double_t  *d, TStreamerElement *ele = 0);

   virtual void     ReadFastArray(Bool_t    *b, Int_t n);
   virtual void     ReadFastArray(Char_t    *c, Int_t n);
   virtual void     ReadFastArrayString(Char_t *c, Int_t n);
   virtual void     ReadFastArray(UChar_t   *c, Int_t n);
   virtual void     ReadFastArray(Short_t   *h, Int_t n);
   virtual void     ReadFastArray(UShort_t  *h, Int_t n);
   virtual void     ReadFastArray(Int_t     *i, Int_t n);
   virtual void     ReadFastArray(UInt_t    *i, Int_t n);
   virtual void     ReadFastArray(Long_t    *l, Int_t n);
   virtual void     ReadFastArray(ULong_t   *l, Int_t n);
   virtual void     ReadFastArray(Long64_t  *l, Int_t n);
   virtual void     ReadFastArray(ULong64_t *l, Int_t n);
   virtual void     ReadFastArray(Float_t   *f, Int_t n);
   virtual void     ReadFastArray(Double_t  *d, Int_t n);
   virtual void     ReadFastArrayFloat16(Float_t  *f, Int_t n, TStreamerElement *ele = 0);
   virtual void     ReadFastArrayDouble32(Double_t  *d, Int_t n, TStreamerElement *ele = 0);
   virtual void     ReadFastArrayWithFactor(Float_t *ptr, Int_t n, Double_t factor, Double_t minvalue) ;
   virtual void     ReadFastArrayWithNbits(Float_t *ptr, Int_t n, Int_t nbits);
   virtual void     ReadFastArrayWithFactor(Double_t *ptr, Int_t n, Double_t factor, Double_t minvalue);
   virtual void     ReadFastArrayWithNbits(Double_t *ptr, Int_t n, Int_t nbits) ;

   virtual void     WriteArray(const Bool_t    *b, Int_t n);
   virtual void     WriteArray(const Char_t    *c, Int_t n);
   virtual void     WriteArray(const UChar_t   *c, Int_t n);
   virtual void     WriteArray(const Short_t   *h, Int_t n);
   virtual void     WriteArray(const UShort_t  *h, Int_t n);
   virtual void     WriteArray(const Int_t     *i, Int_t n);
   virtual void     WriteArray(const UInt_t    *i, Int_t n);
   virtual void     WriteArray(const Long_t    *l, Int_t n);
   virtual void     WriteArray(const ULong_t   *l, Int_t n);
   virtual void     WriteArray(const Long64_t  *l, Int_t n);
   virtual void     WriteArray(const ULong64_t *l, Int_t n);
   virtual void     WriteArray(const Float_t   *f, Int_t n);
   virtual void     WriteArray(const Double_t  *d, Int_t n);
   virtual void     WriteArrayFloat16(const Float_t  *f, Int_t n, TStreamerElement *ele = 0);
   virtual void     WriteArrayDouble32(const Double_t  *d, Int_t n, TStreamerElement *ele = 0);
   virtual void     ReadFastArray(void  *start , const TClass *cl, Int_t n = 1, TMemberStreamer *s = 0, const TClass *onFileClass = 0);
   virtual void     ReadFastArray(void **startp, const TClass *cl, Int_t n = 1, Bool_t isPreAlloc = kFALSE, TMemberStreamer *s = 0, const TClass *onFileClass = 0);

   virtual void     WriteFastArray(const Bool_t    *b, Int_t n);
   virtual void     WriteFastArray(const Char_t    *c, Int_t n);
   virtual void     WriteFastArrayString(const Char_t    *c, Int_t n);
   virtual void     WriteFastArray(const UChar_t   *c, Int_t n);
   virtual void     WriteFastArray(const Short_t   *h, Int_t n);
   virtual void     WriteFastArray(const UShort_t  *h, Int_t n);
   virtual void     WriteFastArray(const Int_t     *i, Int_t n);
   virtual void     WriteFastArray(const UInt_t    *i, Int_t n);
   virtual void     WriteFastArray(const Long_t    *l, Int_t n);
   virtual void     WriteFastArray(const ULong_t   *l, Int_t n);
   virtual void     WriteFastArray(const Long64_t  *l, Int_t n);
   virtual void     WriteFastArray(const ULong64_t *l, Int_t n);
   virtual void     WriteFastArray(const Float_t   *f, Int_t n);
   virtual void     WriteFastArray(const Double_t  *d, Int_t n);
   virtual void     WriteFastArrayFloat16(const Float_t  *d, Int_t n, TStreamerElement *ele = 0);
   virtual void     WriteFastArrayDouble32(const Double_t  *d, Int_t n, TStreamerElement *ele = 0);
   virtual void     WriteFastArray(void  *start,  const TClass *cl, Int_t n = 1, TMemberStreamer *s = 0);
   virtual Int_t    WriteFastArray(void **startp, const TClass *cl, Int_t n = 1, Bool_t isPreAlloc = kFALSE, TMemberStreamer *s = 0);

   virtual void     StreamObject(void *obj, const type_info &typeinfo, const TClass *onFileClass = 0);
   virtual void     StreamObject(void *obj, const char *className, const TClass *onFileClass = 0);
   virtual void     StreamObject(void *obj, const TClass *cl, const TClass *onFileClass = 0);
   virtual void     StreamObject(TObject *obj);

   virtual   void     ReadBool(Bool_t       &b);
   virtual   void     ReadChar(Char_t       &c);
   virtual   void     ReadUChar(UChar_t     &c);
   virtual   void     ReadShort(Short_t     &s);
   virtual   void     ReadUShort(UShort_t   &s);
   virtual   void     ReadInt(Int_t         &i);
   virtual   void     ReadUInt(UInt_t       &i);
   virtual   void     ReadLong(Long_t       &l);
   virtual   void     ReadULong(ULong_t     &l);
   virtual   void     ReadLong64(Long64_t   &l);
   virtual   void     ReadULong64(ULong64_t &l);
   virtual   void     ReadFloat(Float_t     &f);
   virtual   void     ReadDouble(Double_t   &d);
   virtual   void     ReadCharP(Char_t      *c);
   virtual   void     ReadTString(TString   &s);

   virtual   void     WriteBool(Bool_t       b);
   virtual   void     WriteChar(Char_t       c);
   virtual   void     WriteUChar(UChar_t     c);
   virtual   void     WriteShort(Short_t     s);
   virtual   void     WriteUShort(UShort_t   s);
   virtual   void     WriteInt(Int_t         i);
   virtual   void     WriteUInt(UInt_t       i);
   virtual   void     WriteLong(Long_t       l);
   virtual   void     WriteULong(ULong_t     l);
   virtual   void     WriteLong64(Long64_t   l);
   virtual   void     WriteULong64(ULong64_t l);
   virtual   void     WriteFloat(Float_t     f);
   virtual   void     WriteDouble(Double_t   d);
   virtual   void     WriteCharP(const Char_t *c);
   virtual   void     WriteTString(const TString  &s);

   virtual   Int_t    WriteClones(TClonesArray *a, Int_t nobjects);

   virtual   Int_t    WriteObjectAny(const void *obj, const TClass *ptrClass);
   virtual   Int_t    WriteClassBuffer(const TClass *cl, void *pointer);

   virtual Int_t      ApplySequence(const TStreamerInfoActions::TActionSequence &sequence, void *object);
   virtual Int_t      ApplySequenceVecPtr(const TStreamerInfoActions::TActionSequence &sequence, void *start_collection, void *end_collection);
   virtual Int_t      ApplySequence(const TStreamerInfoActions::TActionSequence &sequence, void *start_collection, void *end_collection);

   virtual void       TagStreamerInfo(TVirtualStreamerInfo * /*info*/) {}

   // abstract virtual methods from TBuffer, which should be redefined to
   virtual Bool_t     CheckObject(const TObject * /*obj*/)
   {
      /*Error("CheckObject","useless");*/ return kTRUE;
   }
   virtual Bool_t     CheckObject(const void * /*ptr*/, const TClass * /*cl*/)
   {
      /*Error("CheckObject","useless");*/ return kTRUE;
   }

   virtual Int_t      ReadBuf(void * /*buf*/, Int_t /*max*/)
   {
      Error("ReadBuf", "useless");
      return 0;
   }
   virtual void       WriteBuf(const void * /*buf*/, Int_t /*max*/)
   {
      Error("WriteBuf", "useless");
   }

   virtual char      *ReadString(char * /*s*/, Int_t /*max*/)
   {
      Error("ReadString", "useless");
      return 0;
   }
   virtual void       WriteString(const char * /*s*/)
   {
      Error("WriteString", "useless");
   }

   virtual Int_t      GetVersionOwner() const
   {
      Error("GetVersionOwner", "useless");
      return 0;
   }
   virtual Int_t      GetMapCount() const
   {
      Error("GetMapCount", "useless");
      return 0;
   }
   virtual void       GetMappedObject(UInt_t /*tag*/, void *&/*ptr*/, TClass *&/*ClassPtr*/) const
   {
      Error("GetMappedObject", "useless");
   }
   virtual void       MapObject(const TObject * /*obj*/, UInt_t /*offset*/ = 1)
   {
      Error("MapObject", "useless");
   }
   virtual void       MapObject(const void * /*obj*/, const TClass * /*cl*/, UInt_t /*offset*/ = 1)
   {
      Error("MapObject", "useless");
   }
   virtual void       Reset()
   {
      Error("Reset", "useless");
   }
   virtual void       InitMap()
   {
      Error("InitMap", "useless");
   }
   virtual void       ResetMap()
   {
      Error("ResetMap", "useless");
   }
   virtual void       SetReadParam(Int_t /*mapsize*/)
   {
      Error("SetReadParam", "useless");
   }
   virtual void       SetWriteParam(Int_t /*mapsize*/)
   {
      Error("SetWriteParam", "useless");
   }

   virtual Version_t  ReadVersionForMemberWise(const TClass * /*cl*/ = 0)
   {
      Error("ReadVersionForMemberWise", "useless");
      return 0;
   }
   virtual UInt_t     WriteVersionMemberWise(const TClass * /*cl*/, Bool_t /*useBcnt*/ = kFALSE)
   {
      Error("WriteVersionMemberWise", "useless");
      return 0;
   }

   virtual TVirtualStreamerInfo *GetInfo()
   {
      Error("GetInfo", "useless");
      return 0;
   }

   virtual TObject   *ReadObject(const TClass * /*cl*/)
   {
      Error("ReadObject", "useless");
      return 0;
   }

   virtual UShort_t   GetPidOffset() const
   {
      Error("GetPidOffset", "useless");
      return 0;
   }
   virtual void       SetPidOffset(UShort_t /*offset*/)
   {
      Error("SetPidOffset", "useless");
   }
   virtual Int_t      GetBufferDisplacement() const
   {
      Error("GetBufferDisplacement", "useless");
      return 0;
   }
   virtual void       SetBufferDisplacement()
   {
      Error("SetBufferDisplacement", "useless");
   }
   virtual void       SetBufferDisplacement(Int_t /*skipped*/)
   {
      Error("SetBufferDisplacement", "useless");
   }

   virtual   TProcessID *GetLastProcessID(TRefTable * /*reftable*/) const
   {
      Error("GetLastProcessID", "useless");
      return 0;
   }
   virtual   UInt_t      GetTRefExecId()
   {
      Error("GetTRefExecId", "useless");
      return 0;
   }
   virtual   TProcessID *ReadProcessID(UShort_t /*pidf*/)
   {
      Error("ReadProcessID", "useless");
      return 0;
   }
   virtual   UShort_t    WriteProcessID(TProcessID * /*pid*/)
   {
      Error("WriteProcessID", "useless");
      return 0;
   }

   // Utilities for TStreamerInfo
   virtual   void     ForceWriteInfo(TVirtualStreamerInfo * /*info*/, Bool_t /*force*/)
   {
      Error("ForceWriteInfo", "useless");
   }
   virtual   void     ForceWriteInfoClones(TClonesArray * /*a*/)
   {
      Error("ForceWriteInfoClones", "useless");
   }
   virtual   Int_t    ReadClones(TClonesArray * /*a*/, Int_t /*nobjects*/, Version_t /*objvers*/)
   {
      Error("ReadClones", "useless");
      return 0;
   }

   // Utilities for TClass
   virtual   Int_t    ReadClassEmulated(const TClass * /*cl*/, void * /*object*/, const TClass * /*onfile_class*/ = 0)
   {
      Error("ReadClassEmulated", "useless");
      return 0;
   }
   virtual   Int_t    ReadClassBuffer(const TClass * /*cl*/, void * /*pointer*/, const TClass * /*onfile_class*/ = 0)
   {
      Error("ReadClassBuffer", "useless");
      return 0;
   }
   virtual   Int_t    ReadClassBuffer(const TClass * /*cl*/, void * /*pointer*/, Int_t /*version*/, UInt_t /*start*/, UInt_t /*count*/, const TClass * /*onfile_class*/ = 0)
   {
      Error("ReadClassBuffer", "useless");
      return 0;
   }

   // end of redefined virtual functions

   static    void     SetFloatFormat(const char *fmt = "%e");
   static const char *GetFloatFormat();


protected:
   // redefined protected virtual functions

   virtual void     WriteObjectClass(const void *actualObjStart, const TClass *actualClass);

   // end redefined protected virtual functions

   TString          JsonWriteAny(const void *obj, const TClass *cl);

   TString          JsonWriteMember(const void *ptr, TDataMember *member, TClass *memberClass);


   TJSONStackObj   *PushStack(Int_t inclevel = 0);
   TJSONStackObj   *PopStack();
   TJSONStackObj   *Stack(Int_t depth = 0);

   void             WorkWithClass(TStreamerInfo *info, const TClass *cl = 0);
   void             WorkWithElement(TStreamerElement *elem, Int_t number);

   void             PerformPostProcessing(TJSONStackObj *stack, const TStreamerElement *elem = 0);

   void              JsonWriteBasic(Char_t value);
   void              JsonWriteBasic(Short_t value);
   void              JsonWriteBasic(Int_t value);
   void              JsonWriteBasic(Long_t value);
   void              JsonWriteBasic(Long64_t value);
   void              JsonWriteBasic(Float_t value);
   void              JsonWriteBasic(Double_t value);
   void              JsonWriteBasic(Bool_t value);
   void              JsonWriteBasic(UChar_t value);
   void              JsonWriteBasic(UShort_t value);
   void              JsonWriteBasic(UInt_t value);
   void              JsonWriteBasic(ULong_t value);
   void              JsonWriteBasic(ULong64_t value);

   void              JsonWriteObject(const void *obj, const TClass *objClass);

   void              JsonStreamCollection(TCollection *obj, const TClass *objClass);

   void              JsonStartElement();

   void              AppendOutput(const char *line0, const char *line1 = 0);

   TString                   fOutBuffer;    //!  output buffer for json code
   TString                   fValue;        //!  buffer for current value
   std::map<const void *, unsigned>  fJsonrMap;   //!  map of recorded objects, used in JsonR to restore references
   unsigned                  fJsonrCnt;     //!  counter for all objects and arrays
   TObjArray                 fStack;        //!  stack of streamer infos
   Bool_t                    fExpectedChain; //!   flag to resolve situation when several elements of same basic type stored as FastArray
   Int_t                     fCompact;       //!  0 - no any compression, 1 - no spaces in the begin, 2 - no new lines, 3 - no spaces at all
   TString                   fSemicolon;     //!  depending from compression level, " : " or ":"
   TString                   fArraySepar;    //!  depending from compression level, ", " or ","

   static const char *fgFloatFmt;          //!  printf argument for floats and doubles, either "%f" or "%e" or "%10f" and so on

   ClassDef(TBufferJSON, 1) //a specialized TBuffer to only write objects into JSON format
};

#endif


 TBufferJSON.h:1
 TBufferJSON.h:2
 TBufferJSON.h:3
 TBufferJSON.h:4
 TBufferJSON.h:5
 TBufferJSON.h:6
 TBufferJSON.h:7
 TBufferJSON.h:8
 TBufferJSON.h:9
 TBufferJSON.h:10
 TBufferJSON.h:11
 TBufferJSON.h:12
 TBufferJSON.h:13
 TBufferJSON.h:14
 TBufferJSON.h:15
 TBufferJSON.h:16
 TBufferJSON.h:17
 TBufferJSON.h:18
 TBufferJSON.h:19
 TBufferJSON.h:20
 TBufferJSON.h:21
 TBufferJSON.h:22
 TBufferJSON.h:23
 TBufferJSON.h:24
 TBufferJSON.h:25
 TBufferJSON.h:26
 TBufferJSON.h:27
 TBufferJSON.h:28
 TBufferJSON.h:29
 TBufferJSON.h:30
 TBufferJSON.h:31
 TBufferJSON.h:32
 TBufferJSON.h:33
 TBufferJSON.h:34
 TBufferJSON.h:35
 TBufferJSON.h:36
 TBufferJSON.h:37
 TBufferJSON.h:38
 TBufferJSON.h:39
 TBufferJSON.h:40
 TBufferJSON.h:41
 TBufferJSON.h:42
 TBufferJSON.h:43
 TBufferJSON.h:44
 TBufferJSON.h:45
 TBufferJSON.h:46
 TBufferJSON.h:47
 TBufferJSON.h:48
 TBufferJSON.h:49
 TBufferJSON.h:50
 TBufferJSON.h:51
 TBufferJSON.h:52
 TBufferJSON.h:53
 TBufferJSON.h:54
 TBufferJSON.h:55
 TBufferJSON.h:56
 TBufferJSON.h:57
 TBufferJSON.h:58
 TBufferJSON.h:59
 TBufferJSON.h:60
 TBufferJSON.h:61
 TBufferJSON.h:62
 TBufferJSON.h:63
 TBufferJSON.h:64
 TBufferJSON.h:65
 TBufferJSON.h:66
 TBufferJSON.h:67
 TBufferJSON.h:68
 TBufferJSON.h:69
 TBufferJSON.h:70
 TBufferJSON.h:71
 TBufferJSON.h:72
 TBufferJSON.h:73
 TBufferJSON.h:74
 TBufferJSON.h:75
 TBufferJSON.h:76
 TBufferJSON.h:77
 TBufferJSON.h:78
 TBufferJSON.h:79
 TBufferJSON.h:80
 TBufferJSON.h:81
 TBufferJSON.h:82
 TBufferJSON.h:83
 TBufferJSON.h:84
 TBufferJSON.h:85
 TBufferJSON.h:86
 TBufferJSON.h:87
 TBufferJSON.h:88
 TBufferJSON.h:89
 TBufferJSON.h:90
 TBufferJSON.h:91
 TBufferJSON.h:92
 TBufferJSON.h:93
 TBufferJSON.h:94
 TBufferJSON.h:95
 TBufferJSON.h:96
 TBufferJSON.h:97
 TBufferJSON.h:98
 TBufferJSON.h:99
 TBufferJSON.h:100
 TBufferJSON.h:101
 TBufferJSON.h:102
 TBufferJSON.h:103
 TBufferJSON.h:104
 TBufferJSON.h:105
 TBufferJSON.h:106
 TBufferJSON.h:107
 TBufferJSON.h:108
 TBufferJSON.h:109
 TBufferJSON.h:110
 TBufferJSON.h:111
 TBufferJSON.h:112
 TBufferJSON.h:113
 TBufferJSON.h:114
 TBufferJSON.h:115
 TBufferJSON.h:116
 TBufferJSON.h:117
 TBufferJSON.h:118
 TBufferJSON.h:119
 TBufferJSON.h:120
 TBufferJSON.h:121
 TBufferJSON.h:122
 TBufferJSON.h:123
 TBufferJSON.h:124
 TBufferJSON.h:125
 TBufferJSON.h:126
 TBufferJSON.h:127
 TBufferJSON.h:128
 TBufferJSON.h:129
 TBufferJSON.h:130
 TBufferJSON.h:131
 TBufferJSON.h:132
 TBufferJSON.h:133
 TBufferJSON.h:134
 TBufferJSON.h:135
 TBufferJSON.h:136
 TBufferJSON.h:137
 TBufferJSON.h:138
 TBufferJSON.h:139
 TBufferJSON.h:140
 TBufferJSON.h:141
 TBufferJSON.h:142
 TBufferJSON.h:143
 TBufferJSON.h:144
 TBufferJSON.h:145
 TBufferJSON.h:146
 TBufferJSON.h:147
 TBufferJSON.h:148
 TBufferJSON.h:149
 TBufferJSON.h:150
 TBufferJSON.h:151
 TBufferJSON.h:152
 TBufferJSON.h:153
 TBufferJSON.h:154
 TBufferJSON.h:155
 TBufferJSON.h:156
 TBufferJSON.h:157
 TBufferJSON.h:158
 TBufferJSON.h:159
 TBufferJSON.h:160
 TBufferJSON.h:161
 TBufferJSON.h:162
 TBufferJSON.h:163
 TBufferJSON.h:164
 TBufferJSON.h:165
 TBufferJSON.h:166
 TBufferJSON.h:167
 TBufferJSON.h:168
 TBufferJSON.h:169
 TBufferJSON.h:170
 TBufferJSON.h:171
 TBufferJSON.h:172
 TBufferJSON.h:173
 TBufferJSON.h:174
 TBufferJSON.h:175
 TBufferJSON.h:176
 TBufferJSON.h:177
 TBufferJSON.h:178
 TBufferJSON.h:179
 TBufferJSON.h:180
 TBufferJSON.h:181
 TBufferJSON.h:182
 TBufferJSON.h:183
 TBufferJSON.h:184
 TBufferJSON.h:185
 TBufferJSON.h:186
 TBufferJSON.h:187
 TBufferJSON.h:188
 TBufferJSON.h:189
 TBufferJSON.h:190
 TBufferJSON.h:191
 TBufferJSON.h:192
 TBufferJSON.h:193
 TBufferJSON.h:194
 TBufferJSON.h:195
 TBufferJSON.h:196
 TBufferJSON.h:197
 TBufferJSON.h:198
 TBufferJSON.h:199
 TBufferJSON.h:200
 TBufferJSON.h:201
 TBufferJSON.h:202
 TBufferJSON.h:203
 TBufferJSON.h:204
 TBufferJSON.h:205
 TBufferJSON.h:206
 TBufferJSON.h:207
 TBufferJSON.h:208
 TBufferJSON.h:209
 TBufferJSON.h:210
 TBufferJSON.h:211
 TBufferJSON.h:212
 TBufferJSON.h:213
 TBufferJSON.h:214
 TBufferJSON.h:215
 TBufferJSON.h:216
 TBufferJSON.h:217
 TBufferJSON.h:218
 TBufferJSON.h:219
 TBufferJSON.h:220
 TBufferJSON.h:221
 TBufferJSON.h:222
 TBufferJSON.h:223
 TBufferJSON.h:224
 TBufferJSON.h:225
 TBufferJSON.h:226
 TBufferJSON.h:227
 TBufferJSON.h:228
 TBufferJSON.h:229
 TBufferJSON.h:230
 TBufferJSON.h:231
 TBufferJSON.h:232
 TBufferJSON.h:233
 TBufferJSON.h:234
 TBufferJSON.h:235
 TBufferJSON.h:236
 TBufferJSON.h:237
 TBufferJSON.h:238
 TBufferJSON.h:239
 TBufferJSON.h:240
 TBufferJSON.h:241
 TBufferJSON.h:242
 TBufferJSON.h:243
 TBufferJSON.h:244
 TBufferJSON.h:245
 TBufferJSON.h:246
 TBufferJSON.h:247
 TBufferJSON.h:248
 TBufferJSON.h:249
 TBufferJSON.h:250
 TBufferJSON.h:251
 TBufferJSON.h:252
 TBufferJSON.h:253
 TBufferJSON.h:254
 TBufferJSON.h:255
 TBufferJSON.h:256
 TBufferJSON.h:257
 TBufferJSON.h:258
 TBufferJSON.h:259
 TBufferJSON.h:260
 TBufferJSON.h:261
 TBufferJSON.h:262
 TBufferJSON.h:263
 TBufferJSON.h:264
 TBufferJSON.h:265
 TBufferJSON.h:266
 TBufferJSON.h:267
 TBufferJSON.h:268
 TBufferJSON.h:269
 TBufferJSON.h:270
 TBufferJSON.h:271
 TBufferJSON.h:272
 TBufferJSON.h:273
 TBufferJSON.h:274
 TBufferJSON.h:275
 TBufferJSON.h:276
 TBufferJSON.h:277
 TBufferJSON.h:278
 TBufferJSON.h:279
 TBufferJSON.h:280
 TBufferJSON.h:281
 TBufferJSON.h:282
 TBufferJSON.h:283
 TBufferJSON.h:284
 TBufferJSON.h:285
 TBufferJSON.h:286
 TBufferJSON.h:287
 TBufferJSON.h:288
 TBufferJSON.h:289
 TBufferJSON.h:290
 TBufferJSON.h:291
 TBufferJSON.h:292
 TBufferJSON.h:293
 TBufferJSON.h:294
 TBufferJSON.h:295
 TBufferJSON.h:296
 TBufferJSON.h:297
 TBufferJSON.h:298
 TBufferJSON.h:299
 TBufferJSON.h:300
 TBufferJSON.h:301
 TBufferJSON.h:302
 TBufferJSON.h:303
 TBufferJSON.h:304
 TBufferJSON.h:305
 TBufferJSON.h:306
 TBufferJSON.h:307
 TBufferJSON.h:308
 TBufferJSON.h:309
 TBufferJSON.h:310
 TBufferJSON.h:311
 TBufferJSON.h:312
 TBufferJSON.h:313
 TBufferJSON.h:314
 TBufferJSON.h:315
 TBufferJSON.h:316
 TBufferJSON.h:317
 TBufferJSON.h:318
 TBufferJSON.h:319
 TBufferJSON.h:320
 TBufferJSON.h:321
 TBufferJSON.h:322
 TBufferJSON.h:323
 TBufferJSON.h:324
 TBufferJSON.h:325
 TBufferJSON.h:326
 TBufferJSON.h:327
 TBufferJSON.h:328
 TBufferJSON.h:329
 TBufferJSON.h:330
 TBufferJSON.h:331
 TBufferJSON.h:332
 TBufferJSON.h:333
 TBufferJSON.h:334
 TBufferJSON.h:335
 TBufferJSON.h:336
 TBufferJSON.h:337
 TBufferJSON.h:338
 TBufferJSON.h:339
 TBufferJSON.h:340
 TBufferJSON.h:341
 TBufferJSON.h:342
 TBufferJSON.h:343
 TBufferJSON.h:344
 TBufferJSON.h:345
 TBufferJSON.h:346
 TBufferJSON.h:347
 TBufferJSON.h:348
 TBufferJSON.h:349
 TBufferJSON.h:350
 TBufferJSON.h:351
 TBufferJSON.h:352
 TBufferJSON.h:353
 TBufferJSON.h:354
 TBufferJSON.h:355
 TBufferJSON.h:356
 TBufferJSON.h:357
 TBufferJSON.h:358
 TBufferJSON.h:359
 TBufferJSON.h:360
 TBufferJSON.h:361
 TBufferJSON.h:362
 TBufferJSON.h:363
 TBufferJSON.h:364
 TBufferJSON.h:365
 TBufferJSON.h:366
 TBufferJSON.h:367
 TBufferJSON.h:368
 TBufferJSON.h:369
 TBufferJSON.h:370
 TBufferJSON.h:371
 TBufferJSON.h:372
 TBufferJSON.h:373
 TBufferJSON.h:374
 TBufferJSON.h:375
 TBufferJSON.h:376
 TBufferJSON.h:377
 TBufferJSON.h:378
 TBufferJSON.h:379
 TBufferJSON.h:380
 TBufferJSON.h:381
 TBufferJSON.h:382
 TBufferJSON.h:383
 TBufferJSON.h:384
 TBufferJSON.h:385
 TBufferJSON.h:386
 TBufferJSON.h:387
 TBufferJSON.h:388
 TBufferJSON.h:389
 TBufferJSON.h:390
 TBufferJSON.h:391
 TBufferJSON.h:392
 TBufferJSON.h:393
 TBufferJSON.h:394
 TBufferJSON.h:395
 TBufferJSON.h:396
 TBufferJSON.h:397
 TBufferJSON.h:398
 TBufferJSON.h:399
 TBufferJSON.h:400
 TBufferJSON.h:401
 TBufferJSON.h:402
 TBufferJSON.h:403
 TBufferJSON.h:404
 TBufferJSON.h:405
 TBufferJSON.h:406
 TBufferJSON.h:407
 TBufferJSON.h:408
 TBufferJSON.h:409
 TBufferJSON.h:410
 TBufferJSON.h:411
 TBufferJSON.h:412
 TBufferJSON.h:413
 TBufferJSON.h:414
 TBufferJSON.h:415
 TBufferJSON.h:416
 TBufferJSON.h:417
 TBufferJSON.h:418
 TBufferJSON.h:419
 TBufferJSON.h:420
 TBufferJSON.h:421
 TBufferJSON.h:422
 TBufferJSON.h:423
 TBufferJSON.h:424
 TBufferJSON.h:425
 TBufferJSON.h:426
 TBufferJSON.h:427
 TBufferJSON.h:428
 TBufferJSON.h:429
 TBufferJSON.h:430
 TBufferJSON.h:431
 TBufferJSON.h:432
 TBufferJSON.h:433
 TBufferJSON.h:434
 TBufferJSON.h:435
 TBufferJSON.h:436
 TBufferJSON.h:437
 TBufferJSON.h:438
 TBufferJSON.h:439
 TBufferJSON.h:440
 TBufferJSON.h:441
 TBufferJSON.h:442
 TBufferJSON.h:443
 TBufferJSON.h:444
 TBufferJSON.h:445
 TBufferJSON.h:446
 TBufferJSON.h:447
 TBufferJSON.h:448
 TBufferJSON.h:449
 TBufferJSON.h:450
 TBufferJSON.h:451
 TBufferJSON.h:452
 TBufferJSON.h:453
 TBufferJSON.h:454
 TBufferJSON.h:455
 TBufferJSON.h:456
 TBufferJSON.h:457
 TBufferJSON.h:458
 TBufferJSON.h:459
 TBufferJSON.h:460
 TBufferJSON.h:461
 TBufferJSON.h:462
 TBufferJSON.h:463
 TBufferJSON.h:464
 TBufferJSON.h:465
 TBufferJSON.h:466
 TBufferJSON.h:467
 TBufferJSON.h:468
 TBufferJSON.h:469
 TBufferJSON.h:470
 TBufferJSON.h:471
 TBufferJSON.h:472
 TBufferJSON.h:473
 TBufferJSON.h:474
 TBufferJSON.h:475
 TBufferJSON.h:476
 TBufferJSON.h:477
 TBufferJSON.h:478
 TBufferJSON.h:479
 TBufferJSON.h:480
 TBufferJSON.h:481
 TBufferJSON.h:482
 TBufferJSON.h:483
 TBufferJSON.h:484
 TBufferJSON.h:485
 TBufferJSON.h:486
 TBufferJSON.h:487
 TBufferJSON.h:488
 TBufferJSON.h:489
 TBufferJSON.h:490
 TBufferJSON.h:491
 TBufferJSON.h:492
 TBufferJSON.h:493
 TBufferJSON.h:494
 TBufferJSON.h:495
 TBufferJSON.h:496
 TBufferJSON.h:497
 TBufferJSON.h:498
 TBufferJSON.h:499
 TBufferJSON.h:500
 TBufferJSON.h:501
 TBufferJSON.h:502
 TBufferJSON.h:503
 TBufferJSON.h:504
 TBufferJSON.h:505
 TBufferJSON.h:506
 TBufferJSON.h:507
 TBufferJSON.h:508
 TBufferJSON.h:509
 TBufferJSON.h:510
 TBufferJSON.h:511
 TBufferJSON.h:512
 TBufferJSON.h:513
 TBufferJSON.h:514
 TBufferJSON.h:515
 TBufferJSON.h:516
 TBufferJSON.h:517
 TBufferJSON.h:518
 TBufferJSON.h:519
 TBufferJSON.h:520
 TBufferJSON.h:521
 TBufferJSON.h:522
 TBufferJSON.h:523
 TBufferJSON.h:524
 TBufferJSON.h:525
 TBufferJSON.h:526
 TBufferJSON.h:527
 TBufferJSON.h:528
 TBufferJSON.h:529
 TBufferJSON.h:530
 TBufferJSON.h:531
 TBufferJSON.h:532
 TBufferJSON.h:533
 TBufferJSON.h:534
 TBufferJSON.h:535
 TBufferJSON.h:536
 TBufferJSON.h:537
 TBufferJSON.h:538
 TBufferJSON.h:539
 TBufferJSON.h:540
 TBufferJSON.h:541
 TBufferJSON.h:542