57459306 |
1 | #ifndef ALI_SIMPLE_VALUE_H |
2 | #define ALI_SIMPLE_VALUE_H |
3 | |
4 | /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * |
5 | * See cxx source for full Copyright notice */ |
6 | |
7 | /* $Id$ */ |
8 | |
9 | // |
10 | // This class is a simple wrapper of |
11 | // all primitive types used in PVSS SCADA system. |
0bd5d12b |
12 | // bool, char, byte, int ,uint, float, and arrays of these values |
57459306 |
13 | // |
14 | |
15 | #include <TObject.h> |
16 | #include <TString.h> |
17 | |
18 | class AliSimpleValue: public TObject { |
19 | public: |
20 | enum Type { |
21 | kInvalid = 0, |
22 | kBool = 1, |
23 | kByte = 2, |
24 | kInt = 3, |
25 | kUInt = 4, |
26 | kFloat = 5, |
27 | kDynBool = 11, |
28 | kDynByte = 12, |
29 | kDynInt = 13, |
30 | kDynUInt = 14, |
31 | kDynFloat = 15 |
32 | }; |
33 | |
34 | |
35 | AliSimpleValue(); |
36 | |
37 | AliSimpleValue(const AliSimpleValue& other); |
38 | |
39 | AliSimpleValue(Type type, Int_t size = 0); |
40 | |
41 | AliSimpleValue(Bool_t val); |
42 | |
43 | AliSimpleValue(Char_t val); |
44 | |
45 | AliSimpleValue(Int_t val); |
46 | |
47 | AliSimpleValue(UInt_t val); |
48 | |
49 | AliSimpleValue(Float_t val); |
50 | |
51 | AliSimpleValue(Int_t size, const Bool_t* vals); |
52 | |
53 | AliSimpleValue(Int_t size, const Char_t* vals); |
54 | |
55 | AliSimpleValue(Int_t size, const Int_t* vals); |
56 | |
57 | AliSimpleValue(Int_t size, const UInt_t* vals); |
58 | |
59 | AliSimpleValue(Int_t size, const Float_t* vals); |
60 | |
61 | ~AliSimpleValue(); |
62 | |
63 | |
64 | AliSimpleValue& operator=(const AliSimpleValue& other); |
65 | |
66 | Bool_t operator==(const AliSimpleValue& other) const; |
67 | |
68 | void SetBool(Bool_t val); |
69 | |
70 | void SetByte(Char_t val); |
71 | |
72 | void SetInt(Int_t val); |
73 | |
74 | void SetUInt(UInt_t val); |
75 | |
76 | void SetFloat(Float_t val); |
77 | |
78 | |
79 | Bool_t GetBool() const; |
80 | |
81 | Char_t GetByte() const; |
82 | |
83 | Int_t GetInt() const; |
84 | |
85 | UInt_t GetUInt() const; |
86 | |
87 | Float_t GetFloat() const; |
88 | |
89 | |
90 | void SetDynBool(Int_t n, Bool_t val); |
91 | |
92 | void SetDynByte(Int_t n, Char_t val); |
93 | |
94 | void SetDynInt(Int_t n, Int_t val); |
95 | |
96 | void SetDynUInt(Int_t n, UInt_t val); |
97 | |
98 | void SetDynFloat(Int_t n, Float_t val); |
99 | |
100 | |
101 | Bool_t GetDynBool(Int_t n) const; |
102 | |
103 | Char_t GetDynByte(Int_t n) const; |
104 | |
105 | Int_t GetDynInt(Int_t n) const; |
106 | |
107 | UInt_t GetDynUInt(Int_t n) const; |
108 | |
109 | Float_t GetDynFloat(Int_t n) const; |
110 | |
111 | |
112 | Type GetType() const {return fType;}; |
113 | |
114 | Int_t GetSize() const; |
115 | |
116 | Int_t GetDynamicSize() const; |
117 | |
118 | TString ToString() const; |
119 | |
120 | |
121 | static Bool_t IsDynamic(Type type); |
122 | |
123 | static Int_t GetPrimitiveSize(Type type); |
124 | |
125 | static const char* GetTypeString(Type type); |
126 | |
127 | private: |
128 | |
0bd5d12b |
129 | class AliBoolHolder: public TObject { |
130 | |
131 | friend class AliSimpleValue; |
132 | |
57459306 |
133 | public: |
0bd5d12b |
134 | AliBoolHolder() {} |
135 | virtual ~AliBoolHolder() {} |
57459306 |
136 | |
0bd5d12b |
137 | AliBoolHolder(Bool_t val):fValue(val) {} |
57459306 |
138 | |
139 | virtual TObject* Clone(const char* name) const; |
140 | |
141 | virtual Bool_t IsEqual(const TObject* object) const; |
142 | |
0bd5d12b |
143 | private: |
144 | Bool_t fValue; // The value |
145 | |
146 | ClassDef(AliBoolHolder, 1); |
57459306 |
147 | }; |
148 | |
0bd5d12b |
149 | class AliByteHolder: public TObject { |
150 | |
151 | friend class AliSimpleValue; |
152 | |
57459306 |
153 | public: |
57459306 |
154 | |
0bd5d12b |
155 | AliByteHolder() {}; |
156 | virtual ~AliByteHolder() {} |
57459306 |
157 | |
0bd5d12b |
158 | AliByteHolder(Char_t val):fValue(val) {} |
57459306 |
159 | |
160 | virtual TObject* Clone(const char* name) const; |
161 | |
162 | virtual Bool_t IsEqual(const TObject* object) const; |
163 | |
0bd5d12b |
164 | private: |
165 | Char_t fValue; // The value |
166 | |
167 | ClassDef(AliByteHolder, 1); |
57459306 |
168 | }; |
169 | |
0bd5d12b |
170 | class AliIntHolder: public TObject { |
171 | |
172 | friend class AliSimpleValue; |
173 | |
57459306 |
174 | public: |
57459306 |
175 | |
0bd5d12b |
176 | AliIntHolder() {} |
177 | virtual ~AliIntHolder() {} |
57459306 |
178 | |
0bd5d12b |
179 | AliIntHolder(Int_t val):fValue(val) {} |
57459306 |
180 | |
181 | virtual TObject* Clone(const char* name) const; |
182 | |
183 | virtual Bool_t IsEqual(const TObject* object) const; |
184 | |
0bd5d12b |
185 | |
186 | private: |
187 | Int_t fValue; // The value |
188 | |
189 | ClassDef(AliIntHolder, 1); |
57459306 |
190 | }; |
191 | |
0bd5d12b |
192 | class AliUIntHolder: public TObject { |
193 | |
194 | friend class AliSimpleValue; |
195 | |
57459306 |
196 | public: |
57459306 |
197 | |
0bd5d12b |
198 | AliUIntHolder() {} |
199 | virtual ~AliUIntHolder() {} |
57459306 |
200 | |
0bd5d12b |
201 | AliUIntHolder(UInt_t val):fValue(val) {} |
57459306 |
202 | |
203 | virtual TObject* Clone(const char* name) const; |
204 | |
205 | virtual Bool_t IsEqual(const TObject* object) const; |
206 | |
0bd5d12b |
207 | |
208 | private: |
209 | UInt_t fValue; // The value |
210 | |
211 | ClassDef(AliUIntHolder, 1); |
57459306 |
212 | }; |
213 | |
0bd5d12b |
214 | class AliFloatHolder: public TObject { |
215 | |
216 | friend class AliSimpleValue; |
217 | |
57459306 |
218 | public: |
57459306 |
219 | |
0bd5d12b |
220 | AliFloatHolder() {} |
221 | virtual ~AliFloatHolder() {} |
57459306 |
222 | |
0bd5d12b |
223 | AliFloatHolder(Float_t val):fValue(val) {} |
57459306 |
224 | |
225 | virtual TObject* Clone(const char* name) const; |
226 | |
227 | virtual Bool_t IsEqual(const TObject* object) const; |
228 | |
0bd5d12b |
229 | private: |
230 | Float_t fValue; // The value |
231 | |
232 | ClassDef(AliFloatHolder, 1); |
57459306 |
233 | }; |
234 | |
0bd5d12b |
235 | class AliDynHolder: public TObject { |
236 | |
237 | friend class AliSimpleValue; |
238 | |
57459306 |
239 | public: |
57459306 |
240 | |
0bd5d12b |
241 | AliDynHolder(): fSize(0) {} |
242 | AliDynHolder(Int_t size): fSize(size){} |
57459306 |
243 | |
0bd5d12b |
244 | Int_t fSize; // The size |
245 | ClassDef(AliDynHolder, 0); |
57459306 |
246 | }; |
247 | |
0bd5d12b |
248 | class AliDynBoolHolder: public AliDynHolder { |
249 | |
250 | friend class AliSimpleValue; |
251 | |
57459306 |
252 | public: |
57459306 |
253 | |
0bd5d12b |
254 | AliDynBoolHolder(): fValues(NULL) {} |
57459306 |
255 | |
0bd5d12b |
256 | AliDynBoolHolder(Int_t size, const Bool_t* buf = NULL): |
257 | AliDynHolder(size) { |
57459306 |
258 | fValues = new Bool_t[size]; |
259 | if (buf) memcpy(fValues, buf, size * sizeof(Bool_t)); |
260 | } |
261 | |
0bd5d12b |
262 | virtual ~AliDynBoolHolder() {if (fValues) delete[] fValues;} |
57459306 |
263 | |
264 | virtual TObject* Clone(const char* name) const; |
265 | |
266 | virtual Bool_t IsEqual(const TObject* object) const; |
267 | |
0bd5d12b |
268 | |
269 | private: |
270 | AliDynBoolHolder(const AliDynBoolHolder& /*other*/): AliDynHolder() { } |
271 | AliDynBoolHolder& operator= (const AliDynBoolHolder& /*other*/) {return *this;} |
272 | Bool_t* fValues; //[fSize] The value |
273 | |
274 | ClassDef(AliDynBoolHolder, 1); |
57459306 |
275 | }; |
276 | |
0bd5d12b |
277 | class AliDynByteHolder: public AliDynHolder { |
278 | |
279 | friend class AliSimpleValue; |
280 | |
57459306 |
281 | public: |
57459306 |
282 | |
0bd5d12b |
283 | AliDynByteHolder(): fValues(NULL) {} |
57459306 |
284 | |
0bd5d12b |
285 | AliDynByteHolder(Int_t size, const Char_t* buf = NULL): |
286 | AliDynHolder(size) { |
57459306 |
287 | fValues = new Char_t[size]; |
288 | if (buf) memcpy(fValues, buf, size * sizeof(Char_t)); |
289 | } |
290 | |
0bd5d12b |
291 | virtual ~AliDynByteHolder() {if (fValues) delete[] fValues;} |
57459306 |
292 | |
293 | virtual TObject* Clone(const char* name) const; |
294 | |
295 | virtual Bool_t IsEqual(const TObject* object) const; |
296 | |
0bd5d12b |
297 | |
298 | private: |
299 | AliDynByteHolder(const AliDynByteHolder& /*other*/): AliDynHolder() { } |
300 | AliDynByteHolder& operator= (const AliDynByteHolder& /*other*/) {return *this;} |
301 | Char_t* fValues; //[fSize] The value |
302 | |
303 | ClassDef(AliDynByteHolder, 1); |
57459306 |
304 | }; |
305 | |
0bd5d12b |
306 | class AliDynIntHolder: public AliDynHolder { |
307 | |
308 | friend class AliSimpleValue; |
309 | |
57459306 |
310 | public: |
57459306 |
311 | |
0bd5d12b |
312 | AliDynIntHolder(): fValues(NULL) {} |
57459306 |
313 | |
0bd5d12b |
314 | AliDynIntHolder(Int_t size, const Int_t* buf = NULL): |
315 | AliDynHolder(size) { |
57459306 |
316 | fValues = new Int_t[size]; |
317 | if (buf) memcpy(fValues, buf, size * sizeof(Int_t)); |
318 | } |
319 | |
0bd5d12b |
320 | virtual ~AliDynIntHolder() {if (fValues) delete[] fValues;} |
57459306 |
321 | |
322 | virtual TObject* Clone(const char* name) const; |
323 | |
324 | virtual Bool_t IsEqual(const TObject* object) const; |
325 | |
0bd5d12b |
326 | |
327 | private: |
328 | AliDynIntHolder(const AliDynIntHolder& /*other*/): AliDynHolder() { } |
329 | AliDynIntHolder& operator= (const AliDynIntHolder& /*other*/) {return *this;} |
330 | Int_t* fValues; //[fSize] The value |
331 | |
332 | ClassDef(AliDynIntHolder, 1); |
57459306 |
333 | }; |
334 | |
0bd5d12b |
335 | class AliDynUIntHolder: public AliDynHolder { |
336 | |
337 | friend class AliSimpleValue; |
338 | |
57459306 |
339 | public: |
57459306 |
340 | |
0bd5d12b |
341 | AliDynUIntHolder(): fValues(NULL) {} |
57459306 |
342 | |
0bd5d12b |
343 | AliDynUIntHolder(Int_t size, const UInt_t* buf = NULL): |
344 | AliDynHolder(size) { |
57459306 |
345 | fValues = new UInt_t[size]; |
346 | if (buf) memcpy(fValues, buf, size * sizeof(UInt_t)); |
347 | } |
348 | |
0bd5d12b |
349 | virtual ~AliDynUIntHolder() {if (fValues) delete[] fValues;} |
57459306 |
350 | |
351 | virtual TObject* Clone(const char* name) const; |
352 | |
353 | virtual Bool_t IsEqual(const TObject* object) const; |
354 | |
0bd5d12b |
355 | |
356 | private: |
357 | AliDynUIntHolder(const AliDynUIntHolder& /*other*/): AliDynHolder() { } |
358 | AliDynUIntHolder& operator= (const AliDynUIntHolder& /*other*/) {return *this;} |
359 | UInt_t* fValues; //[fSize] The value |
360 | |
361 | ClassDef(AliDynUIntHolder, 1); |
57459306 |
362 | }; |
363 | |
0bd5d12b |
364 | class AliDynFloatHolder: public AliDynHolder { |
365 | |
366 | friend class AliSimpleValue; |
367 | |
57459306 |
368 | public: |
57459306 |
369 | |
0bd5d12b |
370 | AliDynFloatHolder(): fValues(NULL) {} |
57459306 |
371 | |
0bd5d12b |
372 | AliDynFloatHolder(Int_t size, const Float_t* buf = NULL): |
373 | AliDynHolder(size) { |
57459306 |
374 | fValues = new Float_t[size]; |
375 | if (buf) memcpy(fValues, buf, size * sizeof(Float_t)); |
376 | } |
377 | |
0bd5d12b |
378 | virtual ~AliDynFloatHolder() {if (fValues) delete[] fValues;} |
57459306 |
379 | |
380 | virtual TObject* Clone(const char* name) const; |
381 | |
382 | virtual Bool_t IsEqual(const TObject* object) const; |
383 | |
0bd5d12b |
384 | |
385 | private: |
386 | AliDynFloatHolder(const AliDynFloatHolder& /*other*/): AliDynHolder() { } |
387 | AliDynFloatHolder& operator= (const AliDynFloatHolder& /*other*/) {return *this;} |
388 | Float_t* fValues; //[fSize] The value |
389 | |
390 | ClassDef(AliDynFloatHolder, 1); |
57459306 |
391 | }; |
392 | |
393 | |
0bd5d12b |
394 | TObject* fHolder; // Holder of the basic type value |
57459306 |
395 | |
0bd5d12b |
396 | Type fType; // Type of the basic type value |
57459306 |
397 | |
398 | |
399 | Bool_t TypeOk(Type type) const; |
400 | |
401 | Bool_t BoundsOk(Int_t n) const; |
402 | |
403 | |
404 | ClassDef(AliSimpleValue, 1); |
405 | }; |
406 | |
407 | #endif |