casacore
Loading...
Searching...
No Matches
serializable.h
Go to the documentation of this file.
1#ifndef DYSCO_SERIALIZABLE_H
2#define DYSCO_SERIALIZABLE_H
3
4#include <complex>
5#include <iostream>
6
7#include <stdint.h>
8
10 public:
11 virtual ~Serializable() {}
12 virtual void Serialize(std::ostream &stream) const = 0;
13 virtual void Unserialize(std::istream &stream) = 0;
14
15 template <typename T>
16 static void SerializeToUInt64(std::ostream &stream, T value) {
17 uint64_t val64t = value;
18 stream.write(reinterpret_cast<char *>(&val64t), sizeof(val64t));
19 }
20
21 template <typename T>
22 static void SerializeToUInt32(std::ostream &stream, T value) {
23 uint32_t val32t = value;
24 stream.write(reinterpret_cast<char *>(&val32t), sizeof(val32t));
25 }
26
27 template <typename T>
28 static void SerializeToUInt16(std::ostream &stream, T value) {
29 uint16_t val16t = value;
30 stream.write(reinterpret_cast<char *>(&val16t), sizeof(val16t));
31 }
32
33 template <typename T>
34 static void SerializeToUInt8(std::ostream &stream, T value) {
35 uint8_t val8t = value;
36 stream.write(reinterpret_cast<char *>(&val8t), sizeof(val8t));
37 }
38
39 static void SerializeToBool8(std::ostream &stream, bool value) {
40 uint8_t val8t = value;
41 stream.write(reinterpret_cast<char *>(&val8t), sizeof(val8t));
42 }
43
44 static void SerializeToFloat(std::ostream &stream, float value) {
45 stream.write(reinterpret_cast<char *>(&value), sizeof(value));
46 }
47
48 static void SerializeToDouble(std::ostream &stream, double value) {
49 stream.write(reinterpret_cast<char *>(&value), sizeof(value));
50 }
51
52 static void SerializeToLDouble(std::ostream &stream, long double value) {
53 stream.write(reinterpret_cast<char *>(&value), sizeof(value));
54 }
55
56 static void SerializeToLDoubleC(std::ostream &stream, std::complex<long double> value) {
57 stream.write(reinterpret_cast<char *>(&value), sizeof(value));
58 }
59
60 static void SerializeToString(std::ostream &stream, const std::string &str) {
61 SerializeToUInt64(stream, str.size());
62 stream.write(str.c_str(), str.size());
63 }
64
65 static void SerializeTo32bString(std::ostream &stream, const std::string &str) {
66 SerializeToUInt32(stream, str.size());
67 stream.write(str.c_str(), str.size());
68 }
69
70 static uint64_t UnserializeUInt64(std::istream &stream) { return Unserialize<uint64_t>(stream); }
71
72 static uint32_t UnserializeUInt32(std::istream &stream) { return Unserialize<uint32_t>(stream); }
73
74 static uint16_t UnserializeUInt16(std::istream &stream) { return Unserialize<uint16_t>(stream); }
75
76 static uint8_t UnserializeUInt8(std::istream &stream) { return Unserialize<uint8_t>(stream); }
77
78 static bool UnserializeBool8(std::istream &stream) { return (bool)Unserialize<uint8_t>(stream); }
79
80 static double UnserializeFloat(std::istream &stream) { return Unserialize<float>(stream); }
81
82 static double UnserializeDouble(std::istream &stream) { return Unserialize<double>(stream); }
83
84 static long double UnserializeLDouble(std::istream &stream) {
85 return Unserialize<long double>(stream);
86 }
87
88 static std::complex<long double> UnserializeLDoubleC(std::istream &stream) {
90 }
91
92 static void UnserializeString(std::istream &stream, std::string &destStr) {
93 size_t size = UnserializeUInt64(stream);
94 char *str = new char[size];
95 stream.read(str, size);
96 destStr = std::string(str, size);
97 delete[] str;
98 }
99
100 static void Unserialize32bString(std::istream &stream, std::string &destStr) {
101 size_t size = UnserializeUInt32(stream);
102 char *str = new char[size];
103 stream.read(str, size);
104 destStr = std::string(str, size);
105 delete[] str;
106 }
107
108 private:
109 template <typename T>
110 static T Unserialize(std::istream &stream) {
111 T val;
112 stream.read(reinterpret_cast<char *>(&val), sizeof(val));
113 return val;
114 }
115};
116
117#endif
virtual void Unserialize(std::istream &stream)=0
static T Unserialize(std::istream &stream)
static uint16_t UnserializeUInt16(std::istream &stream)
static void SerializeToUInt16(std::ostream &stream, T value)
static void SerializeToFloat(std::ostream &stream, float value)
static void SerializeToDouble(std::ostream &stream, double value)
static std::complex< long double > UnserializeLDoubleC(std::istream &stream)
static long double UnserializeLDouble(std::istream &stream)
virtual void Serialize(std::ostream &stream) const =0
static void SerializeToLDouble(std::ostream &stream, long double value)
static uint32_t UnserializeUInt32(std::istream &stream)
static void SerializeToUInt8(std::ostream &stream, T value)
static void SerializeTo32bString(std::ostream &stream, const std::string &str)
static void SerializeToUInt64(std::ostream &stream, T value)
static void UnserializeString(std::istream &stream, std::string &destStr)
static void Unserialize32bString(std::istream &stream, std::string &destStr)
static uint64_t UnserializeUInt64(std::istream &stream)
static double UnserializeDouble(std::istream &stream)
static double UnserializeFloat(std::istream &stream)
static void SerializeToBool8(std::ostream &stream, bool value)
static void SerializeToString(std::ostream &stream, const std::string &str)
virtual ~Serializable()
static uint8_t UnserializeUInt8(std::istream &stream)
static bool UnserializeBool8(std::istream &stream)
static void SerializeToUInt32(std::ostream &stream, T value)
static void SerializeToLDoubleC(std::ostream &stream, std::complex< long double > value)