1#ifndef IR_JSON_PARSER_H_
2#define IR_JSON_PARSER_H_
10#include "lib/big_int_util.h"
11#include "lib/castable.h"
12#include "lib/cstring.h"
13#include "lib/string_map.h"
20 JsonData(
const JsonData &) =
default;
21 JsonData(JsonData &&) =
default;
22 JsonData &operator=(
const JsonData &) =
default;
23 JsonData &operator=(JsonData &&) =
default;
26 virtual ~JsonData() =
default;
28 DECLARE_TYPEINFO(JsonData);
31class JsonNumber :
public JsonData {
33 explicit JsonNumber(big_int v) : val(v) {}
34 operator int()
const {
return int(val); }
37 DECLARE_TYPEINFO(JsonNumber, JsonData);
40class JsonBoolean :
public JsonData {
42 JsonBoolean(
bool v) : val(v) {}
43 operator bool()
const {
return val; }
46 DECLARE_TYPEINFO(JsonBoolean, JsonData);
49class JsonString :
public JsonData,
public std::string {
52 explicit JsonString(std::string_view s) : std::string(s) {}
53 JsonString(
const JsonString &) =
default;
54 JsonString(JsonString &&) =
default;
55 JsonString &operator=(
const JsonString &) & =
default;
56 JsonString &operator=(JsonString &&) & =
default;
59 DECLARE_TYPEINFO(JsonString, JsonData);
62class JsonVector :
public JsonData,
public std::vector<std::unique_ptr<JsonData>> {
65 explicit JsonVector(std::vector<std::unique_ptr<JsonData>> &&v)
66 : std::vector<std::unique_ptr<JsonData>>(std::move(v)) {}
67 JsonVector &operator=(
const JsonVector &) =
delete;
68 JsonVector &operator=(JsonVector &&) =
default;
70 DECLARE_TYPEINFO(JsonVector, JsonData);
73class JsonObject :
public JsonData,
public string_map<std::unique_ptr<JsonData>> {
76 JsonObject(
const JsonObject &obj) =
delete;
77 JsonObject &operator=(JsonObject &&) =
default;
78 explicit JsonObject(string_map<std::unique_ptr<JsonData>> &&v)
79 : string_map<std::unique_ptr<JsonData>>(std::move(v)) {}
81 DECLARE_TYPEINFO(JsonObject, JsonData);
85 DECLARE_TYPEINFO(
JsonNull, JsonData);
88std::string getIndent(
int l);
90std::ostream &operator<<(std::ostream &out,
const JsonData *json);
91inline std::ostream &operator<<(std::ostream &out,
const JsonData &json) {
return out << &json; }
92std::istream &operator>>(std::istream &in, std::unique_ptr<JsonData> &json);
Definition json_parser.h:17
Definition json_parser.h:84
TODO: this is not really specific to BMV2, it should reside somewhere else.
Definition applyOptionsPragmas.cpp:24