77#define __UNIVALUE_H__
88
99#include < stdint.h>
10+ #include < string.h>
1011
1112#include < string>
1213#include < vector>
@@ -69,10 +70,11 @@ class UniValue {
6970 size_t size () const { return values.size (); }
7071
7172 bool getBool () const { return isTrue (); }
72- bool checkObject (const std::map<std::string,UniValue::VType>& memberTypes);
73+ void getObjMap (std::map<std::string,UniValue>& kv) const ;
74+ bool checkObject (const std::map<std::string,UniValue::VType>& memberTypes) const ;
7375 const UniValue& operator [](const std::string& key) const ;
74- const UniValue& operator [](unsigned int index) const ;
75- bool exists (const std::string& key) const { return ( findKey (key) >= 0 ); }
76+ const UniValue& operator [](size_t index) const ;
77+ bool exists (const std::string& key) const { size_t i; return findKey (key, i ); }
7678
7779 bool isNull () const { return (typ == VNULL); }
7880 bool isTrue () const { return (typ == VBOOL) && (val == " 1" ); }
@@ -92,8 +94,25 @@ class UniValue {
9294 std::string s (val_);
9395 return push_back (s);
9496 }
97+ bool push_back (uint64_t val_) {
98+ UniValue tmpVal (val_);
99+ return push_back (tmpVal);
100+ }
101+ bool push_back (int64_t val_) {
102+ UniValue tmpVal (val_);
103+ return push_back (tmpVal);
104+ }
105+ bool push_back (int val_) {
106+ UniValue tmpVal (val_);
107+ return push_back (tmpVal);
108+ }
109+ bool push_back (double val_) {
110+ UniValue tmpVal (val_);
111+ return push_back (tmpVal);
112+ }
95113 bool push_backV (const std::vector<UniValue>& vec);
96114
115+ void __pushKV (const std::string& key, const UniValue& val);
97116 bool pushKV (const std::string& key, const UniValue& val);
98117 bool pushKV (const std::string& key, const std::string& val_) {
99118 UniValue tmpVal (VSTR, val_);
@@ -124,9 +143,10 @@ class UniValue {
124143 std::string write (unsigned int prettyIndent = 0 ,
125144 unsigned int indentLevel = 0 ) const ;
126145
127- bool read (const char *raw);
146+ bool read (const char *raw, size_t len);
147+ bool read (const char *raw) { return read (raw, strlen (raw)); }
128148 bool read (const std::string& rawStr) {
129- return read (rawStr.c_str ());
149+ return read (rawStr.data (), rawStr. size ());
130150 }
131151
132152private:
@@ -135,7 +155,7 @@ class UniValue {
135155 std::vector<std::string> keys;
136156 std::vector<UniValue> values;
137157
138- int findKey (const std::string& key) const ;
158+ bool findKey (const std::string& key, size_t & retIdx ) const ;
139159 void writeArray (unsigned int prettyIndent, unsigned int indentLevel, std::string& s) const ;
140160 void writeObject (unsigned int prettyIndent, unsigned int indentLevel, std::string& s) const ;
141161
@@ -240,7 +260,7 @@ enum jtokentype {
240260};
241261
242262extern enum jtokentype getJsonToken (std::string& tokenVal,
243- unsigned int & consumed, const char *raw);
263+ unsigned int & consumed, const char *raw, const char *end );
244264extern const char *uvTypeName (UniValue::VType t);
245265
246266static inline bool jsonTokenIsValue (enum jtokentype jtt)
0 commit comments