Jpp
JSerialisable.hh
Go to the documentation of this file.
1 #ifndef __JIO__JSERIALISABLE__
2 #define __JIO__JSERIALISABLE__
3 
4 #include "JLang/JBinaryIO.hh"
6 
7 
8 /**
9  * \author mdejong
10  */
11 
12 /**
13  * Auxiliary classes and methods for binary I/O.
14  */
15 namespace JIO {}
16 namespace JPP { using namespace JIO; }
17 
18 namespace JIO {
19 
20  using JLANG::JBinaryInput;
23 
24  class JReader; //!< Forward declaration of binary input.
25  class JWriter; //!< Forward declaration of binary output.
26 
27 
28  /**
29  * Interface class for a data structure with binary I/O.
30  */
31  class JSerialisable {
32  public:
33  /**
34  * Virtual destructor.
35  */
36  virtual ~JSerialisable()
37  {}
38 
39 
40  /**
41  * Read from input.
42  *
43  * \param in JReader
44  * \return JReader
45  */
46  virtual JReader& read(JReader& in) = 0;
47 
48 
49  /**
50  * Write to output.
51  *
52  * \param out JWriter
53  * \return JWriter
54  */
55  virtual JWriter& write(JWriter& out) const = 0;
56  };
57 
58 
59  /**
60  * Interface for binary input.
61  */
62  class JReader :
63  public JLANG::JBinaryInput,
65  {
66  public:
67  /**
68  * Clear status of reader.
69  */
70  virtual void clear()
71  {}
72 
73 
74  /**
75  * Read serialisable data object.
76  *
77  * \param object serialisable data object
78  * \return JReader
79  */
81  {
82  return object.read(*this);
83  }
84 
85 
86  JReader& operator>>(bool& value) { read((char*) &value, sizeof(bool)); return *this; }
87  JReader& operator>>(char& value) { read((char*) &value, sizeof(char)); return *this; }
88  JReader& operator>>(unsigned char& value) { read((char*) &value, sizeof(unsigned char)); return *this; }
89  JReader& operator>>(short& value) { read((char*) &value, sizeof(short)); return *this; }
90  JReader& operator>>(unsigned short& value) { read((char*) &value, sizeof(unsigned short)); return *this; }
91  JReader& operator>>(int& value) { read((char*) &value, sizeof(int)); return *this; }
92  JReader& operator>>(unsigned int& value) { read((char*) &value, sizeof(unsigned int)); return *this; }
93  JReader& operator>>(long int& value) { read((char*) &value, sizeof(long int)); return *this; }
94  JReader& operator>>(long long int& value) { read((char*) &value, sizeof(long long int)); return *this; }
95  JReader& operator>>(unsigned long long int& value) { read((char*) &value, sizeof(unsigned long long int)); return *this; }
96  JReader& operator>>(float& value) { read((char*) &value, sizeof(float)); return *this; }
97  JReader& operator>>(double& value) { read((char*) &value, sizeof(double)); return *this; }
98  JReader& operator>>(long double& value) { read((char*) &value, sizeof(long double)); return *this; }
99 
100 
101  /**
102  * Read object.
103  *
104  * \param object object
105  * \return this reader
106  */
107  inline JReader& load(JSerialisable& object)
108  {
109  return object.read(*this);
110  }
111 
112 
113  /**
114  * Read object.
115  *
116  * \param object object
117  * \return this reader
118  */
119  template<class T>
120  inline JReader& load(T& object)
121  {
122  return *this >> object;
123  }
124  };
125 
126 
127  /**
128  * Interface for binary output.
129  */
130  class JWriter :
131  public JLANG::JBinaryOutput,
133  {
134  public:
135  /**
136  * Write serialisable data object.
137  *
138  * \param object serialisable data object
139  * \return JWriter
140  */
142  {
143  return object.write(*this);
144  }
145 
146 
147  JWriter& operator<<(const bool& value) { write((const char*) &value, sizeof(bool)); return *this; }
148  JWriter& operator<<(const char& value) { write((const char*) &value, sizeof(char)); return *this; }
149  JWriter& operator<<(const unsigned char& value) { write((const char*) &value, sizeof(unsigned char)); return *this; }
150  JWriter& operator<<(const short& value) { write((const char*) &value, sizeof(short)); return *this; }
151  JWriter& operator<<(const unsigned short& value) { write((const char*) &value, sizeof(unsigned short)); return *this; }
152  JWriter& operator<<(const int& value) { write((const char*) &value, sizeof(int)); return *this; }
153  JWriter& operator<<(const unsigned int& value) { write((const char*) &value, sizeof(unsigned int)); return *this; }
154  JWriter& operator<<(const long int& value) { write((const char*) &value, sizeof(long int)); return *this; }
155  JWriter& operator<<(const long long int& value) { write((const char*) &value, sizeof(long long int)); return *this; }
156  JWriter& operator<<(const unsigned long long int& value) { write((const char*) &value, sizeof(unsigned long long int)); return *this; }
157  JWriter& operator<<(const float& value) { write((const char*) &value, sizeof(float)); return *this; }
158  JWriter& operator<<(const double& value) { write((const char*) &value, sizeof(double)); return *this; }
159  JWriter& operator<<(const long double& value) { write((const char*) &value, sizeof(long double)); return *this; }
160 
161 
162  /**
163  * Write object.
164  *
165  * \param object object
166  * \return this writer
167  */
168  inline JWriter& store(const JSerialisable& object)
169  {
170  return object.write(*this);
171  }
172 
173 
174  /**
175  * Write object.
176  *
177  * \param object object
178  * \return this writer
179  */
180  template<class T>
181  inline JWriter& store(const T& object)
182  {
183  return *this << object;
184  }
185  };
186 }
187 
188 #endif
JIO::JReader::clear
virtual void clear()
Clear status of reader.
Definition: JSerialisable.hh:70
JIO::JReader::operator>>
JReader & operator>>(unsigned char &value)
Definition: JSerialisable.hh:88
JIO::JReader
Interface for binary input.
Definition: JSerialisable.hh:62
JIO::JWriter::operator<<
JWriter & operator<<(const float &value)
Definition: JSerialisable.hh:157
JLANG::JBinaryOutput
Interface for binary output.
Definition: JBinaryIO.hh:41
JIO::JWriter::store
JWriter & store(const T &object)
Write object.
Definition: JSerialisable.hh:181
JIO::JReader::operator>>
JReader & operator>>(double &value)
Definition: JSerialisable.hh:97
JIO::JSerialisable
Forward declaration of binary output.
Definition: JSerialisable.hh:31
JIO::JSerialisable::~JSerialisable
virtual ~JSerialisable()
Virtual destructor.
Definition: JSerialisable.hh:36
JIO::JReader::operator>>
JReader & operator>>(unsigned int &value)
Definition: JSerialisable.hh:92
JIO::JSerialisable::read
virtual JReader & read(JReader &in)=0
Read from input.
JLANG::JAbstractObjectStatus
Interface for status of object.
Definition: JAbstractObjectStatus.hh:19
JIO::JWriter::operator<<
JWriter & operator<<(const long long int &value)
Definition: JSerialisable.hh:155
JBinaryIO.hh
JIO::JWriter::operator<<
JWriter & operator<<(const unsigned long long int &value)
Definition: JSerialisable.hh:156
JIO::JWriter::store
JWriter & store(const JSerialisable &object)
Write object.
Definition: JSerialisable.hh:168
JIO::JReader::load
JReader & load(JSerialisable &object)
Read object.
Definition: JSerialisable.hh:107
JIO::JWriter::operator<<
JWriter & operator<<(const bool &value)
Definition: JSerialisable.hh:147
JPP
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
Definition: JAAnetToolkit.hh:37
JIO::JReader::operator>>
JReader & operator>>(long int &value)
Definition: JSerialisable.hh:93
JIO::JReader::operator>>
JReader & operator>>(unsigned long long int &value)
Definition: JSerialisable.hh:95
JIO::JReader::operator>>
JReader & operator>>(long long int &value)
Definition: JSerialisable.hh:94
JIO::JWriter::operator<<
JWriter & operator<<(const unsigned char &value)
Definition: JSerialisable.hh:149
JLANG::JBinaryOutput::write
virtual int write(const char *buffer, const int length)=0
Write byte array.
JLANG::JBinaryInput::read
virtual int read(char *buffer, const int length)=0
Read byte array.
JAbstractObjectStatus.hh
JIO::JWriter::operator<<
JWriter & operator<<(const double &value)
Definition: JSerialisable.hh:158
JIO::JWriter::operator<<
JWriter & operator<<(const long double &value)
Definition: JSerialisable.hh:159
JIO::JWriter
Interface for binary output.
Definition: JSerialisable.hh:130
JIO::JReader::operator>>
JReader & operator>>(long double &value)
Definition: JSerialisable.hh:98
JIO::JReader::operator>>
JReader & operator>>(unsigned short &value)
Definition: JSerialisable.hh:90
JIO::JWriter::operator<<
JWriter & operator<<(const char &value)
Definition: JSerialisable.hh:148
JIO::JReader::operator>>
JReader & operator>>(int &value)
Definition: JSerialisable.hh:91
JIO::JWriter::operator<<
JWriter & operator<<(const long int &value)
Definition: JSerialisable.hh:154
JIO::JSerialisable::write
virtual JWriter & write(JWriter &out) const =0
Write to output.
JIO::JWriter::operator<<
JWriter & operator<<(const JSerialisable &object)
Write serialisable data object.
Definition: JSerialisable.hh:141
JIO::JReader::load
JReader & load(T &object)
Read object.
Definition: JSerialisable.hh:120
JIO::JReader::operator>>
JReader & operator>>(JSerialisable &object)
Read serialisable data object.
Definition: JSerialisable.hh:80
JIO::JWriter::operator<<
JWriter & operator<<(const short &value)
Definition: JSerialisable.hh:150
JIO
Auxiliary classes and methods for binary I/O.
Definition: JBinaryFileReader.hh:17
JIO::JWriter::operator<<
JWriter & operator<<(const int &value)
Definition: JSerialisable.hh:152
JIO::JReader::operator>>
JReader & operator>>(bool &value)
Definition: JSerialisable.hh:86
JIO::JReader::operator>>
JReader & operator>>(short &value)
Definition: JSerialisable.hh:89
JIO::JWriter::operator<<
JWriter & operator<<(const unsigned short &value)
Definition: JSerialisable.hh:151
JIO::JWriter::operator<<
JWriter & operator<<(const unsigned int &value)
Definition: JSerialisable.hh:153
JIO::JReader::operator>>
JReader & operator>>(float &value)
Definition: JSerialisable.hh:96
JLANG::JBinaryInput
Interface for binary input.
Definition: JBinaryIO.hh:18
JIO::JReader::operator>>
JReader & operator>>(char &value)
Definition: JSerialisable.hh:87