GammaWare  Head Version for release 0.9
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
DefaultKeyFactory.h
Go to the documentation of this file.
1 /***************************************************************************
2  * Copyright (C) 2004 by Olivier Stezowski *
3  * stezow(AT)ipnl.in2p3.fr *
4  * *
5  * This program is free software; you can redistribute it and/or modify *
6  * it under the terms of the GNU General Public License as published by *
7  * the Free Software Foundation; either version 2 of the License, or *
8  * (at your option) any later version. *
9  * *
10  * This program is distributed in the hope that it will be useful, *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13  * GNU General Public License for more details. *
14  * *
15  * You should have received a copy of the GNU General Public License *
16  * along with this program; if not, write to the *
17  * Free Software Foundation, Inc., *
18  * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
19  ***************************************************************************/
20 
23 #ifndef ADF_DefaultKeyFactory
24 #define ADF_DefaultKeyFactory
25 #define ADF_DEFAULTKEYFACTORY_H ADF_DefaultKeyFactory
26 
27 #ifndef ADF_KeyFactory
28 #include "KeyFactory.h"
29 #endif
30 
31 #ifndef ADF_Key
32 #include "Key.h"
33 #endif
34 
35 namespace ADF
36 {
38 
41 class FSKey_0_0 : public Key
42 {
43 private:
45  static const UShort_t kMaxDataLength = ADF::kMaxUShort_t - sizeof(UShort_t);
46 
47 public:
48  FSKey_0_0(BaseBuffer::EEndian e, UInt_t s = sizeof(UShort_t)) : Key(e,s)
49  {;}
50  virtual ~FSKey_0_0()
51  {;}
52 
54 
56  virtual void SetDataLength(UShort_t s)
57  {
58  UShort_t rs = sizeof(UShort_t);
59  if ( s < kMaxDataLength )
60  rs += s;
61  fBuffer->SetOffset(); (*fBuffer) << rs;
62  }
63 
65 
69  virtual void SetDataLength(UInt_t i)
70  {
71  fBuffer->SetOffset();
72  if ( i < UInt_t(kMaxDataLength) ) {
73  (*fBuffer) << UShort_t(i+sizeof(UShort_t));
74  return;
75  }
76  (*fBuffer) << i;
77  }
78 
79 // virtual UShort_t GetDataLength(UShort_t s) const
80 // { s = 0u; fBuffer->SetOffset(); (*fBuffer) >> s; return s; }
81 
82  virtual UInt_t GetDataLength() const {
83  UShort_t s = 0u;
84  fBuffer->SetOffset();
85  (*fBuffer) >> s;
86  return UInt_t(s-sizeof(UShort_t));
87  }
88 
89  virtual UInt_t GetFrameLength() const
90  { UShort_t s = 0u; fBuffer->SetOffset(); (*fBuffer) >> s; return UInt_t(s); }
91 };
92 
94 
97 class FSKey_0_1 : public Key
98 {
99 private:
101  static const UInt_t kMaxDataLength = ADF::kMaxUInt_t - sizeof(UInt_t);
102 
103 public:
104  FSKey_0_1(BaseBuffer::EEndian e, UInt_t s = sizeof(UInt_t)) : Key(e,s)
105  {;}
106  virtual ~FSKey_0_1()
107  {;}
108 
110 
112  virtual void SetDataLength(UShort_t s)
113  {
114  fBuffer->SetOffset();
115  (*fBuffer) << UInt_t(s+sizeof(UInt_t));
116  }
117 
119 
121  virtual void SetDataLength(UInt_t i)
122  {
123  UInt_t ri = sizeof(UInt_t);
124  //
125  if ( i < kMaxDataLength )
126  ri += i;
127  //
128  fBuffer->SetOffset();
129  //
130  (*fBuffer) << ri;
131  }
132 
133  virtual UInt_t GetDataLength() const
134  {
135  UInt_t i = 0u;
136  fBuffer->SetOffset();
137  (*fBuffer) >> i;
138  if ( i > sizeof(UInt_t) )
139  i = i - sizeof(UInt_t) ;
140 
141  return i;
142  }
143 
144  virtual UInt_t GetFrameLength() const
145  {
146  UInt_t i = 0u;
147  fBuffer->SetOffset();
148  (*fBuffer) >> i;
149  return i;
150  }
151 
152 };
153 
155 
157 class UIDKey : public Key
158 {
159 public:
161  UIDKey(BaseBuffer::EEndian e, UInt_t s) : Key(e,s)
162  {
163  ;
164  }
165  virtual ~UIDKey()
166  {
167  ;
168  }
169 
171  virtual ULong64_t GetUID() const = 0 ;
173  virtual void SetUID(ULong64_t) = 0;
174 
176  virtual ULong64_t GetEventNumber() const
177  {
178  return GetUID();
179  }
181  virtual ULong64_t GetTimeStamp(ULong64_t) const
182  {
183  return GetUID();
184  }
186  virtual void SetEventNumber(ULong64_t i)
187  {
188  SetUID(i);
189  }
191  virtual void SetTimeStamp(ULong64_t i)
192  {
193  SetUID(i);
194  }
195 };
196 
198 
200 class UIDKey_0_0 : public UIDKey
201 {
202 private:
204  UInt_t fDataSize;
206  UInt_t fFrameSize;
207 
208 public:
210  UIDKey_0_0(BaseBuffer::EEndian e, UInt_t s = 4u*aByte) : UIDKey(e,s), fDataSize(0u)
211  {
212  fFrameSize = fDataSize + 4u*aByte;
213  }
214  virtual ~UIDKey_0_0()
215  {;}
216 
218  virtual ULong64_t GetUID() const
219  {
220  UInt_t i = 0u;
221  fBuffer->SetOffset(0u);
222  (*fBuffer) >> i;
223 
224  return i;
225  }
226  virtual void SetUID(ULong64_t i)
227  {
228  fBuffer->SetOffset(0u);
229  (*fBuffer) << UInt_t(i);
230  }
232  virtual UInt_t GetDataLength() const
233  {
234  return fDataSize;
235  }
237  virtual UInt_t GetFrameLength() const
238  {
239  return fFrameSize;
240  }
241  virtual void SetDataLength(UInt_t s)
242  {
243  fDataSize = s; fFrameSize = fDataSize + 4u*aByte;
244  }
245  virtual void SetDataLength(UShort_t us)
246  { ADF::Key::SetDataLength(us);}
247 
248 
249 };
250 
252 
254 class UIDKey_0_1 : public UIDKey
255 {
256 private:
258  UInt_t fDataSize;
260  UInt_t fFrameSize;
261 
262 public:
264  UIDKey_0_1(BaseBuffer::EEndian e, UInt_t s = 8u * aByte) : UIDKey(e,s), fDataSize(0u)
265  {
266  fFrameSize = fDataSize + 8u*aByte;
267  }
268  virtual ~UIDKey_0_1()
269  {;}
270 
272  virtual ULong64_t GetUID() const
273  {
274  ULong64_t i = 0u;
275  fBuffer->SetOffset(0u);
276  (*fBuffer) >> i;
277 
278  return i;
279  }
280  virtual void SetUID(ULong64_t i)
281  {
282  fBuffer->SetOffset(0u);
283  (*fBuffer) << i;
284  }
286  virtual UInt_t GetDataLength() const
287  {
288  return fDataSize;
289  }
291  virtual UInt_t GetFrameLength() const
292  {
293  return fFrameSize;
294  }
295  virtual void SetDataLength(UInt_t s)
296  {
297  fDataSize = s; fFrameSize = fDataSize + 8u*aByte;
298  }
299  virtual void SetDataLength(UShort_t s)
300  {
301  fDataSize = s; fFrameSize = fDataSize + 8u*aByte;
302  }
303 };
304 
306 
309 class UIDKey_1_0 : public UIDKey
310 {
311  static const UShort_t kKeyLength = 6u*aByte;
312 
313 public:
315  UIDKey_1_0(BaseBuffer::EEndian e, UInt_t s = kKeyLength ) : UIDKey(e,s)
316  {
317  ;
318  }
319  virtual ~UIDKey_1_0()
320  {;}
321 
323  virtual ULong64_t GetUID() const
324  {
325  UInt_t i = 0u;
326  fBuffer->SetOffset(2u);
327  (*fBuffer) >> i;
328 
329  return i;
330  }
331  virtual void SetUID(ULong64_t i)
332  {
333  fBuffer->SetOffset(2u);
334  (*fBuffer) << UInt_t(i);
335  }
337  virtual UInt_t GetFrameLength() const
338  {
339  UShort_t i = 0u;
340  fBuffer->SetOffset();
341  (*fBuffer) >> i;
342  return i;
343  }
344  virtual UInt_t GetDataLength() const
345  {
346  UShort_t i = 0u;
347  fBuffer->SetOffset();
348  (*fBuffer) >> i;
349 
350  return i - kKeyLength ;
351  }
353 
355  virtual void SetDataLength(UShort_t s)
356  {
357  UShort_t si = s + kKeyLength;
358  //
359  fBuffer->SetOffset();
360  (*fBuffer) << si;
361  }
362 
364 
366  virtual void SetDataLength(UInt_t i)
367  {
368  UShort_t si = i + kKeyLength;
369  //
370  fBuffer->SetOffset();
371  (*fBuffer) << si;
372  }
373 };
374 
376 
380 class UIDKey_1_1 : public UIDKey
381 {
382  static const UShort_t kKeyLength = 10u*aByte;
383 
384 public:
386  UIDKey_1_1(BaseBuffer::EEndian e, UInt_t s = kKeyLength) : UIDKey(e,s)
387  {
388  ;
389  }
390  virtual ~UIDKey_1_1()
391  {;}
392 
394  virtual ULong64_t GetUID() const
395  {
396  ULong64_t i = 0u;
397  fBuffer->SetOffset(2u);
398  (*fBuffer) >> i;
399 
400  return i;
401  }
402  virtual void SetUID(ULong64_t i)
403  {
404  fBuffer->SetOffset(2u);
405  (*fBuffer) << i;
406  }
407 
409  virtual UInt_t GetFrameLength() const
410  {
411  UShort_t i = 0u;
412  fBuffer->SetOffset();
413  (*fBuffer) >> i;
414 
415  return i;
416  }
417  virtual UInt_t GetDataLength() const
418  {
419  UShort_t i = 0u;
420 
421  fBuffer->SetOffset();
422  (*fBuffer) >> i;
423 
424  return i - kKeyLength ;
425  }
426 
428 
430  virtual void SetDataLength(UShort_t s)
431  {
432  UShort_t si = s + kKeyLength;
433  //
434  fBuffer->SetOffset();
435  (*fBuffer) << si;
436  }
437 
439 
441  virtual void SetDataLength(UInt_t i)
442  {
443  UShort_t si = i + kKeyLength;
444  //
445  fBuffer->SetOffset();
446  (*fBuffer) << si;
447  }
448 };
449 
450 
451 class DefaultKeyFactory : public AKeyFactory<DefaultKeyFactory>
452 {
454 
455 private:
457  {
458  fLog.GetProcessName() = "DefaultKeyFactory";
459  }
460  virtual ~DefaultKeyFactory()
461  {;}
462 
463 protected:
465 
467  virtual Key *DoNew(const FactoryItem &) ;
468 };
469 
470 
471 
472 } // namespace ADF
473 #endif
474 
475 
476 
477 
478 
Base class for a Key.
Definition: Key.h:56
virtual UInt_t GetDataLength() const
virtual ULong64_t GetUID() const
Get unique ID. Could be event number / timestamp for instance.
virtual ~UIDKey()
header file for KeyFactory.cpp
virtual UInt_t GetDataLength() const
BufferIO * fBuffer
the buffer that fills in/out the Key
Definition: Key.h:99
virtual void SetDataLength(UShort_t us)
UIDKey_1_1(BaseBuffer::EEndian e, UInt_t s=kKeyLength)
s is the data length
virtual void SetDataLength(UShort_t s)
virtual void SetDataLength(UInt_t i)
stream in buffer the data length
virtual UInt_t GetFrameLength() const
Get frame length, constant.
virtual void SetUID(ULong64_t i)
Set unique ID. Could be event number / timestamp for instance.
const UInt_t kMaxUInt_t
Definition: ADFConfig.h:100
UIDKey used for sequences of frames with variable length starting associated to an id which could be ...
UIDKey_0_1(BaseBuffer::EEndian e, UInt_t s=8u *aByte)
s is the data length
UIDKey used for sequences of frames with contant length starting with a id which could be event # or ...
header file for Key.cpp
FSKey_0_0(BaseBuffer::EEndian e, UInt_t s=sizeof(UShort_t))
const UInt_t kMaxUShort_t
Definition: ADFConfig.h:96
virtual ULong64_t GetUID() const
Get unique ID. Could be event number / timestamp for instance.
virtual void SetDataLength(UShort_t s)
stream in buffer the data length
virtual UInt_t GetDataLength() const
virtual UInt_t GetFrameLength() const
virtual ULong64_t GetUID() const
Get unique ID. Could be event number / timestamp for instance.
FSKey_0_1 The length of the frame is coded on 4 bytes.
virtual UInt_t GetFrameLength() const
Get frame length, constant.
virtual ULong64_t GetTimeStamp(ULong64_t) const
Get unique ID. Could be event number / timestamp for instance.
virtual UInt_t GetDataLength() const
virtual Key * DoNew(const FactoryItem &)
Ask this factory for a new DefaultKeyFactory.
virtual UInt_t GetFrameLength() const
Get frame length,.
virtual void SetUID(ULong64_t i)
Set unique ID. Could be event number / timestamp for instance.
LogMessage fLog
the log messenger ... to know the object hae been properly intitialised/modified
Definition: DotConf.h:100
virtual ULong64_t GetUID() const
Get unique ID. Could be event number / timestamp for instance.
virtual ULong64_t GetUID() const =0
Get unique ID. Could be event number / timestamp for instance.
virtual ULong64_t GetEventNumber() const
Get unique ID. Could be event number / timestamp for instance.
virtual void SetUID(ULong64_t i)
Set unique ID. Could be event number / timestamp for instance.
Base Key for frames assoeciated with a id which could be event # or Timestamp (32 bits) ...
virtual UInt_t GetFrameLength() const
virtual void SetDataLength(UInt_t i)
stream in buffer the data length
UIDKey used for sequences of frames with contant length starting with a id which could be event # or ...
FSKey_0_0 The length of the frame is coded on 2 bytes (UShort_t, max size: 65534) ...
const UInt_t aByte
Definition: BaseBuffer.h:34
virtual void SetTimeStamp(ULong64_t i)
Get unique ID. Could be event number / timestamp for instance.
UIDKey used for sequences of frames with contant length starting with a id which could be event # or ...
virtual void SetDataLength(UInt_t s)
virtual UInt_t GetDataLength() const
Get data length, constant.
UIDKey_1_0(BaseBuffer::EEndian e, UInt_t s=kKeyLength)
s is the data length
virtual void SetDataLength(UInt_t s)
virtual void SetDataLength(UShort_t s)
stream in buffer the data length
virtual void SetDataLength(UInt_t i)
stream in buffer the data length
UIDKey_0_0(BaseBuffer::EEndian e, UInt_t s=4u *aByte)
s is the data length
virtual ~FSKey_0_0()
virtual void SetDataLength(UShort_t s)
stream in buffer the data length
virtual void SetDataLength(UInt_t i)
stream in buffer the data length
virtual std::string & GetProcessName()
To get the Process name.
virtual UInt_t GetFrameLength() const
Get frame length, constant.
FSKey_0_1(BaseBuffer::EEndian e, UInt_t s=sizeof(UInt_t))
virtual void SetUID(ULong64_t)=0
Set unique ID. Could be event number / timestamp for instance.
virtual void SetEventNumber(ULong64_t i)
Get unique ID. Could be event number / timestamp for instance.
Base class for any KeyFactory implementation.
Definition: KeyFactory.h:215
virtual void SetDataLength(UShort_t s)
stream in buffer the data length
virtual UInt_t GetDataLength() const
Get data length, constant.
UIDKey(BaseBuffer::EEndian e, UInt_t s)
s is the data length
UInt_t SetOffset(UInt_t off=0u) const
change the current position.
Definition: BufferIO.cpp:122
virtual void SetUID(ULong64_t i)
Set unique ID. Could be event number / timestamp for instance.