StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
l3BankUtils.cxx
1 
2 #include "l3BankUtils.h"
3 #include "l3Swap.h"
4 
5 #include <stdlib.h>
6 #include <string.h>
7 
8 void *offlen2ptr(void *base, struct offlen ol)
9 {
10  int off, len;
11 
12  if( ((bankHeader*)base)->byte_order == DAQ_RAW_FORMAT_ORDER) {
13  off=ol.off;
14  len=ol.len;
15  } else {
16  off=swap32(ol.off);
17  len=swap32(ol.len);
18  }
19 
20  void *ptr;
21  if (len > 0)
22  ptr = (void *)((char *)base + off*4);
23  else
24  ptr = (void *)0;
25 
26  return ptr;
27 }
28 
29 
30 
31 void *offlen2ptr(void *base, struct offlen ol, char *type)
32 {
33 
34  void *ptr = offlen2ptr(base, ol);
35 
36  return validate(ptr, type);
37 }
38 
39 
40 
41 void *validate(void * ptr, char *type)
42 {
43  if(validateBank(ptr, type))
44  return ptr;
45  else
46  return NULL;
47 };
48 
49 
50 bool validateBank(void * ptr, char *type)
51 {
52  struct bankHeader *bh =(struct bankHeader *) ptr;
53  int typelen;
54  for(typelen = 1; typelen<8 && type[typelen-1]!=' ';typelen++);
55  // cout << type << "." << typelen<< endl;
56 
57  if(ptr == NULL)
58  return false;
59 
60  else if (strncmp(type, bh->bank_type, typelen)) // types don't match
61  {
62 // if (logLevel >= error)
63 // cerr << "L3Event: Invalid BankHeader (" << bh->bank_type
64 // << " instead of " << type << ")" << endl;
65  return false;
66  }
67  else
68  return true;
69 }
70 
71 int bankSize(bankHeader bh)
72 {
73  if (bh.byte_order == DAQ_RAW_FORMAT_ORDER) {
74  return (bh.length * 4);
75  } else {
76  return (swap32(bh.length) * 4);
77  }
78 
79 }