Belle II Software  release-05-01-25
Writer.cc
1 #include "daq/slc/base/Writer.h"
2 
3 #include "daq/slc/base/Serializable.h"
4 
5 #include <unistd.h>
6 
7 #define __ENDIAN_L__
8 
9 using namespace Belle2;
10 
11 void Writer::reverse(void* buf, size_t len)
12 {
13  char tmp;
14  for (int c = 0 ; c < (int)len / 2 ; c ++) {
15  tmp = *((char*)buf + c);
16  *((char*)buf + c) = *((char*)buf + len - 1 - c);
17  *((char*)buf + len - 1 - c) = tmp;
18  }
19 }
20 
21 void Writer::writeBool(bool v)
22 {
23  write(&v, sizeof(bool));
24 }
25 
26 void Writer::writeChar(char v)
27 {
28  write(&v, sizeof(char));
29 }
30 
31 void Writer::writeUChar(unsigned char v)
32 {
33  write(&v, sizeof(unsigned char));
34 }
35 
36 void Writer::writeShort(short v)
37 {
38 #if defined(__ENDIAN_L__)
39  reverse(&v, sizeof(short));
40 #endif
41  write(&v, sizeof(short));
42 }
43 
44 void Writer::writeUShort(unsigned short v)
45 {
46 #if defined(__ENDIAN_L__)
47  reverse(&v, sizeof(unsigned short));
48 #endif
49  write(&v, sizeof(unsigned short));
50 }
51 
52 void Writer::writeInt(int v)
53 {
54 #if defined(__ENDIAN_L__)
55  reverse(&v, sizeof(int));
56 #endif
57  write(&v, sizeof(int));
58 }
59 
60 void Writer::writeUInt(unsigned int v)
61 {
62 #if defined(__ENDIAN_L__)
63  reverse(&v, sizeof(unsigned int));
64 #endif
65  write(&v, sizeof(unsigned int));
66 }
67 
68 void Writer::writeLong(long long v)
69 {
70 #if defined(__ENDIAN_L__)
71  reverse(&v, sizeof(long long));
72 #endif
73  write(&v, sizeof(long long));
74 }
75 
76 void Writer::writeULong(unsigned long long v)
77 {
78 #if defined(__ENDIAN_L__)
79  reverse(&v, sizeof(unsigned long long));
80 #endif
81  write(&v, sizeof(unsigned long long));
82 }
83 
84 void Writer::writeFloat(float v)
85 {
86 #if defined(__ENDIAN_L__)
87  reverse(&v, sizeof(float));
88 #endif
89  write(&v, sizeof(float));
90 }
91 
92 void Writer::writeDouble(double v)
93 {
94 #if defined(__ENDIAN_L__)
95  reverse(&v, sizeof(double));
96 #endif
97  write(&v, sizeof(double));
98 }
99 
100 void Writer::writeString(const std::string& v)
101 {
102  writeInt((int)v.size());
103  write(v.data(), v.size());
104 }
105 
106 void Writer::writeObject(const Serializable& v)
107 {
108  return v.writeObject(*this);
109 }
Belle2::Serializable
Definition: Serializable.h:13
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19