P4C
The P4 Compiler
Loading...
Searching...
No Matches
JsonObjects.h
1/*
2 * SPDX-FileCopyrightText: 2013 Barefoot Networks, Inc.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef BACKENDS_BMV2_COMMON_JSONOBJECTS_H_
8#define BACKENDS_BMV2_COMMON_JSONOBJECTS_H_
9
10#include <map>
11
12#include "lib/json.h"
13#include "lib/ordered_map.h"
14
15namespace P4::BMV2 {
16
18 public:
24
27 void add_program_info(const cstring &name);
28
30 void add_meta_info();
31
38 unsigned add_header_type(const cstring &name, Util::JsonArray *&fields, unsigned max_length);
39
44 unsigned add_union_type(const cstring &name, Util::JsonArray *&fields);
45
51 unsigned add_union(const cstring &type, Util::JsonArray *&fields, const cstring &name);
52
59 unsigned add_header_type(const cstring &name);
60
64 void add_header_field(const cstring &name, Util::JsonArray *&field);
65
70 unsigned add_header(const cstring &type, const cstring &name);
71
76 unsigned add_metadata(const cstring &type, const cstring &name);
77
83 void add_header_stack(const cstring &type, const cstring &name, const unsigned size,
84 const std::vector<unsigned> &header_ids);
85
91 void add_header_union_stack(const cstring &type, const cstring &name, const unsigned size,
92 const std::vector<unsigned> &header_ids);
93
97 void add_error(const cstring &name, const unsigned type);
98
103 void add_enum(const cstring &enum_name, const cstring &entry_name, const unsigned entry_value);
104
108 unsigned add_parser(const cstring &name);
109
114 unsigned add_parser_state(const unsigned id, const cstring &state_name);
115
119 void add_parser_transition(const unsigned id, Util::IJson *transition);
120
124 void add_parser_op(const unsigned id, Util::IJson *op);
125
129 void add_parser_transition_key(const unsigned id, Util::IJson *key);
130
135 void add_parse_vset(const cstring &name, const unsigned bitwidth, const big_int &size);
136
142 unsigned add_action(const cstring &name, Util::JsonArray *&params, Util::JsonArray *&body);
143
149 void add_extern_attribute(const cstring &name, const cstring &type, const cstring &value,
150 Util::JsonArray *attributes);
151
156 void add_extern(const cstring &name, const cstring &type, Util::JsonArray *attributes);
157
160 JsonObjects();
161
165
170
175
186 Util::JsonArray *get_field_list_contents(unsigned id) const;
187
188 std::map<unsigned, Util::JsonObject *> map_parser;
189 std::map<unsigned, Util::JsonObject *> map_parser_state;
190
191 Util::JsonObject *toplevel;
192 Util::JsonObject *meta;
193 Util::JsonArray *actions;
194 Util::JsonArray *calculations;
195 Util::JsonArray *checksums;
196 Util::JsonArray *counters;
197 Util::JsonArray *deparsers;
198 Util::JsonArray *enums;
199 Util::JsonArray *errors;
200 Util::JsonArray *externs;
201 Util::JsonArray *field_lists;
202 Util::JsonArray *headers;
203 Util::JsonArray *header_stacks;
204 Util::JsonArray *header_types;
205 Util::JsonArray *header_union_types;
206 Util::JsonArray *header_unions;
207 Util::JsonArray *header_union_stacks;
210 Util::JsonArray *learn_lists;
211 Util::JsonArray *meter_arrays;
212 Util::JsonArray *parsers;
213 Util::JsonArray *parse_vsets;
214 Util::JsonArray *pipelines;
215 Util::JsonArray *register_arrays;
216 Util::JsonArray *force_arith;
217 Util::JsonArray *field_aliases;
218};
219
220} // namespace P4::BMV2
221
222#endif /* BACKENDS_BMV2_COMMON_JSONOBJECTS_H_ */
void add_extern(const cstring &name, const cstring &type, Util::JsonArray *attributes)
Adds an extern instance to the JSON representation.
Definition JsonObjects.cpp:367
void add_header_stack(const cstring &type, const cstring &name, const unsigned size, const std::vector< unsigned > &header_ids)
Adds a header stack to the JSON representation.
Definition JsonObjects.cpp:205
void add_header_field(const cstring &name, Util::JsonArray *&field)
Adds a set of fields to an existing header type.
Definition JsonObjects.cpp:157
Util::JsonArray * create_parameters(Util::JsonObject *object)
Creates a JSON array named 'parameters' in a parent JsonObject.
Definition JsonObjects.cpp:77
void add_parse_vset(const cstring &name, const unsigned bitwidth, const big_int &size)
Adds a parse vset to the JSON representation.
Definition JsonObjects.cpp:333
void add_program_info(const cstring &name)
Adds program information to the top-level JsonObject.
Definition JsonObjects.cpp:81
void add_parser_op(const unsigned id, Util::IJson *op)
Adds a parser operation to an existing parser state in the JSON representation.
Definition JsonObjects.cpp:312
Util::JsonArray * append_array(Util::JsonArray *parent)
Appends a JSON array to a parent JSON array.
Definition JsonObjects.cpp:71
void add_error(const cstring &name, const unsigned type)
Adds an error to the JSON representation.
Definition JsonObjects.cpp:237
unsigned add_metadata(const cstring &type, const cstring &name)
Creates a metadata header instance in JSON.
Definition JsonObjects.cpp:192
unsigned add_header(const cstring &type, const cstring &name)
Creates a header instance in JSON.
Definition JsonObjects.cpp:165
unsigned add_action(const cstring &name, Util::JsonArray *&params, Util::JsonArray *&body)
Adds an action to the JSON representation.
Definition JsonObjects.cpp:344
unsigned add_parser_state(const unsigned id, const cstring &state_name)
Adds a parser state to an existing parser in the JSON representation.
Definition JsonObjects.cpp:281
unsigned add_header_type(const cstring &name, Util::JsonArray *&fields, unsigned max_length)
Create a header type in json.
Definition JsonObjects.cpp:98
static Util::JsonObject * find_object_by_name(Util::JsonArray *array, const cstring &name)
Finds an object in a JSON array by its name.
Definition JsonObjects.cpp:54
void add_parser_transition_key(const unsigned id, Util::IJson *key)
Adds a parser transition key to an existing parser state in the JSON representation.
Definition JsonObjects.cpp:321
unsigned add_parser(const cstring &name)
Adds a parser to the JSON representation.
Definition JsonObjects.cpp:267
void add_enum(const cstring &enum_name, const cstring &entry_name, const unsigned entry_value)
Adds a single enum entry to the JSON representation.
Definition JsonObjects.cpp:243
Util::JsonObject * create_primitive(Util::JsonArray *parent, cstring name)
Creates a primitive JsonObject in a parent JsonArray with the given name.
Util::JsonArray * insert_array_field(Util::JsonObject *parent, cstring name)
Inserts a JSON array into a parent object under a specified key.
Definition JsonObjects.cpp:65
void add_meta_info()
Adds meta information to the JsonObject.
Definition JsonObjects.cpp:83
Util::JsonArray * get_field_list_contents(unsigned id) const
Retrieves the contents of a field list identified by its ID.
Definition JsonObjects.cpp:43
void add_extern_attribute(const cstring &name, const cstring &type, const cstring &value, Util::JsonArray *attributes)
Adds an extern attribute to the JSON representation.
Definition JsonObjects.cpp:358
unsigned add_union(const cstring &type, Util::JsonArray *&fields, const cstring &name)
Creates a header union instance in JSON.
Definition JsonObjects.cpp:178
unsigned add_union_type(const cstring &name, Util::JsonArray *&fields)
Creates a union type in JSON.
Definition JsonObjects.cpp:121
JsonObjects()
Constructs a new JsonObjects instance. Initializes the top-level JsonObject and other member arrays.
Definition JsonObjects.cpp:15
void add_header_union_stack(const cstring &type, const cstring &name, const unsigned size, const std::vector< unsigned > &header_ids)
Adds a header union stack to the JSON representation.
Definition JsonObjects.cpp:221
void add_parser_transition(const unsigned id, Util::IJson *transition)
Adds a parser transition to an existing parser state in the JSON representation.
Definition JsonObjects.cpp:301
Definition lib/json.h:41
Definition lib/json.h:128
Definition lib/json.h:177
Definition cstring.h:85
Definition ordered_map.h:32
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition action.cpp:9