Index: third_party/inspector_protocol/lib/Values_h.template |
diff --git a/third_party/inspector_protocol/lib/Values_h.template b/third_party/inspector_protocol/lib/Values_h.template |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8f75ef2220e26ed678e1d3bf273d43d6a86d3217 |
--- /dev/null |
+++ b/third_party/inspector_protocol/lib/Values_h.template |
@@ -0,0 +1,246 @@ |
+// Copyright 2016 The Chromium 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 {{"_".join(config.protocol.namespace)}}_Values_h |
+#define {{"_".join(config.protocol.namespace)}}_Values_h |
+ |
+//#include "Allocator.h" |
+//#include "Collections.h" |
+//#include "Forward.h" |
+ |
+{% for namespace in config.protocol.namespace %} |
+namespace {{namespace}} { |
+{% endfor %} |
+ |
+class ListValue; |
+class DictionaryValue; |
+class Value; |
+ |
+class {{config.lib.export_macro}} Value { |
+ PROTOCOL_DISALLOW_COPY(Value); |
+public: |
+ virtual ~Value() { } |
+ |
+ static std::unique_ptr<Value> null() |
+ { |
+ return wrapUnique(new Value()); |
+ } |
+ |
+ enum ValueType { |
+ TypeNull = 0, |
+ TypeBoolean, |
+ TypeInteger, |
+ TypeDouble, |
+ TypeString, |
+ TypeObject, |
+ TypeArray, |
+ TypeSerialized |
+ }; |
+ |
+ ValueType type() const { return m_type; } |
+ |
+ bool isNull() const { return m_type == TypeNull; } |
+ |
+ virtual bool asBoolean(bool* output) const; |
+ virtual bool asDouble(double* output) const; |
+ virtual bool asInteger(int* output) const; |
+ virtual bool asString(String* output) const; |
+ virtual bool asSerialized(String* output) const; |
+ |
+ String toJSONString() const; |
+ virtual void writeJSON(StringBuilder* output) const; |
+ virtual std::unique_ptr<Value> clone() const; |
+ |
+protected: |
+ Value() : m_type(TypeNull) { } |
+ explicit Value(ValueType type) : m_type(type) { } |
+ |
+private: |
+ friend class DictionaryValue; |
+ friend class ListValue; |
+ |
+ ValueType m_type; |
+}; |
+ |
+class {{config.lib.export_macro}} FundamentalValue : public Value { |
+public: |
+ static std::unique_ptr<FundamentalValue> create(bool value) |
+ { |
+ return wrapUnique(new FundamentalValue(value)); |
+ } |
+ |
+ static std::unique_ptr<FundamentalValue> create(int value) |
+ { |
+ return wrapUnique(new FundamentalValue(value)); |
+ } |
+ |
+ static std::unique_ptr<FundamentalValue> create(double value) |
+ { |
+ return wrapUnique(new FundamentalValue(value)); |
+ } |
+ |
+ bool asBoolean(bool* output) const override; |
+ bool asDouble(double* output) const override; |
+ bool asInteger(int* output) const override; |
+ void writeJSON(StringBuilder* output) const override; |
+ std::unique_ptr<Value> clone() const override; |
+ |
+private: |
+ explicit FundamentalValue(bool value) : Value(TypeBoolean), m_boolValue(value) { } |
+ explicit FundamentalValue(int value) : Value(TypeInteger), m_integerValue(value) { } |
+ explicit FundamentalValue(double value) : Value(TypeDouble), m_doubleValue(value) { } |
+ |
+ union { |
+ bool m_boolValue; |
+ double m_doubleValue; |
+ int m_integerValue; |
+ }; |
+}; |
+ |
+class {{config.lib.export_macro}} StringValue : public Value { |
+public: |
+ static std::unique_ptr<StringValue> create(const String& value) |
+ { |
+ return wrapUnique(new StringValue(value)); |
+ } |
+ |
+ static std::unique_ptr<StringValue> create(const char* value) |
+ { |
+ return wrapUnique(new StringValue(value)); |
+ } |
+ |
+ bool asString(String* output) const override; |
+ void writeJSON(StringBuilder* output) const override; |
+ std::unique_ptr<Value> clone() const override; |
+ |
+private: |
+ explicit StringValue(const String& value) : Value(TypeString), m_stringValue(value) { } |
+ explicit StringValue(const char* value) : Value(TypeString), m_stringValue(value) { } |
+ |
+ String m_stringValue; |
+}; |
+ |
+class {{config.lib.export_macro}} SerializedValue : public Value { |
+public: |
+ static std::unique_ptr<SerializedValue> create(const String& value) |
+ { |
+ return wrapUnique(new SerializedValue(value)); |
+ } |
+ |
+ bool asSerialized(String* output) const override; |
+ void writeJSON(StringBuilder* output) const override; |
+ std::unique_ptr<Value> clone() const override; |
+ |
+private: |
+ explicit SerializedValue(const String& value) : Value(TypeSerialized), m_serializedValue(value) { } |
+ |
+ String m_serializedValue; |
+}; |
+ |
+class {{config.lib.export_macro}} DictionaryValue : public Value { |
+public: |
+ using Entry = std::pair<String, Value*>; |
+ static std::unique_ptr<DictionaryValue> create() |
+ { |
+ return wrapUnique(new DictionaryValue()); |
+ } |
+ |
+ static DictionaryValue* cast(Value* value) |
+ { |
+ if (!value || value->type() != TypeObject) |
+ return nullptr; |
+ return static_cast<DictionaryValue*>(value); |
+ } |
+ |
+ static std::unique_ptr<DictionaryValue> cast(std::unique_ptr<Value> value) |
+ { |
+ return wrapUnique(DictionaryValue::cast(value.release())); |
+ } |
+ |
+ void writeJSON(StringBuilder* output) const override; |
+ std::unique_ptr<Value> clone() const override; |
+ |
+ size_t size() const { return m_data.size(); } |
+ |
+ void setBoolean(const String& name, bool); |
+ void setInteger(const String& name, int); |
+ void setDouble(const String& name, double); |
+ void setString(const String& name, const String&); |
+ void setValue(const String& name, std::unique_ptr<Value>); |
+ void setObject(const String& name, std::unique_ptr<DictionaryValue>); |
+ void setArray(const String& name, std::unique_ptr<ListValue>); |
+ |
+ bool getBoolean(const String& name, bool* output) const; |
+ bool getInteger(const String& name, int* output) const; |
+ bool getDouble(const String& name, double* output) const; |
+ bool getString(const String& name, String* output) const; |
+ |
+ DictionaryValue* getObject(const String& name) const; |
+ ListValue* getArray(const String& name) const; |
+ Value* get(const String& name) const; |
+ Entry at(size_t index) const; |
+ |
+ bool booleanProperty(const String& name, bool defaultValue) const; |
+ int integerProperty(const String& name, int defaultValue) const; |
+ double doubleProperty(const String& name, double defaultValue) const; |
+ void remove(const String& name); |
+ |
+ ~DictionaryValue() override; |
+ |
+private: |
+ DictionaryValue(); |
+ template<typename T> |
+ void set(const String& key, std::unique_ptr<T>& value) |
+ { |
+ DCHECK(value); |
+ bool isNew = m_data.find(key) == m_data.end(); |
+ m_data[key] = std::move(value); |
+ if (isNew) |
+ m_order.push_back(key); |
+ } |
+ |
+ using Dictionary = protocol::HashMap<String, std::unique_ptr<Value>>; |
+ Dictionary m_data; |
+ std::vector<String> m_order; |
+}; |
+ |
+class {{config.lib.export_macro}} ListValue : public Value { |
+public: |
+ static std::unique_ptr<ListValue> create() |
+ { |
+ return wrapUnique(new ListValue()); |
+ } |
+ |
+ static ListValue* cast(Value* value) |
+ { |
+ if (!value || value->type() != TypeArray) |
+ return nullptr; |
+ return static_cast<ListValue*>(value); |
+ } |
+ |
+ static std::unique_ptr<ListValue> cast(std::unique_ptr<Value> value) |
+ { |
+ return wrapUnique(ListValue::cast(value.release())); |
+ } |
+ |
+ ~ListValue() override; |
+ |
+ void writeJSON(StringBuilder* output) const override; |
+ std::unique_ptr<Value> clone() const override; |
+ |
+ void pushValue(std::unique_ptr<Value>); |
+ |
+ Value* at(size_t index); |
+ size_t size() const { return m_data.size(); } |
+ |
+private: |
+ ListValue(); |
+ std::vector<std::unique_ptr<Value>> m_data; |
+}; |
+ |
+{% for namespace in config.protocol.namespace %} |
+} // namespace {{namespace}} |
+{% endfor %} |
+ |
+#endif // {{"_".join(config.protocol.namespace)}}_Values_h |