DelegateMQ
Loading...
Searching...
No Matches
serialize/Serializer.h
Go to the documentation of this file.
1#ifndef SERIALIZER_H
2#define SERIALIZER_H
3
10
12#include "msg_serialize.h"
13#include <iostream>
14
15// make_serialized serializes each remote function argument
16template<typename Arg1, typename... Args>
17void make_serialized(serialize& ser, std::ostream& os, Arg1& arg1, Args... args) {
18 ser.write(os, arg1);
19
20 // Recursively call for other arguments
21 if constexpr (sizeof...(args) > 0) {
22 make_serialized(ser, os, args...);
23 }
24}
25
26// make_unserialized unserializes each remote function argument
27template<typename Arg1, typename... Args>
28void make_unserialized(serialize& ser, std::istream& is, Arg1& arg1, Args&&... args) {
29 ser.read(is, arg1);
30
31 // Recursively call for other arguments
32 if constexpr (sizeof...(args) > 0) {
33 make_unserialized(ser, is, args...);
34 }
35}
36
37template <class R>
38struct Serializer; // Not defined
39
40// Serialize all target function argument data using serialize class
41template<class RetType, class... Args>
42class Serializer<RetType(Args...)> : public dmq::ISerializer<RetType(Args...)>
43{
44public:
45 // Write arguments to a stream
46 virtual std::ostream& Write(std::ostream& os, Args... args) override {
47 try {
48 os.seekp(0, std::ios::beg);
49 serialize ser;
50 make_serialized(ser, os, args...);
51 }
52 catch (const std::exception& e) {
53 std::cerr << "Serialize error: " << e.what() << std::endl;
54 throw;
55 }
56 return os;
57 }
58
59 // Read arguments from a stream
60 virtual std::istream& Read(std::istream& is, Args&... args) override {
61 try {
62 serialize ser;
63 make_unserialized(ser, is, args...);
64 }
65 catch (const std::exception& e) {
66 std::cerr << "Deserialize error: " << e.what() << std::endl;
67 throw;
68 }
69 return is;
70 }
71};
72
73#endif
Delegate serializer interface class.
virtual std::istream & Read(std::istream &is, Args &... args) override
Definition serialize/Serializer.h:60
virtual std::ostream & Write(std::ostream &os, Args... args) override
Definition serialize/Serializer.h:46
The serialize class binary serializes and deserializes C++ objects.
Definition msg_serialize.h:105
std::istream & read(std::istream &is, I *t_)
Definition msg_serialize.h:195
std::ostream & write(std::ostream &os, I *t_)
Definition msg_serialize.h:349
void make_unserialized(msgpack::unpacker &unpacker, Arg1 &arg1, Args &&... args)
Definition msgpack/Serializer.h:33
void make_serialized(msgpack::sbuffer &buffer, Arg1 &arg1, Args... args)
Definition msgpack/Serializer.h:22
void make_unserialized(serialize &ser, std::istream &is, Arg1 &arg1, Args &&... args)
Definition serialize/Serializer.h:28
void make_serialized(serialize &ser, std::ostream &os, Arg1 &arg1, Args... args)
Definition serialize/Serializer.h:17
Definition msgpack/Serializer.h:48
Definition ISerializer.h:12