P4C
The P4 Compiler
Loading...
Searching...
No Matches
marshal.h
1
18
19#ifndef BACKENDS_TOFINO_BF_P4C_PARDE_MARSHAL_H_
20#define BACKENDS_TOFINO_BF_P4C_PARDE_MARSHAL_H_
21
22#include <iostream>
23
24#include "backends/tofino/bf-p4c/specs/gress.h"
25#include "lib/cstring.h"
26
27namespace P4 {
28
29class JSONGenerator;
30class JSONLoader;
31
32struct MarshaledFrom {
33 // use those two to uniquely identify a field.
34 gress_t gress;
35 cstring field_name;
41 // size_t post_padding;
42
43 [[nodiscard]] std::string toString() const;
44
45 bool operator==(const MarshaledFrom &other) const {
46 return gress == other.gress && field_name == other.field_name &&
47 pre_padding == other.pre_padding;
48 }
49
51 void toJSON(JSONGenerator &json) const;
52 static MarshaledFrom fromJSON(JSONLoader &json);
53
54 friend std::ostream &operator<<(std::ostream &s, const MarshaledFrom &m);
55
56 MarshaledFrom() : gress(INGRESS), field_name(cstring::empty), pre_padding(0) {}
57 MarshaledFrom(gress_t gress, cstring name) : gress(gress), field_name(name), pre_padding(0) {}
58 MarshaledFrom(gress_t gress, cstring name, size_t pre_padding)
59 : gress(gress), field_name(name), pre_padding(pre_padding) {}
60};
61
62inline std::ostream &operator<<(std::ostream &s, const MarshaledFrom &m) {
63 s << "(" << m.gress << ", " << m.field_name << ", " << m.pre_padding << ")";
64 return s;
65}
66
67} // namespace P4
68
69#endif /* BACKENDS_TOFINO_BF_P4C_PARDE_MARSHAL_H_ */
Definition json_generator.h:39
Definition json_loader.h:41
Definition cstring.h:85
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:24
Definition bson.cpp:69
Definition marshal.h:32
size_t pre_padding
Definition marshal.h:40
void toJSON(JSONGenerator &json) const
JSON serialization/deserialization.
Definition marshal.cpp:31
std::string toString() const
Definition marshal.cpp:25