diff --git a/uppsrc/Core/JSON.h b/uppsrc/Core/JSON.h index 13104e3cb..29cf79a0d 100644 --- a/uppsrc/Core/JSON.h +++ b/uppsrc/Core/JSON.h @@ -1,360 +1,361 @@ -Value ParseJSON(CParser& p); -Value ParseJSON(const char *s); - -inline String AsJSON(int i) { return IsNull(i) ? "null" : AsString(i); } -inline String AsJSON(double n) { return IsNull(n) ? "null" : AsString(n); } -inline String AsJSON(bool b) { return b ? "true" : "false"; } -inline String AsJSON(const String& s) { return AsCString(s, INT_MAX, NULL, ASCSTRING_JSON); } -inline String AsJSON(const WString& s) { return AsCString(s.ToString(), INT_MAX, NULL, ASCSTRING_JSON); } -inline String AsJSON(const char *s) { return AsCString(s, INT_MAX, NULL, ASCSTRING_JSON); } - -String AsJSON(const Value& v, const String& indent, bool pretty); -String AsJSON(const Value& v, bool pretty = false); - -class JsonArray; - -class Json { - String text; - -public: - Json& CatRaw(const char *key, const String& val); - - String ToString() const { return "{" + text + "}"; } - String operator~() const { return ToString(); } - operator String() const { return ToString(); } - - operator bool() const { return text.GetCount(); } - - Json& operator()(const char *key, const Value& value) { return CatRaw(key, AsJSON(value)); } - Json& operator()(const char *key, int i) { return CatRaw(key, AsJSON(i)); } - Json& operator()(const char *key, double n) { return CatRaw(key, AsJSON(n)); } - Json& operator()(const char *key, bool b) { return CatRaw(key, AsJSON(b)); } - Json& operator()(const char *key, const String& s) { return CatRaw(key, AsJSON(s)); } - Json& operator()(const char *key, const WString& s) { return CatRaw(key, AsJSON(s)); } - Json& operator()(const char *key, const char *s) { return CatRaw(key, AsJSON(s)); } - Json& operator()(const char *key, const Json& object) { return CatRaw(key, ~object); } - Json& operator()(const char *key, const JsonArray& array); - - Json() {} - Json(const char *key, const Value& value) { CatRaw(key, AsJSON(value)); } - Json(const char *key, int i) { CatRaw(key, AsJSON(i)); } - Json(const char *key, double n) { CatRaw(key, AsJSON(n)); } - Json(const char *key, bool b) { CatRaw(key, AsJSON(b)); } - Json(const char *key, const String& s) { CatRaw(key, AsJSON(s)); } - Json(const char *key, const WString& s) { CatRaw(key, AsJSON(s)); } - Json(const char *key, const char *s) { CatRaw(key, AsJSON(s)); } - Json(const char *key, const Json& object) { CatRaw(key, ~object); } - Json(const char *key, const JsonArray& array) { operator()(key, array); } -}; - -class JsonArray { - String text; - -public: - JsonArray& CatRaw(const String& val); - - String ToString() const { return "[" + text + "]"; } - String operator~() const { return ToString(); } - operator String() const { return ToString(); } - - operator bool() const { return text.GetCount(); } - - JsonArray& operator<<(const Value& value) { return CatRaw(AsJSON(value)); } - JsonArray& operator<<(int i) { return CatRaw(AsJSON(i)); } - JsonArray& operator<<(double n) { return CatRaw(AsJSON(n)); } - JsonArray& operator<<(bool b) { return CatRaw(AsJSON(b)); } - JsonArray& operator<<(const String& s) { return CatRaw(AsJSON(s)); } - JsonArray& operator<<(const WString& s) { return CatRaw(AsJSON(s)); } - JsonArray& operator<<(const char *s) { return CatRaw(AsJSON(s)); } - JsonArray& operator<<(const Json& object) { return CatRaw(~object); } - JsonArray& operator<<(const JsonArray& array) { return CatRaw(~array); } - - JsonArray() {} -}; - -inline Json& Json::operator()(const char *key, const JsonArray& array) -{ - return CatRaw(key, array); -} - -class JsonIO { - const Value *src; - One map; - Value tgt; - -public: - bool IsLoading() const { return src; } - bool IsStoring() const { return !src; } - - const Value& Get() const { ASSERT(IsLoading()); return *src; } - void Set(const Value& v) { ASSERT(IsStoring() && !map); tgt = v; } - void Put(Value& v) { ASSERT(IsStoring()); if(map) v = *map; else v = tgt; } - Value GetResult() const { ASSERT(IsStoring()); return map ? Value(*map) : tgt; } - - template - JsonIO& operator()(const char *key, T& value); - - JsonIO(const Value& src) : src(&src) {} - JsonIO() { src = NULL; } -}; - -struct JsonizeError : Exc { - JsonizeError(const String& s) : Exc(s) {} -}; - -template -void Jsonize(JsonIO& io, T& var) -{ - var.Jsonize(io); -} - -template -JsonIO& JsonIO::operator()(const char *key, T& value) -{ - if(IsLoading()) { - const Value& v = (*src)[key]; - if(!v.IsVoid()) { - JsonIO jio(v); - Jsonize(jio, value); - } - } - else { - ASSERT(tgt.IsVoid()); - if(!map) - map.Create(); - JsonIO jio; - Jsonize(jio, value); - if(jio.map) - map->Add(key, *jio.map); - else - map->Add(key, jio.tgt); - } - return *this; -} - -template -Value StoreAsJsonValue(const T& var) -{ - JsonIO io; - Jsonize(io, const_cast(var)); - return io.GetResult(); -} - -template -void LoadFromJsonValue(T& var, const Value& x) -{ - JsonIO io(x); - Jsonize(io, var); -} - -template -String StoreAsJson(const T& var, bool pretty = false) -{ - return AsJSON(StoreAsJsonValue(var), pretty); -} - -template -bool LoadFromJson(T& var, const char *json) -{ - try { - Value jv = ParseJSON(json); - if(jv.IsError()) - return false; - LoadFromJsonValue(var, jv); - } - catch(JsonizeError) { - return false; - } - return true; -} - -String sJsonFile(const char *file); - -template -bool StoreAsJsonFile(const T& var, const char *file, bool pretty = false) -{ - return SaveFile(sJsonFile(file), StoreAsJson(var, pretty));; -} - -template -bool LoadFromJsonFile(T& var, const char *file = NULL) -{ - return LoadFromJson(var, LoadFile(sJsonFile(file))); -} - -template<> void Jsonize(JsonIO& io, int& var); -template<> void Jsonize(JsonIO& io, int16& var); -template<> void Jsonize(JsonIO& io, int64& var); -template<> void Jsonize(JsonIO& io, double& var); -template<> void Jsonize(JsonIO& io, bool& var); -template<> void Jsonize(JsonIO& io, String& var); -template<> void Jsonize(JsonIO& io, WString& var); -template<> void Jsonize(JsonIO& io, Date& var); -template<> void Jsonize(JsonIO& io, Time& var); - -template -void JsonizeArray(JsonIO& io, T& array) -{ - if(io.IsLoading()) { - const Value& va = io.Get(); - array.SetCount(va.GetCount()); - for(int i = 0; i < va.GetCount(); i++) { - JsonIO jio(va[i]); - Jsonize(jio, array[i]); - } - } - else { - Vector va; - va.SetCount(array.GetCount()); - for(int i = 0; i < array.GetCount(); i++) { - JsonIO jio; - Jsonize(jio, array[i]); - jio.Put(va[i]); - } - io.Set(ValueArray(va)); - } -} - -template -void Jsonize(JsonIO& io, Vector& var) -{ - JsonizeArray, T>(io, var); -} - -template -void Jsonize(JsonIO& io, Array& var) -{ - JsonizeArray, T>(io, var); -} - -template -void JsonizeMap(JsonIO& io, T& map, const char *keyid, const char *valueid) -{ - if(io.IsLoading()) { - map.Clear(); - const Value& va = io.Get(); - map.Reserve(va.GetCount()); - for(int i = 0; i < va.GetCount(); i++) { - K key; - V value; - LoadFromJsonValue(key, va[i][keyid]); - LoadFromJsonValue(value, va[i][valueid]); - map.Add(key, value); - } - } - else { - Vector va; - va.SetCount(map.GetCount()); - for(int i = 0; i < map.GetCount(); i++) - if(!map.IsUnlinked(i)) { - ValueMap item; - item.Add(keyid, StoreAsJsonValue(map.GetKey(i))); - item.Add(valueid, StoreAsJsonValue(map[i])); - va[i] = item; - } - io.Set(ValueArray(va)); - } -} - -template -void Jsonize(JsonIO& io, VectorMap& map) -{ - JsonizeMap, K, V>(io, map, "key", "value"); -} - -template -void Jsonize(JsonIO& io, ArrayMap& map) -{ - JsonizeMap, K, V>(io, map, "key", "value"); -} - -template -void JsonizeStringMap(JsonIO& io, T& map) -{ - if(io.IsLoading()) { - map.Clear(); - const ValueMap& va = io.Get(); - map.Reserve(va.GetCount()); - for(int i = 0; i < va.GetCount(); i++) { - V value; - String key = va.GetKey(i); - LoadFromJsonValue(key, va.GetKey(i)); - LoadFromJsonValue(value, va.GetValue(i)); - map.Add(key, value); - } - } - else { - Index index; - Vector values; - index.Reserve(map.GetCount()); - values.Reserve(map.GetCount()); - for (int i=0; i -void StringMap(JsonIO& io, VectorMap& map) -{ - JsonizeStringMap, K, V>(io, map); -} - -template -void StringMap(JsonIO& io, ArrayMap& map) -{ - JsonizeStringMap, K, V>(io, map); -} - -template -void JsonizeIndex(JsonIO& io, T& index) -{ - if(io.IsLoading()) { - const Value& va = io.Get(); - index.Reserve(va.GetCount()); - for(int i = 0; i < va.GetCount(); i++) { - V v; - LoadFromJsonValue(v, va[i]); - index.Add(v); - } - } - else { - Vector va; - for(int i = 0; i < index.GetCount(); i++) - if(!index.IsUnlinked(i)) - va.Add(StoreAsJsonValue(index[i])); - io.Set(ValueArray(va)); - } -} - -template -void Jsonize(JsonIO& io, Index& var) -{ - JsonizeIndex, T>(io, var); -} - -template -void Jsonize(JsonIO& io, ArrayIndex& var) -{ - JsonizeIndex, T>(io, var); -} - -template -void JsonizeBySerialize(JsonIO& jio, T& x) -{ - String h; - if(jio.IsStoring()) - h = HexString(StoreAsString(x)); - jio("data", h); - if(jio.IsLoading()) - try { - LoadFromString(x, ScanHexString(h)); - } - catch(LoadingError) { - throw JsonizeError("jsonize by serialize error"); - } -} +Value ParseJSON(CParser& p); +Value ParseJSON(const char *s); + +inline String AsJSON(int i) { return IsNull(i) ? "null" : AsString(i); } +inline String AsJSON(double n) { return IsNull(n) ? "null" : AsString(n); } +inline String AsJSON(bool b) { return b ? "true" : "false"; } +inline String AsJSON(const String& s) { return AsCString(s, INT_MAX, NULL, ASCSTRING_JSON); } +inline String AsJSON(const WString& s) { return AsCString(s.ToString(), INT_MAX, NULL, ASCSTRING_JSON); } +inline String AsJSON(const char *s) { return AsCString(s, INT_MAX, NULL, ASCSTRING_JSON); } + +String AsJSON(const Value& v, const String& indent, bool pretty); +String AsJSON(const Value& v, bool pretty = false); + +class JsonArray; + +class Json { + String text; + +public: + Json& CatRaw(const char *key, const String& val); + + String ToString() const { return "{" + text + "}"; } + String operator~() const { return ToString(); } + operator String() const { return ToString(); } + + operator bool() const { return text.GetCount(); } + + Json& operator()(const char *key, const Value& value) { return CatRaw(key, AsJSON(value)); } + Json& operator()(const char *key, int i) { return CatRaw(key, AsJSON(i)); } + Json& operator()(const char *key, double n) { return CatRaw(key, AsJSON(n)); } + Json& operator()(const char *key, bool b) { return CatRaw(key, AsJSON(b)); } + Json& operator()(const char *key, const String& s) { return CatRaw(key, AsJSON(s)); } + Json& operator()(const char *key, const WString& s) { return CatRaw(key, AsJSON(s)); } + Json& operator()(const char *key, const char *s) { return CatRaw(key, AsJSON(s)); } + Json& operator()(const char *key, const Json& object) { return CatRaw(key, ~object); } + Json& operator()(const char *key, const JsonArray& array); + + Json() {} + Json(const char *key, const Value& value) { CatRaw(key, AsJSON(value)); } + Json(const char *key, int i) { CatRaw(key, AsJSON(i)); } + Json(const char *key, double n) { CatRaw(key, AsJSON(n)); } + Json(const char *key, bool b) { CatRaw(key, AsJSON(b)); } + Json(const char *key, const String& s) { CatRaw(key, AsJSON(s)); } + Json(const char *key, const WString& s) { CatRaw(key, AsJSON(s)); } + Json(const char *key, const char *s) { CatRaw(key, AsJSON(s)); } + Json(const char *key, const Json& object) { CatRaw(key, ~object); } + Json(const char *key, const JsonArray& array) { operator()(key, array); } +}; + +class JsonArray { + String text; + +public: + JsonArray& CatRaw(const String& val); + + String ToString() const { return "[" + text + "]"; } + String operator~() const { return ToString(); } + operator String() const { return ToString(); } + + operator bool() const { return text.GetCount(); } + + JsonArray& operator<<(const Value& value) { return CatRaw(AsJSON(value)); } + JsonArray& operator<<(int i) { return CatRaw(AsJSON(i)); } + JsonArray& operator<<(double n) { return CatRaw(AsJSON(n)); } + JsonArray& operator<<(bool b) { return CatRaw(AsJSON(b)); } + JsonArray& operator<<(const String& s) { return CatRaw(AsJSON(s)); } + JsonArray& operator<<(const WString& s) { return CatRaw(AsJSON(s)); } + JsonArray& operator<<(const char *s) { return CatRaw(AsJSON(s)); } + JsonArray& operator<<(const Json& object) { return CatRaw(~object); } + JsonArray& operator<<(const JsonArray& array) { return CatRaw(~array); } + + JsonArray() {} +}; + +inline Json& Json::operator()(const char *key, const JsonArray& array) +{ + return CatRaw(key, array); +} + +class JsonIO { + const Value *src; + One map; + Value tgt; + +public: + bool IsLoading() const { return src; } + bool IsStoring() const { return !src; } + + const Value& Get() const { ASSERT(IsLoading()); return *src; } + void Set(const Value& v) { ASSERT(IsStoring() && !map); tgt = v; } + + void Put(Value& v) { ASSERT(IsStoring()); if(map) v = *map; else v = tgt; } + Value GetResult() const { ASSERT(IsStoring()); return map ? Value(*map) : tgt; } + + template + JsonIO& operator()(const char *key, T& value); + + JsonIO(const Value& src) : src(&src) {} + JsonIO() { src = NULL; } +}; + +struct JsonizeError : Exc { + JsonizeError(const String& s) : Exc(s) {} +}; + +template +void Jsonize(JsonIO& io, T& var) +{ + var.Jsonize(io); +} + +template +JsonIO& JsonIO::operator()(const char *key, T& value) +{ + if(IsLoading()) { + const Value& v = (*src)[key]; + if(!v.IsVoid()) { + JsonIO jio(v); + Jsonize(jio, value); + } + } + else { + ASSERT(tgt.IsVoid()); + if(!map) + map.Create(); + JsonIO jio; + Jsonize(jio, value); + if(jio.map) + map->Add(key, *jio.map); + else + map->Add(key, jio.tgt); + } + return *this; +} + +template +Value StoreAsJsonValue(const T& var) +{ + JsonIO io; + Jsonize(io, const_cast(var)); + return io.GetResult(); +} + +template +void LoadFromJsonValue(T& var, const Value& x) +{ + JsonIO io(x); + Jsonize(io, var); +} + +template +String StoreAsJson(const T& var, bool pretty = false) +{ + return AsJSON(StoreAsJsonValue(var), pretty); +} + +template +bool LoadFromJson(T& var, const char *json) +{ + try { + Value jv = ParseJSON(json); + if(jv.IsError()) + return false; + LoadFromJsonValue(var, jv); + } + catch(JsonizeError) { + return false; + } + return true; +} + +String sJsonFile(const char *file); + +template +bool StoreAsJsonFile(const T& var, const char *file, bool pretty = false) +{ + return SaveFile(sJsonFile(file), StoreAsJson(var, pretty));; +} + +template +bool LoadFromJsonFile(T& var, const char *file = NULL) +{ + return LoadFromJson(var, LoadFile(sJsonFile(file))); +} + +template<> void Jsonize(JsonIO& io, int& var); +template<> void Jsonize(JsonIO& io, int16& var); +template<> void Jsonize(JsonIO& io, int64& var); +template<> void Jsonize(JsonIO& io, double& var); +template<> void Jsonize(JsonIO& io, bool& var); +template<> void Jsonize(JsonIO& io, String& var); +template<> void Jsonize(JsonIO& io, WString& var); +template<> void Jsonize(JsonIO& io, Date& var); +template<> void Jsonize(JsonIO& io, Time& var); + +template +void JsonizeArray(JsonIO& io, T& array) +{ + if(io.IsLoading()) { + const Value& va = io.Get(); + array.SetCount(va.GetCount()); + for(int i = 0; i < va.GetCount(); i++) { + JsonIO jio(va[i]); + Jsonize(jio, array[i]); + } + } + else { + Vector va; + va.SetCount(array.GetCount()); + for(int i = 0; i < array.GetCount(); i++) { + JsonIO jio; + Jsonize(jio, array[i]); + jio.Put(va[i]); + } + io.Set(ValueArray(va)); + } +} + +template +void Jsonize(JsonIO& io, Vector& var) +{ + JsonizeArray, T>(io, var); +} + +template +void Jsonize(JsonIO& io, Array& var) +{ + JsonizeArray, T>(io, var); +} + +template +void JsonizeMap(JsonIO& io, T& map, const char *keyid, const char *valueid) +{ + if(io.IsLoading()) { + map.Clear(); + const Value& va = io.Get(); + map.Reserve(va.GetCount()); + for(int i = 0; i < va.GetCount(); i++) { + K key; + V value; + LoadFromJsonValue(key, va[i][keyid]); + LoadFromJsonValue(value, va[i][valueid]); + map.Add(key, value); + } + } + else { + Vector va; + va.SetCount(map.GetCount()); + for(int i = 0; i < map.GetCount(); i++) + if(!map.IsUnlinked(i)) { + ValueMap item; + item.Add(keyid, StoreAsJsonValue(map.GetKey(i))); + item.Add(valueid, StoreAsJsonValue(map[i])); + va[i] = item; + } + io.Set(ValueArray(va)); + } +} + +template +void Jsonize(JsonIO& io, VectorMap& map) +{ + JsonizeMap, K, V>(io, map, "key", "value"); +} + +template +void Jsonize(JsonIO& io, ArrayMap& map) +{ + JsonizeMap, K, V>(io, map, "key", "value"); +} + +template +void JsonizeStringMap(JsonIO& io, T& map) +{ + if(io.IsLoading()) { + map.Clear(); + const ValueMap& va = io.Get(); + map.Reserve(va.GetCount()); + for(int i = 0; i < va.GetCount(); i++) { + V value; + String key = va.GetKey(i); + LoadFromJsonValue(key, va.GetKey(i)); + LoadFromJsonValue(value, va.GetValue(i)); + map.Add(key, value); + } + } + else { + Index index; + Vector values; + index.Reserve(map.GetCount()); + values.Reserve(map.GetCount()); + for (int i=0; i +void StringMap(JsonIO& io, VectorMap& map) +{ + JsonizeStringMap, K, V>(io, map); +} + +template +void StringMap(JsonIO& io, ArrayMap& map) +{ + JsonizeStringMap, K, V>(io, map); +} + +template +void JsonizeIndex(JsonIO& io, T& index) +{ + if(io.IsLoading()) { + const Value& va = io.Get(); + index.Reserve(va.GetCount()); + for(int i = 0; i < va.GetCount(); i++) { + V v; + LoadFromJsonValue(v, va[i]); + index.Add(v); + } + } + else { + Vector va; + for(int i = 0; i < index.GetCount(); i++) + if(!index.IsUnlinked(i)) + va.Add(StoreAsJsonValue(index[i])); + io.Set(ValueArray(va)); + } +} + +template +void Jsonize(JsonIO& io, Index& var) +{ + JsonizeIndex, T>(io, var); +} + +template +void Jsonize(JsonIO& io, ArrayIndex& var) +{ + JsonizeIndex, T>(io, var); +} + +template +void JsonizeBySerialize(JsonIO& jio, T& x) +{ + String h; + if(jio.IsStoring()) + h = HexString(StoreAsString(x)); + jio("data", h); + if(jio.IsLoading()) + try { + LoadFromString(x, ScanHexString(h)); + } + catch(LoadingError) { + throw JsonizeError("jsonize by serialize error"); + } +} diff --git a/uppsrc/Core/src.tpp/JSON$en-us.tpp b/uppsrc/Core/src.tpp/JSON$en-us.tpp index f4d02005a..a4881e94f 100644 --- a/uppsrc/Core/src.tpp/JSON$en-us.tpp +++ b/uppsrc/Core/src.tpp/JSON$en-us.tpp @@ -48,7 +48,7 @@ onst]_[_^Value^ Value][@(0.0.255) `&]_[*@3 v], [@(0.0.255) const]_[_^String^ Str ValueArray as JSON array. [%-*@3 indent] is prepended to each line. If [%-*@3 pretty] is true, JSON is encoded in lines, indenting each level of embedding, if it is false, JSON is as compact as -possible..&] +possible.&] [s3;%% &] [s4; &] [s5;:AsJSON`(const Value`&`,bool`): [_^String^ String]_[* AsJSON]([@(0.0.255) const]_[_^Value^ V diff --git a/uppsrc/Core/src.tpp/Jsonize$en-us.tpp b/uppsrc/Core/src.tpp/Jsonize$en-us.tpp new file mode 100644 index 000000000..e4e09c8c9 --- /dev/null +++ b/uppsrc/Core/src.tpp/Jsonize$en-us.tpp @@ -0,0 +1,184 @@ +topic "JsonIO and Jsonize framework"; +[2 $$0,0#00000000000000000000000000000000:Default] +[i448;a25;kKO9;2 $$1,0#37138531426314131252341829483380:class] +[l288;2 $$2,2#27521748481378242620020725143825:desc] +[0 $$3,0#96390100711032703541132217272105:end] +[H6;0 $$4,0#05600065144404261032431302351956:begin] +[i448;a25;kKO9;2 $$5,0#37138531426314131252341829483370:item] +[l288;a4;*@5;1 $$6,6#70004532496200323422659154056402:requirement] +[l288;i1121;b17;O9;~~~.1408;2 $$7,0#10431211400427159095818037425705:param] +[i448;b42;O9;2 $$8,8#61672508125594000341940100500538:tparam] +[b42;2 $$9,9#13035079074754324216151401829390:normal] +[{_} +[ {{10000@(113.42.0) [s0;%% [*@7;4 JsonIO and Jsonize framework]]}}&] +[s3; &] +[s1;:JsonIO`:`:class: [@(0.0.255)3 class][3 _][*3 JsonIO]&] +[s2;%% JsonIO represents a single JSON value in Jsonize framework. +It is used as parameter for Jsonize global function. Jsonize +global function has default templated definition that in turn +calls Jsonize method of object. However, when implementation +using method is not possible (e.g. for supported primitive types), +global templated specialization of Jsonize can be used.&] +[s3; &] +[ {{10000F(128)G(128)@1 [s0;%% [* Public Method List]]}}&] +[s3;%% &] +[s5;:JsonIO`:`:IsLoading`(`)const: [@(0.0.255) bool]_[* IsLoading]()_[@(0.0.255) const]&] +[s2;%% Returns true when retrieving data from JSON.&] +[s3; &] +[s4; &] +[s5;:JsonIO`:`:IsStoring`(`)const: [@(0.0.255) bool]_[* IsStoring]()_[@(0.0.255) const]&] +[s2;%% Returns true when storing data to JSON.&] +[s3; &] +[s4; &] +[s5;:JsonIO`:`:Get`(`)const: [@(0.0.255) const]_[_^Value^ Value][@(0.0.255) `&]_[* Get]()_[@(0.0.255) c +onst]&] +[s2;%% Returns the value of JSON node when loading.&] +[s3; &] +[s4; &] +[s5;:JsonIO`:`:Set`(const Value`&`): [@(0.0.255) void]_[* Set]([@(0.0.255) const]_[_^Value^ V +alue][@(0.0.255) `&]_[*@3 v])&] +[s2;%% Sets the value of JSON node when storing.&] +[s3;%% &] +[s4;%% &] +[s5;:JsonIO`:`:Put`(Value`&`): [@(0.0.255) void]_[* Put]([_^Value^ Value][@(0.0.255) `&]_[*@3 v +])&] +[s2;%% Retrieves JSON node data into [%-*@3 v] when storing `- invoked +to finish jsonization.&] +[s3;%% &] +[s4;%% &] +[s5;:JsonIO`:`:GetResult`(`)const: [_^Value^ Value]_[* GetResult]()_[@(0.0.255) const]&] +[s2;%% Returns JSON node data into [%-*@3 v] when storing `- invoked +to finish jsonization.&] +[s3;%% &] +[s4;%% &] +[s5;:JsonIO`:`:operator`(`)`(const char`*`,T`&`): [@(0.0.255) template]_<[@(0.0.255) clas +s]_[*@4 T]>_[_^JsonIO^ JsonIO][@(0.0.255) `&]_[* operator()]([@(0.0.255) const]_[@(0.0.255) c +har]_`*[*@3 key], [*@4 T][@(0.0.255) `&]_[*@3 value])&] +[s2;%% Sets the JsonIO to represent JSON object (if it does not already), +creates member [%-*@3 key] and jsonizes [%-*@3 value] into it (by +calling global Jsonize function, whose general form invokes Jsonize +method)..&] +[s3;%% &] +[s4;%% &] +[s5;:JsonIO`:`:JsonIO`(const Value`&`): [* JsonIO]([@(0.0.255) const]_[_^Value^ Value][@(0.0.255) `& +]_[*@3 src])&] +[s2;%% Sets JsonIO for retrieving data from [%-*@3 src] which is must +be Json compatible Value.&] +[s3;%% &] +[s4;%% &] +[s5;:JsonIO`:`:JsonIO`(`): [* JsonIO]()&] +[s2;%% Creates JsonIO for storing data.&] +[s3; &] +[s0; &] +[ {{10000@(113.42.0) [s0;%% [*@7;4 Jsonize Store/Load functions]]}}&] +[s3; &] +[s5;:StoreAsJsonValue`(const T`&`): [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T]>_[_^Value^ V +alue]_[* StoreAsJsonValue]([@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 var])&] +[s2;%% Converts [%-*@3 var] into JSON compatible Value (such that can +be directly used with AsJson function).&] +[s3;%% &] +[s4;%% &] +[s5;:LoadFromJsonValue`(T`&`,const Value`&`): [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T +]>_[@(0.0.255) void]_[* LoadFromJsonValue]([*@4 T][@(0.0.255) `&]_[*@3 var], +[@(0.0.255) const]_[_^Value^ Value][@(0.0.255) `&]_[*@3 x])&] +[s2;%% Retrieves variable from JSON compatible Value. Can throw JsonizeError +on error.&] +[s3;%% &] +[s4;%% &] +[s5;:StoreAsJson`(const T`&`,bool`): [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T]>_[_^String^ S +tring]_[* StoreAsJson]([@(0.0.255) const]_[*@4 T][@(0.0.255) `&]_[*@3 var], +[@(0.0.255) bool]_[*@3 pretty]_`=_[@(0.0.255) false])&] +[s2;%% Converts [%-*@3 var] into JSON text. If [%-*@3 pretty] is true, +adds whitespaces to look better, otherwise the result is as compact +as possible.&] +[s3;%% &] +[s4;%% &] +[s5;:LoadFromJson`(T`&`,const char`*`): [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T]>_ +[@(0.0.255) bool]_[* LoadFromJson]([*@4 T][@(0.0.255) `&]_[*@3 var], [@(0.0.255) const]_[@(0.0.255) c +har]_`*[*@3 json])&] +[s2;%% Retrieves [%-*@3 var] from [%-*@3 json] text. Does not throw JsonizeError, +returns false in case of error.&] +[s3;%% &] +[s4;%% &] +[s5;:StoreAsJsonFile`(const T`&`,const char`*`,bool`): [@(0.0.255) template]_<[@(0.0.255) c +lass]_[*@4 T]>_[@(0.0.255) bool]_[* StoreAsJsonFile]([@(0.0.255) const]_[*@4 T][@(0.0.255) `& +]_[*@3 var], [@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 file], [@(0.0.255) bool]_[*@3 pretty +]_`=_[@(0.0.255) false])&] +[s2;%% Converts [%-*@3 var] into JSON file. If [%-*@3 pretty] is true, +adds whitespaces to look better, otherwise the result is as compact +as possible.&] +[s3;%% &] +[s4;%% &] +[s5;:LoadFromJsonFile`(T`&`,const char`*`): [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T +]>_[@(0.0.255) bool]_[* LoadFromJsonFile]([*@4 T][@(0.0.255) `&]_[*@3 var], +[@(0.0.255) const]_[@(0.0.255) char]_`*[*@3 file]_`=_NULL)&] +[s2;%% Retrieves [%-*@3 var] from [%-*@3 json] file. Does not throw JsonizeError, +returns false in case of error.&] +[s3; &] +[s0;i448;a25;kKO9;@(0.0.255) &] +[ {{10000@(113.42.0) [s0;%% [*@7;4 Standard Jsonize template specializations]]}}&] +[s3; &] +[s5;:Jsonize`(JsonIO`&`,int`&`): [@(0.0.255) template]_<>_[@(0.0.255) void]_[* Jsonize]([_^JsonIO^ J +sonIO][@(0.0.255) `&]_[*@3 io], [@(0.0.255) int`&]_[*@3 var])&] +[s5;:Jsonize`(JsonIO`&`,int16`&`): [@(0.0.255) template]_<>_[@(0.0.255) void]_[* Jsonize]([_^JsonIO^ J +sonIO][@(0.0.255) `&]_[*@3 io], [_^int16^ int16][@(0.0.255) `&]_[*@3 var])&] +[s5;:Jsonize`(JsonIO`&`,int64`&`): [@(0.0.255) template]_<>_[@(0.0.255) void]_[* Jsonize]([_^JsonIO^ J +sonIO][@(0.0.255) `&]_[*@3 io], [_^int64^ int64][@(0.0.255) `&]_[*@3 var])&] +[s5;:Jsonize`(JsonIO`&`,double`&`): [@(0.0.255) template]_<>_[@(0.0.255) void]_[* Jsonize]( +[_^JsonIO^ JsonIO][@(0.0.255) `&]_[*@3 io], [@(0.0.255) double`&]_[*@3 var])&] +[s5;:Jsonize`(JsonIO`&`,bool`&`): [@(0.0.255) template]_<>_[@(0.0.255) void]_[* Jsonize]([_^JsonIO^ J +sonIO][@(0.0.255) `&]_[*@3 io], [@(0.0.255) bool`&]_[*@3 var])&] +[s5;:Jsonize`(JsonIO`&`,String`&`): [@(0.0.255) template]_<>_[@(0.0.255) void]_[* Jsonize]( +[_^JsonIO^ JsonIO][@(0.0.255) `&]_[*@3 io], [_^String^ String][@(0.0.255) `&]_[*@3 var])&] +[s5;:Jsonize`(JsonIO`&`,WString`&`): [@(0.0.255) template]_<>_[@(0.0.255) void]_[* Jsonize]( +[_^JsonIO^ JsonIO][@(0.0.255) `&]_[*@3 io], [_^WString^ WString][@(0.0.255) `&]_[*@3 var])&] +[s5;:Jsonize`(JsonIO`&`,Date`&`): [@(0.0.255) template]_<>_[@(0.0.255) void]_[* Jsonize]([_^JsonIO^ J +sonIO][@(0.0.255) `&]_[*@3 io], [_^Date^ Date][@(0.0.255) `&]_[*@3 var])&] +[s5;:Jsonize`(JsonIO`&`,Time`&`): [@(0.0.255) template]_<>_[@(0.0.255) void]_[* Jsonize]([_^JsonIO^ J +sonIO][@(0.0.255) `&]_[*@3 io], [_^Time^ Time][@(0.0.255) `&]_[*@3 var])&] +[s5;:Jsonize`(JsonIO`&`,Vector``&`): [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T]> +_[@(0.0.255) void]_[* Jsonize]([_^JsonIO^ JsonIO][@(0.0.255) `&]_[*@3 io], +[_^Vector^ Vector]<[*@4 T]>`&_[*@3 var])&] +[s5;:Jsonize`(JsonIO`&`,Array``&`): [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T]>_ +[@(0.0.255) void]_[* Jsonize]([_^JsonIO^ JsonIO][@(0.0.255) `&]_[*@3 io], +[_^Array^ Array]<[*@4 T]>`&_[*@3 var])&] +[s5;:Jsonize`(JsonIO`&`,Index``&`): [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T]>_ +[@(0.0.255) void]_[* Jsonize]([_^JsonIO^ JsonIO][@(0.0.255) `&]_[*@3 io], +[_^Index^ Index]<[*@4 T]>`&_[*@3 var])&] +[s5;:Jsonize`(JsonIO`&`,ArrayIndex``&`): [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T +]>_[@(0.0.255) void]_[* Jsonize]([_^JsonIO^ JsonIO][@(0.0.255) `&]_[*@3 io], +[_^ArrayIndex^ ArrayIndex]<[*@4 T]>`&_[*@3 var])&] +[s5;:Jsonize`(JsonIO`&`,VectorMap``&`): [@(0.0.255) template]_<[@(0.0.255) clas +s]_[*@4 K], [@(0.0.255) class]_[*@4 V], [@(0.0.255) class]_[*@4 H]>_[@(0.0.255) void]_[* Jsoniz +e]([_^JsonIO^ JsonIO][@(0.0.255) `&]_[*@3 io], [_^VectorMap^ VectorMap]<[*@4 K], +[*@4 V], [*@4 H]>`&_[*@3 var])&] +[s5;:Jsonize`(JsonIO`&`,ArrayMap``&`): [@(0.0.255) template]_<[@(0.0.255) class +]_[*@4 K], [@(0.0.255) class]_[*@4 V], [@(0.0.255) class]_[*@4 H]>_[@(0.0.255) void]_[* Jsonize +]([_^JsonIO^ JsonIO][@(0.0.255) `&]_[*@3 io], [_^ArrayMap^ ArrayMap]<[*@4 K], +[*@4 V], [*@4 H]>`&_[*@3 var])&] +[s2; Provides Jsonize template specialization to support [*@3 var] +data type.&] +[s3; &] +[s0; &] +[ {{10000@(113.42.0) [s0;%% [*@7;4 Special Jsonize variants]]}}&] +[s3; &] +[s5;:StringMap`(JsonIO`&`,VectorMap``&`): [@(0.0.255) template]_<[@(0.0.255) cl +ass]_[*@4 K], [@(0.0.255) class]_[*@4 V], [@(0.0.255) class]_[*@4 H]>_[@(0.0.255) void]_[* Stri +ngMap]([_^JsonIO^ JsonIO][@(0.0.255) `&]_[*@3 io], [_^VectorMap^ VectorMap]<[*@4 K], +[*@4 V], [*@4 H]>`&_[*@3 map])&] +[s5;:StringMap`(JsonIO`&`,ArrayMap``&`): [@(0.0.255) template]_<[@(0.0.255) cla +ss]_[*@4 K], [@(0.0.255) class]_[*@4 V], [@(0.0.255) class]_[*@4 H]>_[@(0.0.255) void]_[* Strin +gMap]([_^JsonIO^ JsonIO][@(0.0.255) `&]_[*@3 io], [_^ArrayMap^ ArrayMap]<[*@4 K], +[*@4 V], [*@4 H]>`&_[*@3 map])&] +[s2;%% The default Jsonize for Maps has to encode any type as key, +which leads to somewhat unnatural results when key [%-*@4 K] is +String or WString. [%-* StringMap ]alternative variant encodes +map as JSON object with keys equal to map keys.&] +[s3;%% &] +[s4;%% &] +[s5;:JsonizeBySerialize`(JsonIO`&`,T`&`): [@(0.0.255) template]_<[@(0.0.255) class]_[*@4 T]> +_[@(0.0.255) void]_[* JsonizeBySerialize]([_^JsonIO^ JsonIO][@(0.0.255) `&]_[*@3 jio], +[*@4 T][@(0.0.255) `&]_[*@3 x])&] +[s2;%% This function encodes/retrieves Json by binary serializing +the object and Jsonizing the hexadecimal data string.&] +[s3;%% ]] \ No newline at end of file