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