diff options
author | aligus <aligus@yandex-team.ru> | 2022-02-10 16:49:23 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:49:23 +0300 |
commit | 3f79772915172a9f5407c1a815806a8c8ba67c60 (patch) | |
tree | 79161f79bbef65a0b0573ccc11357304e5f93940 /library/cpp | |
parent | d8471797044beeb73c43091394121ac38ffe75ed (diff) | |
download | ydb-3f79772915172a9f5407c1a815806a8c8ba67c60.tar.gz |
Restoring authorship annotation for <aligus@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'library/cpp')
-rw-r--r-- | library/cpp/binsaver/class_factory.h | 4 | ||||
-rw-r--r-- | library/cpp/json/json_reader.cpp | 48 | ||||
-rw-r--r-- | library/cpp/json/json_reader.h | 12 | ||||
-rw-r--r-- | library/cpp/json/json_writer.cpp | 34 | ||||
-rw-r--r-- | library/cpp/json/json_writer.h | 36 | ||||
-rw-r--r-- | library/cpp/json/ut/json_reader_ut.cpp | 190 | ||||
-rw-r--r-- | library/cpp/json/ut/json_writer_ut.cpp | 30 | ||||
-rw-r--r-- | library/cpp/json/writer/json_value.cpp | 108 | ||||
-rw-r--r-- | library/cpp/json/writer/json_value.h | 48 | ||||
-rw-r--r-- | library/cpp/json/ya.make | 20 |
10 files changed, 265 insertions, 265 deletions
diff --git a/library/cpp/binsaver/class_factory.h b/library/cpp/binsaver/class_factory.h index e83512331b..657df90429 100644 --- a/library/cpp/binsaver/class_factory.h +++ b/library/cpp/binsaver/class_factory.h @@ -88,13 +88,13 @@ void TClassFactory<T>::RegisterTypeBase(int nTypeID, newFunc func, VFT vft) { fprintf(stderr, "IBinSaver: Type ID 0x%08X has been already used\n", nTypeID); abort(); } - } + } CTypeIndexHash::iterator typeIndexIt = typeIndex.find(vft); if (typeIndexIt != typeIndex.end() && nTypeID != typeIndexIt->second) { fprintf(stderr, "IBinSaver: class (Type ID 0x%08X) has been already registered (Type ID 0x%08X)\n", nTypeID, typeIndexIt->second); abort(); - } + } typeIndex[vft] = nTypeID; typeInfo[nTypeID] = func; } diff --git a/library/cpp/json/json_reader.cpp b/library/cpp/json/json_reader.cpp index 072c8deafe..c74581e240 100644 --- a/library/cpp/json/json_reader.cpp +++ b/library/cpp/json/json_reader.cpp @@ -5,13 +5,13 @@ #include <contrib/libs/rapidjson/include/rapidjson/error/en.h> #include <contrib/libs/rapidjson/include/rapidjson/error/error.h> #include <contrib/libs/rapidjson/include/rapidjson/reader.h> - + #include <util/generic/stack.h> #include <util/string/cast.h> #include <util/system/yassert.h> #include <util/string/builder.h> - -namespace NJson { + +namespace NJson { namespace { TString PrintError(const rapidjson::ParseResult& result) { return TStringBuilder() << TStringBuf("Offset: ") << result.Offset() @@ -21,7 +21,7 @@ namespace NJson { } static const size_t DEFAULT_BUFFER_LEN = 65536; - + bool TParserCallbacks::OpenComplexValue(EJsonValueType type) { TJsonValue* pvalue; switch (CurrentState) { @@ -42,12 +42,12 @@ namespace NJson { return false; } return true; - } - + } + bool TParserCallbacks::CloseComplexValue() { if (ValuesStack.empty()) { - return false; - } + return false; + } ValuesStack.pop_back(); if (!ValuesStack.empty()) { @@ -65,8 +65,8 @@ namespace NJson { CurrentState = FINISH; } return true; - } - + } + TParserCallbacks::TParserCallbacks(TJsonValue& value, bool throwOnError, bool notClosedBracketIsError) : TJsonCallbacks(throwOnError) , Value(value) @@ -74,23 +74,23 @@ namespace NJson { , CurrentState(START) { } - + bool TParserCallbacks::OnNull() { return SetValue(JSON_NULL); } - + bool TParserCallbacks::OnBoolean(bool val) { return SetValue(val); } - + bool TParserCallbacks::OnInteger(long long val) { return SetValue(val); } - + bool TParserCallbacks::OnUInteger(unsigned long long val) { return SetValue(val); } - + bool TParserCallbacks::OnString(const TStringBuf& val) { return SetValue(val); } @@ -98,29 +98,29 @@ namespace NJson { bool TParserCallbacks::OnDouble(double val) { return SetValue(val); } - + bool TParserCallbacks::OnOpenArray() { bool res = OpenComplexValue(JSON_ARRAY); if (res) CurrentState = IN_ARRAY; return res; } - + bool TParserCallbacks::OnCloseArray() { return CloseComplexValue(); } - + bool TParserCallbacks::OnOpenMap() { bool res = OpenComplexValue(JSON_MAP); if (res) CurrentState = IN_MAP; return res; } - + bool TParserCallbacks::OnCloseMap() { return CloseComplexValue(); } - + bool TParserCallbacks::OnMapKey(const TStringBuf& val) { switch (CurrentState) { case IN_MAP: @@ -131,8 +131,8 @@ namespace NJson { return false; } return true; - } - + } + bool TParserCallbacks::OnEnd() { if (NotClosedBracketIsError){ return ValuesStack.empty(); @@ -144,7 +144,7 @@ namespace NJson { : BufferSize(DEFAULT_BUFFER_LEN) { } - + void TJsonReaderConfig::SetBufferSize(size_t bufferSize) { BufferSize = Max((size_t)1, Min(bufferSize, DEFAULT_BUFFER_LEN)); } @@ -441,7 +441,7 @@ namespace NJson { bool Null() { return Impl.OnNull(); } - + bool Bool(bool b) { return Impl.OnBoolean(b); } diff --git a/library/cpp/json/json_reader.h b/library/cpp/json/json_reader.h index b673788330..10276c068c 100644 --- a/library/cpp/json/json_reader.h +++ b/library/cpp/json/json_reader.h @@ -1,5 +1,5 @@ -#pragma once - +#pragma once + #include "json_value.h" #include <library/cpp/json/common/defs.h> @@ -7,14 +7,14 @@ #include <util/generic/yexception.h> -#include <util/stream/input.h> +#include <util/stream/input.h> #include <util/stream/str.h> #include <util/stream/mem.h> - -namespace NJson { + +namespace NJson { struct TJsonReaderConfig { TJsonReaderConfig(); - + // js-style comments (both // and /**/) bool AllowComments = false; bool DontValidateUtf8 = false; diff --git a/library/cpp/json/json_writer.cpp b/library/cpp/json/json_writer.cpp index 3d058bae36..a95a53891d 100644 --- a/library/cpp/json/json_writer.cpp +++ b/library/cpp/json/json_writer.cpp @@ -1,11 +1,11 @@ -#include "json_writer.h" - +#include "json_writer.h" + #include <util/charset/utf8.h> #include <util/generic/algorithm.h> -#include <util/string/cast.h> -#include <util/system/yassert.h> - -namespace NJson { +#include <util/string/cast.h> +#include <util/system/yassert.h> + +namespace NJson { TJsonWriter::TJsonWriter(IOutputStream* out, bool formatOutput, bool sortkeys, bool validateUtf8) : Out(out) , Buf(NJsonWriter::HEM_UNSAFE) @@ -19,7 +19,7 @@ namespace NJson { { Buf.SetIndentSpaces(formatOutput ? 2 : 0); } - + TJsonWriter::TJsonWriter(IOutputStream* out, const TJsonWriterConfig& config, bool DFID) : Out(config.Unbuffered ? nullptr : out) , Buf(NJsonWriter::HEM_UNSAFE, config.Unbuffered ? out : nullptr) @@ -34,7 +34,7 @@ namespace NJson { Buf.SetIndentSpaces(config.FormatOutput ? 2 : 0); Buf.SetWriteNanAsString(config.WriteNanAsString); } - + TJsonWriter::~TJsonWriter() { // if we write to socket it's possible to get exception here // don't use exceptions in destructors @@ -51,23 +51,23 @@ namespace NJson { Buf.FlushTo(Out); } } - + void TJsonWriter::OpenMap() { Buf.BeginObject(); } - + void TJsonWriter::CloseMap() { Buf.EndObject(); } - + void TJsonWriter::OpenArray() { Buf.BeginList(); } - + void TJsonWriter::CloseArray() { Buf.EndList(); } - + void TJsonWriter::Write(const TStringBuf& value) { if (ValidateUtf8 && !IsUtf(value)) throw yexception() << "JSON writer: invalid UTF-8"; @@ -81,7 +81,7 @@ namespace NJson { } } } - + void TJsonWriter::WriteNull() { Buf.WriteNull(); } @@ -93,11 +93,11 @@ namespace NJson { void TJsonWriter::Write(double value) { Buf.WriteDouble(value, FloatToStringMode, DoubleNDigits); } - + void TJsonWriter::Write(long long value) { Buf.WriteLongLong(value); } - + void TJsonWriter::Write(unsigned long long value) { Buf.WriteULongLong(value); } @@ -105,7 +105,7 @@ namespace NJson { void TJsonWriter::Write(bool value) { Buf.WriteBool(value); } - + namespace { struct TLessStrPtr { bool operator()(const TString* a, const TString* b) const { diff --git a/library/cpp/json/json_writer.h b/library/cpp/json/json_writer.h index c7f5c9499a..0b5b1039c1 100644 --- a/library/cpp/json/json_writer.h +++ b/library/cpp/json/json_writer.h @@ -1,17 +1,17 @@ -#pragma once - +#pragma once + // Deprecated. Use library/cpp/json/writer in new code. #include "json_value.h" #include <library/cpp/json/writer/json.h> -#include <util/stream/output.h> -#include <util/generic/hash.h> +#include <util/stream/output.h> +#include <util/generic/hash.h> #include <util/generic/maybe.h> -#include <util/generic/strbuf.h> - -namespace NJson { +#include <util/generic/strbuf.h> + +namespace NJson { struct TJsonWriterConfig { constexpr static ui32 DefaultDoubleNDigits = 10; constexpr static ui32 DefaultFloatNDigits = 6; @@ -19,7 +19,7 @@ namespace NJson { inline TJsonWriterConfig& SetUnbuffered(bool v) noexcept { Unbuffered = v; - + return *this; } @@ -61,25 +61,25 @@ namespace NJson { TJsonWriter(IOutputStream* out, bool formatOutput, bool sortkeys = false, bool validateUtf8 = true); TJsonWriter(IOutputStream* out, const TJsonWriterConfig& config, bool DontFlushInDestructor = false); ~TJsonWriter(); - + void Flush(); - + void OpenMap(); void OpenMap(const TStringBuf& key) { Buf.WriteKey(key); OpenMap(); } void CloseMap(); - + void OpenArray(); void OpenArray(const TStringBuf& key) { Buf.WriteKey(key); OpenArray(); } void CloseArray(); - + void WriteNull(); - + void Write(const TStringBuf& value); void Write(float value); void Write(double value); @@ -109,7 +109,7 @@ namespace NJson { void Write(unsigned short value) { Write((unsigned long long)value); } - + void Write(const unsigned char* value) { Write((const char*)value); } @@ -122,12 +122,12 @@ namespace NJson { void Write(const std::string& value) { Write(TStringBuf(value)); } - + // write raw json without checks void UnsafeWrite(const TStringBuf& value) { Buf.UnsafeWriteValue(value); } - + template <typename T> void Write(const TStringBuf& key, const T& value) { Buf.WriteKey(key); @@ -139,7 +139,7 @@ namespace NJson { Buf.WriteKey(key); UnsafeWrite(value); } - + void WriteNull(const TStringBuf& key) { Buf.WriteKey(key); WriteNull(); @@ -193,4 +193,4 @@ namespace NJson { TString WriteJson(const TJsonValue*, bool formatOutput = true, bool sortkeys = false, bool validateUtf8 = false); TString WriteJson(const TJsonValue&, bool formatOutput = true, bool sortkeys = false, bool validateUtf8 = false); void WriteJson(IOutputStream*, const TJsonValue*, const TJsonWriterConfig& config); -} +} diff --git a/library/cpp/json/ut/json_reader_ut.cpp b/library/cpp/json/ut/json_reader_ut.cpp index cd31afa0b8..5868bc6427 100644 --- a/library/cpp/json/ut/json_reader_ut.cpp +++ b/library/cpp/json/ut/json_reader_ut.cpp @@ -1,101 +1,101 @@ #include <library/cpp/json/json_reader.h> #include <library/cpp/json/json_writer.h> - + #include <library/cpp/testing/unittest/registar.h> -#include <util/stream/str.h> - -using namespace NJson; - -class TReformatCallbacks: public TJsonCallbacks { +#include <util/stream/str.h> + +using namespace NJson; + +class TReformatCallbacks: public TJsonCallbacks { TJsonWriter& Writer; -public: +public: TReformatCallbacks(TJsonWriter& writer) : Writer(writer) { - } - + } + bool OnBoolean(bool val) override { - Writer.Write(val); - return true; - } - + Writer.Write(val); + return true; + } + bool OnInteger(long long val) override { - Writer.Write(val); - return true; - } - + Writer.Write(val); + return true; + } + bool OnUInteger(unsigned long long val) override { Writer.Write(val); return true; } bool OnString(const TStringBuf& val) override { - Writer.Write(val); - return true; - } - + Writer.Write(val); + return true; + } + bool OnDouble(double val) override { - Writer.Write(val); - return true; - } - + Writer.Write(val); + return true; + } + bool OnOpenArray() override { - Writer.OpenArray(); - return true; - } - + Writer.OpenArray(); + return true; + } + bool OnCloseArray() override { - Writer.CloseArray(); - return true; - } - + Writer.CloseArray(); + return true; + } + bool OnOpenMap() override { - Writer.OpenArray(); - return true; - } - + Writer.OpenArray(); + return true; + } + bool OnCloseMap() override { - Writer.CloseArray(); - return true; - } - + Writer.CloseArray(); + return true; + } + bool OnMapKey(const TStringBuf& val) override { - Writer.Write(val); - return true; - } -}; - + Writer.Write(val); + return true; + } +}; + Y_UNIT_TEST_SUITE(TJsonReaderTest) { Y_UNIT_TEST(JsonReformatTest) { TString data = "{\"null value\": null, \"intkey\": 10, \"double key\": 11.11, \"string key\": \"string\", \"array\": [1,2,3,\"TString\"], \"bool key\": true}"; - + TString result1, result2; - { - TStringStream in; - in << data; - TStringStream out; - TJsonWriter writer(&out, false); - TReformatCallbacks cb(writer); - ReadJson(&in, &cb); - writer.Flush(); - result1 = out.Str(); - } - - { - TStringStream in; - in << result1; - TStringStream out; - TJsonWriter writer(&out, false); - TReformatCallbacks cb(writer); - ReadJson(&in, &cb); - writer.Flush(); + { + TStringStream in; + in << data; + TStringStream out; + TJsonWriter writer(&out, false); + TReformatCallbacks cb(writer); + ReadJson(&in, &cb); + writer.Flush(); + result1 = out.Str(); + } + + { + TStringStream in; + in << result1; + TStringStream out; + TJsonWriter writer(&out, false); + TReformatCallbacks cb(writer); + ReadJson(&in, &cb); + writer.Flush(); result2 = out.Str(); - } - - UNIT_ASSERT_VALUES_EQUAL(result1, result2); - } - + } + + UNIT_ASSERT_VALUES_EQUAL(result1, result2); + } + Y_UNIT_TEST(TJsonEscapedApostrophe) { TString jsonString = "{ \"foo\" : \"bar\\'buzz\" }"; { @@ -121,22 +121,22 @@ Y_UNIT_TEST_SUITE(TJsonReaderTest) { Y_UNIT_TEST(TJsonTreeTest) { TString data = "{\"intkey\": 10, \"double key\": 11.11, \"null value\":null, \"string key\": \"string\", \"array\": [1,2,3,\"TString\"], \"bool key\": true}"; - TStringStream in; - in << data; - TJsonValue value; - ReadJsonTree(&in, &value); - + TStringStream in; + in << data; + TJsonValue value; + ReadJsonTree(&in, &value); + UNIT_ASSERT_VALUES_EQUAL(value["intkey"].GetInteger(), 10); - UNIT_ASSERT_DOUBLES_EQUAL(value["double key"].GetDouble(), 11.11, 0.001); - UNIT_ASSERT_VALUES_EQUAL(value["bool key"].GetBoolean(), true); + UNIT_ASSERT_DOUBLES_EQUAL(value["double key"].GetDouble(), 11.11, 0.001); + UNIT_ASSERT_VALUES_EQUAL(value["bool key"].GetBoolean(), true); UNIT_ASSERT_VALUES_EQUAL(value["absent string key"].GetString(), TString("")); UNIT_ASSERT_VALUES_EQUAL(value["string key"].GetString(), TString("string")); - UNIT_ASSERT_VALUES_EQUAL(value["array"][0].GetInteger(), 1); - UNIT_ASSERT_VALUES_EQUAL(value["array"][1].GetInteger(), 2); - UNIT_ASSERT_VALUES_EQUAL(value["array"][2].GetInteger(), 3); + UNIT_ASSERT_VALUES_EQUAL(value["array"][0].GetInteger(), 1); + UNIT_ASSERT_VALUES_EQUAL(value["array"][1].GetInteger(), 2); + UNIT_ASSERT_VALUES_EQUAL(value["array"][2].GetInteger(), 3); UNIT_ASSERT_VALUES_EQUAL(value["array"][3].GetString(), TString("TString")); UNIT_ASSERT(value["null value"].IsNull()); - + // AsString UNIT_ASSERT_VALUES_EQUAL(value["intkey"].GetStringRobust(), "10"); UNIT_ASSERT_VALUES_EQUAL(value["double key"].GetStringRobust(), "11.11"); @@ -149,22 +149,22 @@ Y_UNIT_TEST_SUITE(TJsonReaderTest) { UNIT_ASSERT(GetArrayPointer(value, "array", &array)); UNIT_ASSERT_VALUES_EQUAL(value["array"].GetArray().size(), array->size()); UNIT_ASSERT_VALUES_EQUAL(value["array"][0].GetInteger(), (*array)[0].GetInteger()); - UNIT_ASSERT_VALUES_EQUAL(value["array"][1].GetInteger(), (*array)[1].GetInteger()); - UNIT_ASSERT_VALUES_EQUAL(value["array"][2].GetInteger(), (*array)[2].GetInteger()); + UNIT_ASSERT_VALUES_EQUAL(value["array"][1].GetInteger(), (*array)[1].GetInteger()); + UNIT_ASSERT_VALUES_EQUAL(value["array"][2].GetInteger(), (*array)[2].GetInteger()); UNIT_ASSERT_VALUES_EQUAL(value["array"][3].GetString(), (*array)[3].GetString()); - } - + } + Y_UNIT_TEST(TJsonRomaTest) { TString data = "{\"test\": [ {\"name\": \"A\"} ]}"; - - TStringStream in; - in << data; - TJsonValue value; - ReadJsonTree(&in, &value); - + + TStringStream in; + in << data; + TJsonValue value; + ReadJsonTree(&in, &value); + UNIT_ASSERT_VALUES_EQUAL(value["test"][0]["name"].GetString(), TString("A")); - } - + } + Y_UNIT_TEST(TJsonReadTreeWithComments) { { TString leadingCommentData = "{ // \"test\" : 1 \n}"; @@ -396,7 +396,7 @@ Y_UNIT_TEST_SUITE(TJsonReaderTest) { UNIT_ASSERT(v.GetMap().begin()->second.IsString()); UNIT_ASSERT_VALUES_EQUAL("", v.GetMap().begin()->second.GetString()); } -} +} static const TString YANDEX_STREAMING_JSON("{\"a\":1}//d{\"b\":2}"); diff --git a/library/cpp/json/ut/json_writer_ut.cpp b/library/cpp/json/ut/json_writer_ut.cpp index ca11d34dad..cee42780ff 100644 --- a/library/cpp/json/ut/json_writer_ut.cpp +++ b/library/cpp/json/ut/json_writer_ut.cpp @@ -1,46 +1,46 @@ #include <library/cpp/json/json_writer.h> #include <library/cpp/testing/unittest/registar.h> - -#include <util/stream/str.h> - -using namespace NJson; - + +#include <util/stream/str.h> + +using namespace NJson; + Y_UNIT_TEST_SUITE(TJsonWriterTest) { Y_UNIT_TEST(SimpleWriteTest) { TString expected1 = "{\"key1\":1,\"key2\":2,\"key3\":3"; TString expected2 = expected1 + ",\"array\":[\"stroka\",false]"; TString expected3 = expected2 + "}"; - + TStringStream out; - + TJsonWriter json(&out, false); json.OpenMap(); json.Write("key1", (ui16)1); json.WriteKey("key2"); json.Write((i32)2); json.Write("key3", (ui64)3); - + UNIT_ASSERT(out.Empty()); json.Flush(); UNIT_ASSERT_VALUES_EQUAL(out.Str(), expected1); - + json.Write("array"); json.OpenArray(); json.Write("stroka"); json.Write(false); json.CloseArray(); - + UNIT_ASSERT_VALUES_EQUAL(out.Str(), expected1); json.Flush(); UNIT_ASSERT_VALUES_EQUAL(out.Str(), expected2); - + json.CloseMap(); - + UNIT_ASSERT_VALUES_EQUAL(out.Str(), expected2); json.Flush(); UNIT_ASSERT_VALUES_EQUAL(out.Str(), expected3); } - + Y_UNIT_TEST(SimpleWriteValueTest) { TString expected = "{\"key1\":null,\"key2\":{\"subkey1\":[1,{\"subsubkey\":\"test2\"},null,true],\"subkey2\":\"test\"}}"; TJsonValue v; @@ -53,7 +53,7 @@ Y_UNIT_TEST_SUITE(TJsonWriterTest) { TStringStream out; WriteJson(&out, &v); UNIT_ASSERT_VALUES_EQUAL(out.Str(), expected); - } + } Y_UNIT_TEST(FormatOutput) { TString expected = "{\n \"key1\":null,\n \"key2\":\n {\n \"subkey1\":\n [\n 1,\n {\n \"subsubkey\":\"test2\"\n },\n null,\n true\n ],\n \"subkey2\":\"test\"\n }\n}"; @@ -225,4 +225,4 @@ Y_UNIT_TEST_SUITE(TJsonWriterTest) { UNIT_ASSERT_VALUES_EQUAL(actual, expected); } } -} +} diff --git a/library/cpp/json/writer/json_value.cpp b/library/cpp/json/writer/json_value.cpp index c61e8d1dc4..c04c975b31 100644 --- a/library/cpp/json/writer/json_value.cpp +++ b/library/cpp/json/writer/json_value.cpp @@ -1,6 +1,6 @@ -#include "json_value.h" +#include "json_value.h" #include "json.h" - + #include <util/generic/ymath.h> #include <util/generic/ylimits.h> #include <util/generic/utility.h> @@ -67,9 +67,9 @@ AreJsonArraysEqual(const NJson::TJsonValue& lhs, const NJson::TJsonValue& rhs) { return true; } -namespace NJson { +namespace NJson { const TJsonValue TJsonValue::UNDEFINED{}; - + TJsonValue::TJsonValue(const EJsonValueType type) { SetType(type); } @@ -80,7 +80,7 @@ namespace NJson { vval.SwapWithUndefined(*this); Zero(vval.Value); } - + TJsonValue::TJsonValue(const TJsonValue& val) : Type(val.Type) { @@ -103,16 +103,16 @@ namespace NJson { std::memcpy(&Value, &val.Value, sizeof(Value)); break; } - } - + } + TJsonValue& TJsonValue::operator=(const TJsonValue& val) { if (this == &val) return *this; TJsonValue tmp(val); tmp.Swap(*this); - return *this; + return *this; } - + TJsonValue& TJsonValue::operator=(TJsonValue&& val) noexcept { if (this == &val) return *this; @@ -125,12 +125,12 @@ namespace NJson { SetType(JSON_BOOLEAN); Value.Boolean = value; } - + TJsonValue::TJsonValue(const long long value) noexcept { SetType(JSON_INTEGER); Value.Integer = value; } - + TJsonValue::TJsonValue(const unsigned long long value) noexcept { SetType(JSON_UINTEGER); Value.UInteger = value; @@ -140,7 +140,7 @@ namespace NJson { SetType(JSON_INTEGER); Value.Integer = value; } - + TJsonValue::TJsonValue(const unsigned int value) noexcept { SetType(JSON_UINTEGER); Value.UInteger = value; @@ -150,7 +150,7 @@ namespace NJson { SetType(JSON_INTEGER); Value.Integer = value; } - + TJsonValue::TJsonValue(const unsigned long value) noexcept { SetType(JSON_UINTEGER); Value.UInteger = value; @@ -179,14 +179,14 @@ namespace NJson { EJsonValueType TJsonValue::GetType() const noexcept { return Type; } - + TJsonValue& TJsonValue::SetType(const EJsonValueType type) { if (Type == type) return *this; Clear(); Type = type; - + switch (Type) { case JSON_STRING: new (&Value.String) TString(); @@ -207,17 +207,17 @@ namespace NJson { } return *this; - } - + } + TJsonValue& TJsonValue::SetValue(const TJsonValue& value) { return *this = value; } - + TJsonValue& TJsonValue::SetValue(TJsonValue&& value) { *this = std::move(value); return *this; } - + TJsonValue& TJsonValue::InsertValue(const TString& key, const TJsonValue& value) { SetType(JSON_MAP); return (*Value.Map)[key] = value; @@ -227,12 +227,12 @@ namespace NJson { SetType(JSON_MAP); return (*Value.Map)[key] = value; } - + TJsonValue& TJsonValue::InsertValue(const char* key, const TJsonValue& value) { SetType(JSON_MAP); return (*Value.Map)[key] = value; } - + TJsonValue& TJsonValue::InsertValue(const TString& key, TJsonValue&& value) { SetType(JSON_MAP); return (*Value.Map)[key] = std::move(value); @@ -269,7 +269,7 @@ namespace NJson { Value.Array->push_back(std::move(value)); return Value.Array->back(); } - + void TJsonValue::EraseValue(const TStringBuf key) { if (IsMap()) { TMapType::iterator it = Value.Map->find(key); @@ -317,12 +317,12 @@ namespace NJson { Value.Array->resize(idx + 1); return (*Value.Array)[idx]; } - + TJsonValue& TJsonValue::operator[](const TStringBuf& key) { SetType(JSON_MAP); return (*Value.Map)[key]; - } - + } + namespace { struct TDefaultsHolder { const TString String{}; @@ -331,23 +331,23 @@ namespace NJson { const TJsonValue Value{}; }; } - + const TJsonValue& TJsonValue::operator[](const size_t idx) const noexcept { const TJsonValue* ret = nullptr; if (GetValuePointer(idx, &ret)) return *ret; - + return Singleton<TDefaultsHolder>()->Value; } - + const TJsonValue& TJsonValue::operator[](const TStringBuf& key) const noexcept { const TJsonValue* ret = nullptr; if (GetValuePointer(key, &ret)) return *ret; - + return Singleton<TDefaultsHolder>()->Value; } - + bool TJsonValue::GetBoolean() const { return Type != JSON_BOOLEAN ? false : Value.Boolean; } @@ -355,11 +355,11 @@ namespace NJson { long long TJsonValue::GetInteger() const { if (!IsInteger()) return 0; - + switch (Type) { case JSON_INTEGER: return Value.Integer; - + case JSON_UINTEGER: return Value.UInteger; @@ -652,7 +652,7 @@ namespace NJson { *value = Value.Boolean; return true; } - + bool TJsonValue::GetInteger(long long* value) const noexcept { if (!IsInteger()) return false; @@ -660,7 +660,7 @@ namespace NJson { *value = GetInteger(); return true; } - + bool TJsonValue::GetUInteger(unsigned long long* value) const noexcept { if (!IsUInteger()) return false; @@ -676,7 +676,7 @@ namespace NJson { *value = GetDouble(); return true; } - + bool TJsonValue::GetString(TString* value) const { if (Type != JSON_STRING) return false; @@ -684,7 +684,7 @@ namespace NJson { *value = Value.String; return true; } - + bool TJsonValue::GetMap(TJsonValue::TMapType* value) const { if (Type != JSON_MAP) return false; @@ -692,7 +692,7 @@ namespace NJson { *value = *Value.Map; return true; } - + bool TJsonValue::GetArray(TJsonValue::TArray* value) const { if (Type != JSON_ARRAY) return false; @@ -700,15 +700,15 @@ namespace NJson { *value = *Value.Array; return true; } - + bool TJsonValue::GetMapPointer(const TJsonValue::TMapType** value) const noexcept { if (Type != JSON_MAP) return false; - + *value = Value.Map; return true; } - + bool TJsonValue::GetArrayPointer(const TJsonValue::TArray** value) const noexcept { if (Type != JSON_ARRAY) return false; @@ -716,7 +716,7 @@ namespace NJson { *value = Value.Array; return true; } - + bool TJsonValue::GetValue(const size_t index, TJsonValue* value) const { const TJsonValue* tmp = nullptr; if (GetValuePointer(index, &tmp)) { @@ -725,7 +725,7 @@ namespace NJson { } return false; } - + bool TJsonValue::GetValue(const TStringBuf key, TJsonValue* value) const { const TJsonValue* tmp = nullptr; if (GetValuePointer(key, &tmp)) { @@ -734,7 +734,7 @@ namespace NJson { } return false; } - + bool TJsonValue::GetValuePointer(const size_t index, const TJsonValue** value) const noexcept { if (Type == JSON_ARRAY && index < Value.Array->size()) { *value = &(*Value.Array)[index]; @@ -742,7 +742,7 @@ namespace NJson { } return false; } - + bool TJsonValue::GetValuePointer(const TStringBuf key, const TJsonValue** value) const noexcept { if (Type == JSON_MAP) { const TMapType::const_iterator it = Value.Map->find(key); @@ -757,11 +757,11 @@ namespace NJson { bool TJsonValue::GetValuePointer(const TStringBuf key, TJsonValue** value) noexcept { return static_cast<const TJsonValue*>(this)->GetValuePointer(key, const_cast<const TJsonValue**>(value)); } - + bool TJsonValue::IsNull() const noexcept { return Type == JSON_NULL; } - + bool TJsonValue::IsBoolean() const noexcept { return Type == JSON_BOOLEAN; } @@ -781,7 +781,7 @@ namespace NJson { return false; } } - + bool TJsonValue::IsUInteger() const noexcept { switch (Type) { case JSON_UINTEGER: @@ -815,7 +815,7 @@ namespace NJson { return false; } } - + namespace { template <class TPtr, class T> TPtr* CreateOrNullptr(TPtr* p, T key, std::true_type /*create*/) { @@ -988,7 +988,7 @@ namespace NJson { rhs.SwapWithUndefined(*this); tmp.SwapWithUndefined(rhs); } - + void TJsonValue::Save(IOutputStream* s) const { ::Save(s, static_cast<ui8>(Type)); switch (Type) { @@ -1061,7 +1061,7 @@ namespace NJson { *value = &v->GetMap(); return true; } - + bool GetArrayPointer(const TJsonValue& jv, const size_t index, const TJsonValue::TArray** value) { const TJsonValue* v; if (!jv.GetValuePointer(index, &v) || !v->IsArray()) @@ -1070,7 +1070,7 @@ namespace NJson { *value = &v->GetArray(); return true; } - + bool GetMapPointer(const TJsonValue& jv, const TStringBuf key, const TJsonValue::TMapType** value) { const TJsonValue* v; if (!jv.GetValuePointer(key, &v) || !v->IsMap()) @@ -1084,7 +1084,7 @@ namespace NJson { const TJsonValue* v; if (!jv.GetValuePointer(key, &v) || !v->IsArray()) return false; - + *value = &v->GetArray(); return true; } @@ -1096,8 +1096,8 @@ namespace NJson { if (Value.Array->empty()) ythrow TJsonException() << "Get back on empty array"; } -} - +} + template <> void Out<NJson::TJsonValue>(IOutputStream& out, const NJson::TJsonValue& v) { NJsonWriter::TBuf buf(NJsonWriter::HEM_DONT_ESCAPE_HTML, &out); diff --git a/library/cpp/json/writer/json_value.h b/library/cpp/json/writer/json_value.h index 3f0f50bc4c..fa7cd76615 100644 --- a/library/cpp/json/writer/json_value.h +++ b/library/cpp/json/writer/json_value.h @@ -1,15 +1,15 @@ -#pragma once - +#pragma once + #include <library/cpp/json/common/defs.h> #include <util/generic/string.h> -#include <util/generic/hash.h> -#include <util/generic/vector.h> +#include <util/generic/hash.h> +#include <util/generic/vector.h> #include <util/generic/deque.h> #include <util/generic/utility.h> -#include <util/generic/yexception.h> - -namespace NJson { +#include <util/generic/yexception.h> + +namespace NJson { enum EJsonValueType { JSON_UNDEFINED /* "Undefined" */, JSON_NULL /* "Null" */, @@ -21,9 +21,9 @@ namespace NJson { JSON_ARRAY /* "Array" */, JSON_UINTEGER /* "UInteger" */ }; - + class TJsonValue; - + class IScanCallback { public: virtual ~IScanCallback() = default; @@ -37,7 +37,7 @@ namespace NJson { public: typedef THashMap<TString, TJsonValue> TMapType; typedef TDeque<TJsonValue> TArray; - + TJsonValue() noexcept = default; TJsonValue(EJsonValueType type); TJsonValue(bool value) noexcept; @@ -61,20 +61,20 @@ namespace NJson { TJsonValue(const TJsonValue& vval); TJsonValue(TJsonValue&& vval) noexcept; - + TJsonValue& operator=(const TJsonValue& val); TJsonValue& operator=(TJsonValue&& val) noexcept; - + ~TJsonValue() { Clear(); } EJsonValueType GetType() const noexcept; TJsonValue& SetType(EJsonValueType type); - + TJsonValue& SetValue(const TJsonValue& value); TJsonValue& SetValue(TJsonValue&& value); - + // for Map TJsonValue& InsertValue(const TString& key, const TJsonValue& value); TJsonValue& InsertValue(TStringBuf key, const TJsonValue& value); @@ -82,13 +82,13 @@ namespace NJson { TJsonValue& InsertValue(const TString& key, TJsonValue&& value); TJsonValue& InsertValue(TStringBuf key, TJsonValue&& value); TJsonValue& InsertValue(const char* key, TJsonValue&& value); - + // for Array TJsonValue& AppendValue(const TJsonValue& value); TJsonValue& AppendValue(TJsonValue&& value); TJsonValue& Back(); const TJsonValue& Back() const; - + bool GetValueByPath(TStringBuf path, TJsonValue& result, char delimiter = '.') const; bool SetValueByPath(TStringBuf path, const TJsonValue& value, char delimiter = '.'); bool SetValueByPath(TStringBuf path, TJsonValue&& value, char delimiter = '.'); @@ -112,7 +112,7 @@ namespace NJson { const TString& GetString() const; const TMapType& GetMap() const; const TArray& GetArray() const; - + //throwing TJsonException possible bool GetBooleanSafe() const; long long GetIntegerSafe() const; @@ -123,7 +123,7 @@ namespace NJson { TMapType& GetMapSafe(); const TArray& GetArraySafe() const; TArray& GetArraySafe(); - + bool GetBooleanSafe(bool defaultValue) const; long long GetIntegerSafe(long long defaultValue) const; unsigned long long GetUIntegerSafe(unsigned long long defaultValue) const; @@ -157,7 +157,7 @@ namespace NJson { bool IsDefined() const noexcept { return Type != JSON_UNDEFINED && Type != JSON_NULL; } - + bool IsNull() const noexcept; bool IsBoolean() const noexcept; bool IsDouble() const noexcept; @@ -167,7 +167,7 @@ namespace NJson { /// @return true if JSON_INTEGER or (JSON_UINTEGER and Value <= Max<long long>) bool IsInteger() const noexcept; - + /// @return true if JSON_UINTEGER or (JSON_INTEGER and Value >= 0) bool IsUInteger() const noexcept; @@ -175,7 +175,7 @@ namespace NJson { bool Has(size_t key) const noexcept; void Scan(IScanCallback& callback); - + /// Non-robust comparison. bool operator==(const TJsonValue& rhs) const; @@ -219,7 +219,7 @@ namespace NJson { */ void BackChecks() const; }; - + inline bool GetBoolean(const TJsonValue& jv, size_t index, bool* value) noexcept { return jv[index].GetBoolean(value); } @@ -246,11 +246,11 @@ namespace NJson { inline bool GetBoolean(const TJsonValue& jv, TStringBuf key, bool* value) noexcept { return jv[key].GetBoolean(value); } - + inline bool GetInteger(const TJsonValue& jv, TStringBuf key, long long* value) noexcept { return jv[key].GetInteger(value); } - + inline bool GetUInteger(const TJsonValue& jv, TStringBuf key, unsigned long long* value) noexcept { return jv[key].GetUInteger(value); } diff --git a/library/cpp/json/ya.make b/library/cpp/json/ya.make index d58eead8ec..ca5cef5d8e 100644 --- a/library/cpp/json/ya.make +++ b/library/cpp/json/ya.make @@ -1,23 +1,23 @@ -LIBRARY() - +LIBRARY() + OWNER( pg velavokr ) SRCS( - json_writer.cpp - json_reader.cpp + json_writer.cpp + json_reader.cpp json_prettifier.cpp rapidjson_helpers.cpp -) - -PEERDIR( +) + +PEERDIR( contrib/libs/rapidjson library/cpp/json/common library/cpp/json/fast_sax library/cpp/json/writer library/cpp/string_utils/relaxed_escaper -) - -END() +) + +END() |