2#include "core/device/vdb/protocol.hpp"
14 using SizeT = uint32_t;
20 explicit Record(std::string name);
27 Record(std::string name,
const std::vector<Part *> &parts);
34 Record(std::string name, std::vector<PartPtr> parts);
41 Record(std::string name, PacketReader &reader);
48 std::vector<PartPtr> get_fields()
const;
53 void fetch()
override;
55 void response()
override;
63 PartPtr clone()
override;
75 void pprint(std::stringstream &ss,
size_t indent)
const override;
76 void pprint_data(std::stringstream &ss,
size_t indent)
const override;
78 std::vector<PartPtr> fields;
88 using FetchFunc = std::function<std::string()>;
94 explicit String(std::string name, FetchFunc fetcher = []() {
return "no value"; });
98 void fetch()
override;
116 PartPtr clone()
override;
128 void pprint(std::stringstream &ss,
size_t indent)
const override;
135 void pprint_data(std::stringstream &ss,
size_t indent)
const override;
153template <
typename NumT, Type schemaType>
class Number :
public Part {
158 using NumberType = NumT;
159 static constexpr Type SchemaType = schemaType;
163 std::is_floating_point<NumberType>::value || std::is_integral<NumberType>::value,
164 "Number type this is instantiated with must be floating point "
176 std::string field_name,
FetchFunc fetcher = []() {
return (NumberType)0; }
178 :
Part(field_name), fetcher(fetcher) {}
182 void fetch()
override { value = fetcher(); }
197 void pprint(std::stringstream &ss,
size_t indent)
const override {
198 add_indents(ss, indent);
199 ss << name <<
":\t" << to_string(SchemaType);
206 void pprint_data(std::stringstream &ss,
size_t indent)
const override {
207 add_indents(ss, indent);
209 if (
sizeof(NumberType) == 1) {
237 NumberType value = (NumberType)0;
240class Float :
public Number<float, Type::Float> {
242 using NumT = Number<float, Type::Float>;
246 void Visit(Visitor *);
247 PartPtr clone()
override;
249class Double :
public Number<double, Type::Double> {
255 void Visit(Visitor *);
256 PartPtr clone()
override;
259class Uint8 :
public Number<uint8_t, Type::Uint8> {
265 void Visit(Visitor *);
266 PartPtr clone()
override;
268class Uint16 :
public Number<uint16_t, Type::Uint16> {
274 void Visit(Visitor *);
275 PartPtr clone()
override;
277class Uint32 :
public Number<uint32_t, Type::Uint32> {
283 void Visit(Visitor *);
284 PartPtr clone()
override;
286class Uint64 :
public Number<uint64_t, Type::Uint64> {
292 void Visit(Visitor *);
293 PartPtr clone()
override;
296class Int8 :
public Number<int8_t, Type::Int8> {
302 void Visit(Visitor *);
303 PartPtr clone()
override;
305class Int16 :
public Number<int16_t, Type::Int16> {
311 void Visit(Visitor *);
312 PartPtr clone()
override;
314class Int32 :
public Number<int32_t, Type::Int32> {
320 void Visit(Visitor *);
321 PartPtr clone()
override;
324class Int64 :
public Number<int64_t, Type::Int64> {
330 void Visit(Visitor *);
331 PartPtr clone()
override;
340 virtual void VisitRecord(
Record *) = 0;
342 virtual void VisitString(
String *) = 0;
344 virtual void VisitFloat(Float *) = 0;
345 virtual void VisitDouble(Double *) = 0;
347 virtual void VisitUint8(Uint8 *) = 0;
348 virtual void VisitUint16(Uint16 *) = 0;
349 virtual void VisitUint32(Uint32 *) = 0;
350 virtual void VisitUint64(Uint64 *) = 0;
352 virtual void VisitInt8(Int8 *) = 0;
353 virtual void VisitInt16(Int16 *) = 0;
354 virtual void VisitInt32(Int32 *) = 0;
355 virtual void VisitInt64(Int64 *) = 0;
362 virtual void VisitAnyFloat(
const std::string &name,
double value,
364 virtual void VisitAnyInt(
const std::string &name, int64_t value,
366 virtual void VisitAnyUint(
const std::string &name, uint64_t value,
370 void VisitFloat(Float *)
override;
371 void VisitDouble(Double *)
override;
374 void VisitUint8(Uint8 *)
override;
375 void VisitUint16(Uint16 *)
override;
376 void VisitUint32(Uint32 *)
override;
377 void VisitUint64(Uint64 *)
override;
380 void VisitInt8(Int8 *)
override;
381 void VisitInt16(Int16 *)
override;
382 void VisitInt32(Int32 *)
override;
383 void VisitInt64(Int64 *)
override;
NumberType get_value()
Definition types.hpp:191
Number(std::string field_name, FetchFunc fetcher=[]() { return(NumberType) 0;})
Definition types.hpp:175
void pprint(std::stringstream &ss, size_t indent) const override
Definition types.hpp:197
std::function< NumberType()> FetchFunc
Definition types.hpp:170
void pprint_data(std::stringstream &ss, size_t indent) const override
Definition types.hpp:206
void set_value(NumberType val)
Definition types.hpp:187
void write_schema(PacketWriter &sofar) const override
Definition types.hpp:227
void write_message(PacketWriter &sofar) const override
Definition types.hpp:235
void read_data_from_message(PacketReader &reader) override
Definition types.hpp:220
void fetch() override
Definition types.hpp:182
void write_number(const Number &num)
Definition protocol.hpp:355
void write_string(const std::string &str)
Definition protocol.cpp:219
void write_type(Type t)
Definition protocol.cpp:214
Definition protocol.hpp:154
Part(std::string name)
Definition protocol.cpp:92
void write_schema(PacketWriter &sofar) const override
Definition types.cpp:81
void read_data_from_message(PacketReader &reader) override
Definition types.cpp:73
void write_message(PacketWriter &sofar) const override
Definition types.cpp:93
Record(std::string name)
Definition types.cpp:8
void fetch() override
Definition types.cpp:63
void set_fields(std::vector< PartPtr > fields)
Definition types.cpp:47
void fetch() override
Definition types.cpp:146
void response() override
Definition types.cpp:150
void write_message(PacketWriter &sofar) const override
Definition types.cpp:203
void pprint_data(std::stringstream &ss, size_t indent) const override
Definition types.cpp:187
String(std::string name, FetchFunc fetcher=[]() { return "no value";})
Definition types.cpp:141
void read_data_from_message(PacketReader &reader) override
Definition types.cpp:170
void pprint(std::stringstream &ss, size_t indent) const override
Definition types.cpp:177
void write_schema(PacketWriter &sofar) const override
Definition types.cpp:195
std::string get_value()
Definition types.cpp:159
void set_value(std::string new_value)
Definition types.cpp:155