Index: third_party/WebKit/Source/platform/JSONValues.h |
diff --git a/third_party/WebKit/Source/platform/JSONValues.h b/third_party/WebKit/Source/platform/JSONValues.h |
index a6cf1ddbb9f80f60b2b70468c5d7e3e8511d22f7..4a06be7eae0b8a7c7f3cf16f5cc41a6f0a50a1ab 100644 |
--- a/third_party/WebKit/Source/platform/JSONValues.h |
+++ b/third_party/WebKit/Source/platform/JSONValues.h |
@@ -56,6 +56,7 @@ |
public: |
static const int maxDepth = 1000; |
+ JSONValue() : m_type(TypeNull) { } |
virtual ~JSONValue() { } |
static PassRefPtr<JSONValue> null() |
@@ -83,6 +84,10 @@ |
virtual bool asNumber(unsigned long* output) const; |
virtual bool asNumber(unsigned* output) const; |
virtual bool asString(String* output) const; |
+ virtual bool asObject(RefPtr<JSONObject>* output); |
+ virtual bool asArray(RefPtr<JSONArray>* output); |
+ virtual PassRefPtr<JSONObject> asObject(); |
+ virtual PassRefPtr<JSONArray> asArray(); |
String toJSONString() const; |
String toPrettyJSONString() const; |
@@ -92,13 +97,12 @@ |
static String quoteString(const String&); |
protected: |
- JSONValue() : m_type(TypeNull) { } |
explicit JSONValue(Type type) : m_type(type) { } |
virtual void prettyWriteJSONInternal(StringBuilder* output, int depth) const; |
private: |
- friend class JSONObject; |
- friend class JSONArray; |
+ friend class JSONObjectBase; |
+ friend class JSONArrayBase; |
Type m_type; |
}; |
@@ -164,7 +168,7 @@ |
String m_stringValue; |
}; |
-class PLATFORM_EXPORT JSONObject : public JSONValue { |
+class PLATFORM_EXPORT JSONObjectBase : public JSONValue { |
private: |
typedef HashMap<String, RefPtr<JSONValue>> Dictionary; |
@@ -172,21 +176,17 @@ |
typedef Dictionary::iterator iterator; |
typedef Dictionary::const_iterator const_iterator; |
- static PassRefPtr<JSONObject> create() |
- { |
- return adoptRef(new JSONObject()); |
- } |
- |
- static PassRefPtr<JSONObject> cast(PassRefPtr<JSONValue> value) |
- { |
- if (!value || value->type() != TypeObject) |
- return nullptr; |
- return adoptRef(static_cast<JSONObject*>(value.leakRef())); |
- } |
+ PassRefPtr<JSONObject> asObject() override; |
+ JSONObject* openAccessors(); |
void writeJSON(StringBuilder* output) const override; |
int size() const { return m_data.size(); } |
+ |
+protected: |
+ ~JSONObjectBase() override; |
+ |
+ bool asObject(RefPtr<JSONObject>* output) override; |
void setBoolean(const String& name, bool); |
void setNumber(const String& name, double); |
@@ -214,42 +214,71 @@ |
void remove(const String& name); |
+ void prettyWriteJSONInternal(StringBuilder* output, int depth) const override; |
+ |
iterator begin() { return m_data.begin(); } |
iterator end() { return m_data.end(); } |
const_iterator begin() const { return m_data.begin(); } |
const_iterator end() const { return m_data.end(); } |
- ~JSONObject() override; |
- |
-protected: |
- void prettyWriteJSONInternal(StringBuilder* output, int depth) const override; |
- |
-private: |
- JSONObject(); |
- |
+ |
+protected: |
+ JSONObjectBase(); |
+ |
+private: |
Dictionary m_data; |
Vector<String> m_order; |
}; |
-class PLATFORM_EXPORT JSONArray : public JSONValue { |
+class PLATFORM_EXPORT JSONObject : public JSONObjectBase { |
+public: |
+ static PassRefPtr<JSONObject> create() |
+ { |
+ return adoptRef(new JSONObject()); |
+ } |
+ |
+ using JSONObjectBase::asObject; |
+ |
+ using JSONObjectBase::setBoolean; |
+ using JSONObjectBase::setNumber; |
+ using JSONObjectBase::setString; |
+ using JSONObjectBase::setValue; |
+ using JSONObjectBase::setObject; |
+ using JSONObjectBase::setArray; |
+ |
+ using JSONObjectBase::find; |
+ using JSONObjectBase::getBoolean; |
+ using JSONObjectBase::getNumber; |
+ using JSONObjectBase::getString; |
+ using JSONObjectBase::getObject; |
+ using JSONObjectBase::getArray; |
+ using JSONObjectBase::get; |
+ |
+ using JSONObjectBase::booleanProperty; |
+ |
+ using JSONObjectBase::remove; |
+ |
+ using JSONObjectBase::begin; |
+ using JSONObjectBase::end; |
+ |
+ using JSONObjectBase::size; |
+}; |
+ |
+ |
+class PLATFORM_EXPORT JSONArrayBase : public JSONValue { |
public: |
typedef Vector<RefPtr<JSONValue>>::iterator iterator; |
typedef Vector<RefPtr<JSONValue>>::const_iterator const_iterator; |
- static PassRefPtr<JSONArray> create() |
- { |
- return adoptRef(new JSONArray()); |
- } |
- |
- static PassRefPtr<JSONArray> cast(PassRefPtr<JSONValue> value) |
- { |
- if (!value || value->type() != TypeArray) |
- return nullptr; |
- return adoptRef(static_cast<JSONArray*>(value.leakRef())); |
- } |
- |
- ~JSONArray() override; |
+ PassRefPtr<JSONArray> asArray() override; |
+ |
+ unsigned length() const { return m_data.size(); } |
void writeJSON(StringBuilder* output) const override; |
+ |
+protected: |
+ ~JSONArrayBase() override; |
+ |
+ bool asArray(RefPtr<JSONArray>* output) override; |
void pushBoolean(bool); |
void pushInt(int); |
@@ -260,7 +289,8 @@ |
void pushArray(PassRefPtr<JSONArray>); |
PassRefPtr<JSONValue> get(size_t index); |
- unsigned length() const { return m_data.size(); } |
+ |
+ void prettyWriteJSONInternal(StringBuilder* output, int depth) const override; |
iterator begin() { return m_data.begin(); } |
iterator end() { return m_data.end(); } |
@@ -268,11 +298,33 @@ |
const_iterator end() const { return m_data.end(); } |
protected: |
- void prettyWriteJSONInternal(StringBuilder* output, int depth) const override; |
- |
-private: |
- JSONArray(); |
+ JSONArrayBase(); |
+ |
+private: |
Vector<RefPtr<JSONValue>> m_data; |
+}; |
+ |
+class PLATFORM_EXPORT JSONArray : public JSONArrayBase { |
+public: |
+ static PassRefPtr<JSONArray> create() |
+ { |
+ return adoptRef(new JSONArray()); |
+ } |
+ |
+ using JSONArrayBase::asArray; |
+ |
+ using JSONArrayBase::pushBoolean; |
+ using JSONArrayBase::pushInt; |
+ using JSONArrayBase::pushNumber; |
+ using JSONArrayBase::pushString; |
+ using JSONArrayBase::pushValue; |
+ using JSONArrayBase::pushObject; |
+ using JSONArrayBase::pushArray; |
+ |
+ using JSONArrayBase::get; |
+ |
+ using JSONArrayBase::begin; |
+ using JSONArrayBase::end; |
}; |
PLATFORM_EXPORT void escapeStringForJSON(const String&, StringBuilder*); |