fpmas 1.5
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 return {
155 pack.get<DistributedId>(),
156 pack.get<T>()
157 };
158 }
159 };
160
168 template<typename T>
174 static std::size_t size(const ObjectPack& pack, const NodeUpdatePack<T>& data) {
175 return pack.size<DistributedId>() + pack.size(data.updated_data)
176 + pack.size<float>();
177 }
178
185 static void to_datapack(ObjectPack& pack, const NodeUpdatePack<T>& data) {
186 pack.put(data.id);
187 pack.put(data.updated_data);
188 pack.put(data.updated_weight);
189 }
190
198 return {
199 pack.get<DistributedId>(),
200 pack.get<T>(),
201 pack.get<float>()
202 };
203 }
204 };
205}}}
206#endif
Definition: distributed_id.h:89
Definition: datapack.h:275
std::size_t size() const
Definition: datapack.h:341
void put(const T &item)
Definition: datapack.h:421
T get() const
Definition: datapack.h:433
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:197
static std::size_t size(const ObjectPack &pack, const NodeUpdatePack< T > &data)
Definition: data_update_pack.h:174
static void to_datapack(ObjectPack &pack, const NodeUpdatePack< T > &data)
Definition: data_update_pack.h:185
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