%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
// Copyright 2019 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_TORQUE_LS_JSON_H_ #define V8_TORQUE_LS_JSON_H_ #include <map> #include <memory> #include <string> #include <vector> #include "src/base/logging.h" namespace v8 { namespace internal { namespace torque { namespace ls { struct JsonValue; using JsonObject = std::map<std::string, JsonValue>; using JsonArray = std::vector<JsonValue>; struct JsonValue { public: enum { OBJECT, ARRAY, STRING, NUMBER, BOOL, IS_NULL } tag; // JsonValues can only be moved, not copied. JsonValue() V8_NOEXCEPT = default; constexpr JsonValue(const JsonValue& other) = delete; JsonValue& operator=(const JsonValue& other) = delete; JsonValue(JsonValue&& other) V8_NOEXCEPT = default; JsonValue& operator=(JsonValue&& other) V8_NOEXCEPT = default; static JsonValue From(double number) { JsonValue result; result.tag = JsonValue::NUMBER; result.number_ = number; return result; } static JsonValue From(JsonObject object) { JsonValue result; result.tag = JsonValue::OBJECT; result.object_ = std::make_unique<JsonObject>(std::move(object)); return result; } static JsonValue From(bool b) { JsonValue result; result.tag = JsonValue::BOOL; result.flag_ = b; return result; } static JsonValue From(const std::string& string) { JsonValue result; result.tag = JsonValue::STRING; result.string_ = string; return result; } static JsonValue From(JsonArray array) { JsonValue result; result.tag = JsonValue::ARRAY; result.array_ = std::make_unique<JsonArray>(std::move(array)); return result; } static JsonValue JsonNull() { JsonValue result; result.tag = JsonValue::IS_NULL; return result; } bool IsNumber() const { return tag == NUMBER; } double ToNumber() const { CHECK(IsNumber()); return number_; } bool IsBool() const { return tag == BOOL; } bool ToBool() const { CHECK(IsBool()); return flag_; } bool IsString() const { return tag == STRING; } const std::string& ToString() const { CHECK(IsString()); return string_; } bool IsObject() const { return object_ && tag == OBJECT; } const JsonObject& ToObject() const { CHECK(IsObject()); return *object_; } JsonObject& ToObject() { CHECK(IsObject()); return *object_; } bool IsArray() const { return array_ && tag == ARRAY; } const JsonArray& ToArray() const { CHECK(IsArray()); return *array_; } JsonArray& ToArray() { CHECK(IsArray()); return *array_; } private: double number_ = 0; bool flag_ = false; std::string string_; std::unique_ptr<JsonObject> object_; std::unique_ptr<JsonArray> array_; }; std::string SerializeToString(const JsonValue& value); } // namespace ls } // namespace torque } // namespace internal } // namespace v8 #endif // V8_TORQUE_LS_JSON_H_