DelegateMQ
Loading...
Searching...
No Matches
bitsery/Serializer.h
Go to the documentation of this file.
1#ifndef SERIALIZER_H
2#define SERIALIZER_H
3
10
12#include <bitsery/bitsery.h>
13#include <bitsery/adapter/stream.h>
14#include <bitsery/ext/std_tuple.h>
15#include <sstream>
16#include <iostream>
17#include <type_traits>
18
19// Type trait to check if a type is const
20template <typename T>
21using is_const_type = std::is_const<std::remove_reference_t<T>>;
22
23template <class R>
24struct Serializer; // Not defined
25
26template<class RetType, class... Args>
27class Serializer<RetType(Args...)> : public dmq::ISerializer<RetType(Args...)>
28{
29public:
30 using OutputAdapter = bitsery::OutputStreamAdapter;
31 using InputAdapter = bitsery::InputStreamAdapter;
32
33 virtual std::ostream& Write(std::ostream& os, Args... args) override {
34 try {
35 os.seekp(0);
36 bitsery::Serializer<OutputAdapter> writer{ os };
37
38 // Serialize each argument using fold expression
39 (writer.object(args), ...);
40 writer.adapter().flush();
41 }
42 catch (const std::exception& e) {
43 std::cerr << "Bitsery serialize error: " << e.what() << std::endl;
44 throw;
45 }
46 return os;
47 }
48
49 virtual std::istream& Read(std::istream& is, Args&... args) override {
50 try {
51 bitsery::Deserializer<InputAdapter> reader{ is };
52
53 // Deserialize each argument using fold expression
54 (reader.object(args), ...);
55
56 }
57 catch (const std::exception& e) {
58 std::cerr << "Bitsery deserialize error: " << e.what() << std::endl;
59 throw;
60 }
61 return is;
62 }
63};
64
65#endif
Delegate serializer interface class.
std::is_const< std::remove_reference_t< T > > is_const_type
Definition bitsery/Serializer.h:21
virtual std::istream & Read(std::istream &is, Args &... args) override
Definition bitsery/Serializer.h:49
bitsery::OutputStreamAdapter OutputAdapter
Definition bitsery/Serializer.h:30
bitsery::InputStreamAdapter InputAdapter
Definition bitsery/Serializer.h:31
virtual std::ostream & Write(std::ostream &os, Args... args) override
Definition bitsery/Serializer.h:33
Definition bitsery/Serializer.h:24
Definition ISerializer.h:12