6 #ifndef BITCOIN_UNIVALUE_INCLUDE_UNIVALUE_H 7 #define BITCOIN_UNIVALUE_INCLUDE_UNIVALUE_H 15 #include <type_traits> 27 template <
typename Ref,
typename T = std::remove_cv_t<std::remove_reference_t<Ref>>,
28 std::enable_if_t<std::is_
floating_po
int_v<T> ||
29 std::is_same_v<
bool, T> ||
30 std::is_
signed_v<T> || std::is_
unsigned_v<T> ||
31 std::is_constructible_v<std::
string, T>,
35 if constexpr (std::is_floating_point_v<T>) {
37 }
else if constexpr (std::is_same_v<bool, T>) {
39 }
else if constexpr (std::is_signed_v<T>) {
41 }
else if constexpr (std::is_unsigned_v<T>) {
44 setStr(std::string{std::forward<Ref>(
val)});
68 void getObjMap(std::map<std::string,UniValue>& kv)
const;
69 bool checkObject(
const std::map<std::string,UniValue::VType>& memberTypes)
const;
72 bool exists(
const std::string& key)
const {
size_t i;
return findKey(key, i); }
84 void push_backV(
const std::vector<UniValue>& vec);
92 std::string
write(
unsigned int prettyIndent = 0,
93 unsigned int indentLevel = 0)
const;
95 bool read(
const char *raw,
size_t len);
96 bool read(
const char *raw) {
return read(raw, strlen(raw)); }
97 bool read(
const std::string& rawStr) {
98 return read(rawStr.data(), rawStr.size());
108 bool findKey(
const std::string& key,
size_t& retIdx)
const;
109 void writeArray(
unsigned int prettyIndent,
unsigned int indentLevel, std::string& s)
const;
110 void writeObject(
unsigned int prettyIndent,
unsigned int indentLevel, std::string& s)
const;
115 const std::vector<std::string>&
getKeys()
const;
116 const std::vector<UniValue>&
getValues()
const;
117 template <
typename Int>
120 const std::string&
get_str()
const;
136 template <
typename Int>
139 static_assert(std::is_integral<Int>::value);
142 const auto [first_nonmatching, error_condition] = std::from_chars(
val.data(),
val.data() +
val.size(), result);
143 if (first_nonmatching !=
val.data() +
val.size() || error_condition != std::errc{}) {
144 throw std::runtime_error(
"JSON integer out of range");
166 unsigned int& consumed,
const char *raw,
const char *end);
206 #endif // BITCOIN_UNIVALUE_INCLUDE_UNIVALUE_H
void setStr(const std::string &val)
void push_back(UniValue val)
static bool jsonTokenIsValue(enum jtokentype jtt)
bool read(const std::string &rawStr)
const std::vector< UniValue > & getValues() const
void setNumStr(const std::string &val)
bool read(const char *raw, size_t len)
void pushKVs(UniValue obj)
bool read(const char *raw)
bool findKey(const std::string &key, size_t &retIdx) const
const std::string & get_str() const
enum VType getType() const
const UniValue & get_array() const
std::vector< UniValue > values
const std::vector< std::string > & getKeys() const
const std::string & getValStr() const
const UniValue & find_value(const UniValue &obj, const std::string &name)
static bool json_isspace(int ch)
const UniValue & operator[](const std::string &key) const
enum jtokentype getJsonToken(std::string &tokenVal, unsigned int &consumed, const char *raw, const char *end)
const char * uvTypeName(UniValue::VType t)
void getObjMap(std::map< std::string, UniValue > &kv) const
bool exists(const std::string &key) const
std::string write(unsigned int prettyIndent=0, unsigned int indentLevel=0) const
void push_backV(const std::vector< UniValue > &vec)
bool checkObject(const std::map< std::string, UniValue::VType > &memberTypes) const
void pushKV(std::string key, UniValue val)
const UniValue & get_obj() const
void writeObject(unsigned int prettyIndent, unsigned int indentLevel, std::string &s) const
std::vector< std::string > keys
const UniValue NullUniValue
friend const UniValue & find_value(const UniValue &obj, const std::string &name)
void writeArray(unsigned int prettyIndent, unsigned int indentLevel, std::string &s) const
void setFloat(double val)
void setInt(uint64_t val)
void __pushKV(std::string key, UniValue val)
UniValue(UniValue::VType initialType, const std::string &initialStr="")
void checkType(const VType &expected) const