Step size region by region.
[u/mrichter/AliRoot.git] / CONTAINERS / AliCTypes.h
1 #ifndef ALI_CTypes
2 #define ALI_CTypes
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 //////////////////////////////////////////////////////////////////////////
9 //                                                                      //
10 // Ali C types                                                          //
11 //                     
12 // MI                                                                   //
13 // Macros for defining Containers                                       //
14 //                                                                      //
15 //////////////////////////////////////////////////////////////////////////
16 #include "TMemberInspector.h"
17 #include "TClass.h"
18 #include "TStorage.h"
19
20 class TDumpMembers : public TMemberInspector {
21 public:
22    TDumpMembers() { }
23    void Inspect(TClass *cl, const char *parent, const char *name, const void *addr);
24 };
25
26 //////////////////////////////////////////////////////////////////////////
27
28
29
30 // Removed:
31 // friend operator>>
32 // _ClassInit_
33 #define LClassDef(name,id) \
34 private: \
35    static TClass *fgIsA; \
36 public: \
37    static TClass *Class(); \
38    static const char *Class_Name(); \
39    static Version_t Class_Version() { return id; } \
40    static void Dictionary(); \
41    TClass *IsA() const { return name::Class(); } \
42    void ShowMembers(TMemberInspector &insp, char *parent); \
43    void Streamer(TBuffer &b); \
44    static const char *DeclFileName() { return __FILE__; } \
45    static int DeclFileLine() { return __LINE__; } \
46    static const char *ImplFileName(); \
47    static int ImplFileLine();  \
48    void  Dump();
49
50 //static int ImplFileLine(){return 0;}  
51
52 #define LClassImp(name)  \
53   void name::Dump() { \
54      char parent[256]; \
55      parent[0] = 0;  \
56      TDumpMembers dm;  \
57      ShowMembers(dm, parent); \
58   } \
59   ClassImp(name)
60
61
62 /*
63 #define ClassArrayDef(name) \
64 private: \
65   static AliArrayVT * fgArrayInfo;  \
66 public: \
67   static name * Unchecked1DAt(const AliObjectArray & arr, UInt_t index)\
68     { return ((name*)arr.Unchecked1DAt(index));} \
69   static name * Unchecked2DAt(const AliObjectArray & arr, UInt_t index)  \
70     { return ((name*)arr.Unchecked2DAt(index));} \
71   static name * UncheckedAt(const AliObjectArray & arr, UInt_t index)  \
72     { return (name*)arr.UncheckedAt(index);}  \
73   static name * At(const AliObjectArray & arr, UInt_t index)  \
74     { return (arr.GetClassInfo()==fgArrayInfo) ? (name*)arr.At(index): 0;}  \
75   static name * CastAt(const AliObjectArray & arr, UInt_t index)  \
76     { return (name*) ((arr.GetClass())->DynamicCast(Class(), arr.At(index))) ;}  \
77   static AliArrayVT *  GetArrayInfo(); \
78
79
80
81 //This should be in automatic generated code
82 #define ClassArrayImp(name) \
83 AliArrayVT *  name::fgArrayInfo = 0; \
84 char *name ##__MakeBuffer(UInt_t size) { return (char*)new  name[size];} \
85 void  name ##__DeleteBuffer(void *p) {delete [] (name*)p;}  \
86 int   name ##__Cmp(char *p1, char * p2){return ((name*)p1)->Compare((name*)p2);}  \
87 void  name ##__StreamObject(TBuffer&   b, char * object){ ((name*)object)->Streamer(b);} \
88 void  name ##__StreamBuffer(TBuffer&   b, char * object, UInt_t size ); \
89 void  name ##__DumpObject(char *p) {return ((name*)p)->Dump();}  \
90 void  name ##__StreamBuffer(TBuffer&   b, char * object, UInt_t size ) \
91 { \
92   for (UInt_t i=0;i<size;i++) ((name*)object)[i].Streamer(b); \
93 } \
94 void name ##__DTORBuffer(void *p) { \
95   ((name*)p)->~name(); \
96 } \
97 void name ##__CTORBuffer(void *p) { \
98    new (p)name; \
99 } \
100 void name ##__DTORBuffer(void *p, const UInt_t size) { \
101   name * pp = (name*)p; \
102   name * pmax  = pp+size; \
103   while (pp<pmax) (pp++)->~name(); \
104 } \
105 void name ##__CTORBuffer(void *p, const UInt_t size) { \
106    name * pp = (name*)p; \
107    name * pmax  = pp+size; \
108   while (pp<pmax) new (pp++)name; \
109 } \
110 AliArrayVT *name::GetArrayInfo() \
111 {  \
112   if (!fgArrayInfo) {  \
113      fgArrayInfo = new AliArrayVT;    \
114      fgArrayInfo->cmp = &(name ##__Cmp); \
115      fgArrayInfo->delbuffer = &(name ##__DeleteBuffer); \
116      fgArrayInfo->mkbuffer = &(name ##__MakeBuffer);  \
117      fgArrayInfo->ctorbuffer = &(name ##__CTORBuffer); \
118      fgArrayInfo->dtorbuffer = &(name ##__DTORBuffer);  \
119      fgArrayInfo->stream  =  &(name ##__StreamObject); \
120      fgArrayInfo->streamb =  &(name ##__StreamBuffer); \
121      fgArrayInfo->dump =   &(name ##__DumpObject); \
122      fgArrayInfo->fClass = name::Class(); \
123      fgArrayInfo->fClassName = "name"; \
124      fgArrayInfo->fSize = sizeof(name); \
125   }  \
126   return fgArrayInfo; \
127
128 */
129
130
131 #endif  // ALI_CTypes