fpmas 1.6
data_update_pack.h
Go to the documentation of this file.
1#ifndef FPMAS_DATA_UPDATE_PACK_H
2#define FPMAS_DATA_UPDATE_PACK_H
3
9#include "fpmas/io/datapack.h"
10
11namespace fpmas { namespace synchro {
15 template<typename T>
25
32 DataUpdatePack(DistributedId id, const T& data)
33 : id(id), updated_data(data) {}
34 };
35
40 template<typename T>
41 struct NodeUpdatePack : public DataUpdatePack<T> {
46
54 NodeUpdatePack(DistributedId id, const T& data, float weight)
55 : DataUpdatePack<T>(id, data), updated_weight(weight) {}
56 };
57}}
58
59namespace nlohmann {
62
66 template <typename T>
67 struct adl_serializer<DataUpdatePack<T>> {
74 static DataUpdatePack<T> from_json(const json& j) {
75 return {j[0].get<DistributedId>(), j[1].get<T>()};
76 }
77
84 static void to_json(json& j, const DataUpdatePack<T>& data) {
85 j = json::array({data.id, data.updated_data});
86 }
87 };
88
92 template <typename T>
93 struct adl_serializer<NodeUpdatePack<T>> {
100 static NodeUpdatePack<T> from_json(const json& j) {
101 return {j[0].get<DistributedId>(), j[1].get<T>(), j[2].get<float>()};
102 }
109 static void to_json(json& j, const NodeUpdatePack<T>& data) {
110 j = json::array({data.id, data.updated_data, data.updated_weight});
111 }
112 };
113}
114
115namespace fpmas { namespace io { namespace datapack {
118
126 template<typename T>
132 static std::size_t size(const ObjectPack& pack, const DataUpdatePack<T>& data) {
133 return pack.size(data.id) + pack.size(data.updated_data);
134 }
135
142 static void to_datapack(ObjectPack& pack, const DataUpdatePack<T>& data) {
143 pack.put(data.id);
144 pack.put(data.updated_data);
145 }
146
154 DistributedId id = pack.get<DistributedId>();
155 T data = pack.get<T>();
156 return {std::move(id), std::move(data)};
157 }
158 };
159
167 template<typename T>
173 static std::size_t size(const ObjectPack& pack, const NodeUpdatePack<T>& data) {
174 return pack.size<DistributedId>() + pack.size(data.updated_data)
175 + pack.size<float>();
176 }
177
184 static void to_datapack(ObjectPack& pack, const NodeUpdatePack<T>& data) {
185 pack.put(data.id);
186 pack.put(data.updated_data);
187 pack.put(data.updated_weight);
188 }
189
197 return {
198 pack.get<DistributedId>(),
199 pack.get<T>(),
200 pack.get<float>()
201 };
202 }
203 };
204}}}
205#endif
Definition: distributed_id.h:89
Definition: datapack.h:301
std::size_t size() const
Definition: datapack.h:367
void put(const T &item)
Definition: datapack.h:447
T get() const
Definition: datapack.h:459
Definition: fpmas.cpp:3
static void to_datapack(ObjectPack &pack, const DataUpdatePack< T > &data)
Definition: data_update_pack.h:142
static DataUpdatePack< T > from_datapack(const ObjectPack &pack)
Definition: data_update_pack.h:153
static std::size_t size(const ObjectPack &pack, const DataUpdatePack< T > &data)
Definition: data_update_pack.h:132
static NodeUpdatePack< T > from_datapack(const ObjectPack &pack)
Definition: data_update_pack.h:196
static std::size_t size(const ObjectPack &pack, const NodeUpdatePack< T > &data)
Definition: data_update_pack.h:173
static void to_datapack(ObjectPack &pack, const NodeUpdatePack< T > &data)
Definition: data_update_pack.h:184
Definition: datapack.h:55
Definition: data_update_pack.h:16
T updated_data
Definition: data_update_pack.h:24
DataUpdatePack(DistributedId id, const T &data)
Definition: data_update_pack.h:32
DistributedId id
Definition: data_update_pack.h:20
Definition: data_update_pack.h:41
NodeUpdatePack(DistributedId id, const T &data, float weight)
Definition: data_update_pack.h:54
float updated_weight
Definition: data_update_pack.h:45
static DataUpdatePack< T > from_json(const json &j)
Definition: data_update_pack.h:74
static void to_json(json &j, const DataUpdatePack< T > &data)
Definition: data_update_pack.h:84
static void to_json(json &j, const NodeUpdatePack< T > &data)
Definition: data_update_pack.h:109
static NodeUpdatePack< T > from_json(const json &j)
Definition: data_update_pack.h:100