Containers definition
[u/mrichter/AliRoot.git] / CONTAINERS / AliDataType.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /*
17 $Log$
18 */
19 ///////////////////////////////////////////////////////////////////////////////
20 //                                                                           //
21 //  AliDataType                                                              //
22 //                                                                           //
23 // Defined to make unified interface to primitive types (in Root described by//
24 // TDataType) and TClass.                                                    //
25 //                                                                          //
26 ///////////////////////////////////////////////////////////////////////////////
27
28
29 #include "AliDataType.h"
30 #include "AliCTypes.h"
31
32 #include "TMath.h"
33 #include "TClass.h"
34 #include "TDataType.h"   
35
36 #include "TROOT.h"
37 #include "iostream.h"
38
39
40 ClassImp(AliDataType)
41
42
43
44 AliDataType::AliDataType(const char *name)
45 {
46   //
47   // AliData type constructor
48   fDataType = new TDataType(name);
49   if (fDataType->GetType()<0)  fDataType= (gROOT->GetType(name,kTRUE));
50   if ((fDataType) && (fDataType->GetType())){ 
51     fSize = fDataType->Size();
52     //    fType = (EDataType) fDataType->GetType();     
53     SetTitle(name);
54     SetName(name);
55     fgList.Add(this);
56   }
57 }
58
59
60 const char * AliDataType::GetClassName() 
61
62   //class name of the object   
63   return (fDataType) ? fDataType->GetName():0;
64
65   
66 void AliDataType::StreamBuffer(TBuffer& b, const void *object, UInt_t size)
67 {
68   //streamer for buffer of objects  
69   char * last = &((char*)object)[size*fSize];
70   char * pfirst = (char*)object;
71   char *p;
72   if (b.IsWriting()){
73     switch ((EDataType) fDataType->GetType()){
74     case kChar_t:
75       for (p= pfirst; p<last;p+=fSize) b<<*((Char_t*)p);
76       break;
77     case kShort_t:
78       for (p= pfirst; p<last;p+=fSize) b<<*((Short_t*)p);
79       break;
80     case kInt_t:
81       for (p= pfirst; p<last;p+=fSize) b<<*((Int_t*)p);
82     break;
83     case kLong_t:
84       for (p= pfirst; p<last;p+=fSize) b<<*((Long_t*)p);
85       break;
86     case kUChar_t:
87       for (p= pfirst; p<last;p+=fSize) b<<*((UChar_t*)p);
88       break;
89     case kUShort_t:
90       for (p= pfirst; p<last;p+=fSize) b<<*((UShort_t*)p);
91       break;
92     case kUInt_t:
93       for (p= pfirst; p<last;p+=fSize) b<<*((UInt_t*)p);
94       break;
95     case kFloat_t:
96       for (p= pfirst; p<last;p+=fSize) b<<*((Float_t*)p);
97       break;
98     case kDouble_t:
99       for (p= pfirst; p<last;p+=fSize) b<<*((Double_t*)p);
100       break;
101     default:
102       break;
103     }
104   }
105   else
106   switch ((EDataType) fDataType->GetType()){
107     case kChar_t:
108       for (p= pfirst; p<last;p+=fSize) b>>*((Char_t*)p);
109       break;
110     case kShort_t:
111       for (p= pfirst; p<last;p+=fSize) b>>*((Short_t*)p);
112       break;
113     case kInt_t:
114       for (p= pfirst; p<last;p+=fSize) b>>*((Int_t*)p);
115     break;
116     case kLong_t:
117       for (p= pfirst; p<last;p+=fSize) b>>*((Long_t*)p);
118       break;
119     case kUChar_t:
120       for (p= pfirst; p<last;p+=fSize) b>>*((UChar_t*)p);
121       break;
122     case kUShort_t:
123       for (p= pfirst; p<last;p+=fSize) b>>*((UShort_t*)p);
124       break;
125     case kUInt_t:
126       for (p= pfirst; p<last;p+=fSize) b>>*((UInt_t*)p);
127       break;
128     case kFloat_t:
129       for (p= pfirst; p<last;p+=fSize) b>>*((Float_t*)p);
130       break;
131     case kDouble_t:
132       for (p= pfirst; p<last;p+=fSize) b>>*((Double_t*)p);
133       break;
134     default:
135       break;
136     }
137   
138 }
139
140 void AliDataType::ObjectDump(void *p) 
141 {
142   //
143   // dump object information
144   // assume that object p has type described by AliDataTYPE
145   switch ((EDataType) fDataType->GetType()){
146   case kChar_t:
147     cout<<*((Char_t*)p)<<"\n";
148     break;
149   case kShort_t:
150     cout<<*((Short_t*)p)<<"\n";
151     break;
152   case kInt_t:
153     cout<<*((Int_t*)p)<<"\n";
154     break;
155   case kLong_t:
156     cout<<*((Long_t*)p)<<"\n";
157     break;
158   case kUChar_t:
159     cout<<*((UChar_t*)p)<<"\n";
160     break;
161   case kUShort_t:
162     cout<<*((UShort_t*)p)<<"\n";
163     break;
164   case kUInt_t:
165     cout<<*((UInt_t*)p)<<"\n";
166     break;
167   case kFloat_t:
168     cout<<*((Float_t*)p)<<"\n";
169     break;
170   case kDouble_t:
171     cout<<*((Double_t*)p)<<"\n";
172     break;
173   default:
174     break;
175   }
176 }