1#ifndef FPMAS_IO_JSON_DATAPACK_H
2#define FPMAS_IO_JSON_DATAPACK_H
14namespace fpmas {
namespace io {
namespace datapack {
38 template<
typename T,
typename JsonType>
45 template<
typename PackType>
46 static std::size_t
size(
const PackType&,
const T&) {
59 template<
typename PackType>
61 std::string json_str = JsonType(item).dump();
62 pack.expand(pack.template
size(json_str));
63 pack.template put(json_str);
76 template<
typename PackType>
78 return JsonType::parse(
79 pack.template get<std::string>()
90 template<
typename JsonType>
96 template<
typename PackType>
97 static std::size_t
size(
const PackType& pack,
const std::string& item) {
107 template<
typename PackType>
108 static void to_datapack(PackType& pack,
const std::string& item) {
119 template<
typename PackType>
134 template<
typename T,
typename Enable =
void>
145 template<
typename T,
typename Enable =
void>
154namespace fpmas {
namespace io {
namespace json {
180 template<
typename T,
typename PackType>
191 template<
typename JsonType>
192 static void to_json(JsonType& json,
const T& data) {
194 std::vector<std::uint8_t> binary_buffer(p.data().size);
195 for(std::size_t i = 0; i < p.data().size; i++)
196 binary_buffer[i] = p.data().buffer[i];
198 json = JsonType::binary(std::move(binary_buffer));
211 template<
typename JsonType>
213 const std::vector<std::uint8_t>& binary_buffer = json.get_binary();
216 for(std::size_t i = 0; i < binary_buffer.size(); i++)
217 p.
buffer[i] = binary_buffer[i];
218 return PackType::parse(p).template get<T>();
227 template<
typename T,
typename Enable=
void>
234 typedef nlohmann::basic_json<std::map, std::vector, std::string, bool, std::int64_t, std::uint64_t, double, std::allocator, datapack_serializer>
datapack_json;
240 template<
typename T,
typename Enable=
void>
248 typedef nlohmann::basic_json<std::map, std::vector, std::string, bool, std::int64_t, std::uint64_t, double, std::allocator, light_datapack_serializer>
light_datapack_json;
Definition: communication.h:16
char * buffer
Definition: communication.h:36
Definition: datapack.h:301
BasicObjectPack< JsonSerializer > JsonPack
Definition: json_datapack.h:139
BasicObjectPack< LightJsonSerializer > LightJsonPack
Definition: json_datapack.h:151
nlohmann::basic_json< std::map, std::vector, std::string, bool, std::int64_t, std::uint64_t, double, std::allocator, datapack_serializer > datapack_json
Definition: json_datapack.h:234
nlohmann::basic_json< std::map, std::vector, std::string, bool, std::int64_t, std::uint64_t, double, std::allocator, light_datapack_serializer > light_datapack_json
Definition: json_datapack.h:248
static void to_datapack(PackType &pack, const std::string &item)
Definition: json_datapack.h:108
static std::size_t size(const PackType &pack, const std::string &item)
Definition: json_datapack.h:97
static std::string from_datapack(const PackType &pack)
Definition: json_datapack.h:120
Definition: json_datapack.h:39
static T from_datapack(const PackType &pack)
Definition: json_datapack.h:77
static std::size_t size(const PackType &, const T &)
Definition: json_datapack.h:46
static void to_datapack(PackType &pack, const T &item)
Definition: json_datapack.h:60
Definition: datapack.h:55
Definition: json_datapack.h:181
static T from_json(const JsonType &json)
Definition: json_datapack.h:212
static void to_json(JsonType &json, const T &data)
Definition: json_datapack.h:192