Explorar el Código

Fix name error, add iterator for JSON object type.

aster2013 hace 10 años
padre
commit
ddc19bf278

+ 0 - 2
Source/Urho3D/LuaScript/pkgs/Resource/JSONFile.pkg

@@ -1,7 +1,5 @@
 $#include "Resource/JSONFile.h"
 
-enum JSONValueType {};
-
 class JSONFile : Resource
 {
     JSONFile();

+ 2 - 2
Source/Urho3D/LuaScript/pkgs/Resource/JSONValue.pkg

@@ -12,7 +12,7 @@ enum JSONValueType
 
 class JSONValue
 {
-	JSONValue();
+    JSONValue();
     JSONValue(bool value);
     JSONValue(int value);
     JSONValue(unsigned value);
@@ -21,7 +21,7 @@ class JSONValue
     JSONValue(const String value);
     JSONValue(const char* value);
     JSONValue(const JSONArray& value);
-    JSONValue(const JSONObject& value);    
+    JSONValue(const JSONObject& value);
     JSONValue(const JSONValue& value);
     ~JSONValue();
 

+ 35 - 3
Source/Urho3D/Resource/JSONValue.cpp

@@ -32,8 +32,8 @@ namespace Urho3D
 {
 
 const JSONValue JSONValue::EMPTY;
-const JSONArray JSONValue::EMPTY_ARRAY;
-const JSONObject JSONValue::EMPTY_OBJECT;
+const JSONArray JSONValue::emptyArray;
+const JSONObject JSONValue::emptyObject;
 
 void JSONValue::SetType(JSONValueType valueType)
 {
@@ -287,7 +287,7 @@ void JSONValue::Set(const String& key, const JSONValue& value)
     // Convert to object type
     SetType(JSON_OBJECT);
 
-    objectValue_->Insert(MakePair<String, JSONValue>(key, value));
+    (*objectValue_)[key] = value;
 }
 
 const JSONValue& JSONValue::Get(const String& key) const
@@ -318,6 +318,38 @@ bool JSONValue::Contains(const String& key) const
     return objectValue_->Contains(key);
 }
 
+JSONObjectIterator JSONValue::Begin()
+{
+    // Convert to object type.
+    SetType(JSON_OBJECT);
+
+    return objectValue_->Begin();
+}
+
+ConstJSONObjectIterator JSONValue::Begin() const
+{
+    if (valueType_ != JSON_OBJECT)
+        return emptyObject.Begin();
+
+    return objectValue_->Begin();
+}
+
+JSONObjectIterator JSONValue::End()
+{
+    // Convert to object type.
+    SetType(JSON_OBJECT);
+
+    return objectValue_->Begin();
+}
+
+ConstJSONObjectIterator JSONValue::End() const
+{
+    if (valueType_ != JSON_OBJECT)
+        return emptyObject.End();
+
+    return objectValue_->End();
+}
+
 void JSONValue::Clear()
 {
     if (valueType_ == JSON_ARRAY)

+ 20 - 8
Source/Urho3D/Resource/JSONValue.h

@@ -48,6 +48,10 @@ class JSONValue;
 typedef Vector<JSONValue> JSONArray;
 /// JSON object type.
 typedef HashMap<String, JSONValue> JSONObject;
+/// JSON object iterator.
+typedef JSONObject::Iterator JSONObjectIterator;
+/// Constant JSON object iterator.
+typedef JSONObject::ConstIterator ConstJSONObjectIterator;
 
 /// JSON value class.
 class URHO3D_API JSONValue
@@ -177,11 +181,11 @@ public:
     /// Return C string value.
     const char* GetCString() const { return IsString() ? stringValue_->CString() : 0;}
     /// Return JSON array value.
-    const JSONArray& GetArray() const { return IsArray() ? *arrayValue_ : EMPTY_ARRAY; }
+    const JSONArray& GetArray() const { return IsArray() ? *arrayValue_ : emptyArray; }
     /// Return JSON object value.
-    const JSONObject& GetObject() const { return IsObject() ? *objectValue_ : EMPTY_OBJECT; }
+    const JSONObject& GetObject() const { return IsObject() ? *objectValue_ : emptyObject; }
 
-	// JSON array functions
+    // JSON array functions
     /// Return JSON value at index.
     JSONValue& operator [](unsigned index);
     /// Return JSON value at index.
@@ -203,7 +207,7 @@ public:
     /// Return size of array .
     unsigned Size() const;
 
-	// JSON object functions
+    // JSON object functions
     /// Return JSON value with key.
     JSONValue& operator [](const String& key);
     /// Return JSON value with key.
@@ -216,16 +220,24 @@ public:
     bool Erase(const String& key);
     /// Return whether contains a pair with key.
     bool Contains(const String& key) const;
-    
-    /// Clear array or object (user for array and object types).
+    /// Return iterator to the beginning.
+    JSONObjectIterator Begin();
+    /// Return iterator to the beginning.
+    ConstJSONObjectIterator Begin() const;
+    /// Return iterator to the end.
+    JSONObjectIterator End();
+    /// Return iterator to the beginning.
+    ConstJSONObjectIterator End() const;
+
+    /// Clear array or object.
     void Clear();
 
     /// Empty JSON value.
     static const JSONValue EMPTY;
     /// Empty JSON array.
-    static const JSONArray EMPTY_ARRAY;
+    static const JSONArray emptyArray;
     /// Empty JSON object.
-    static const JSONObject EMPTY_OBJECT;
+    static const JSONObject emptyObject;
 
 private:
     /// Value type.

+ 2 - 3
Source/Urho3D/Resource/Localization.cpp

@@ -156,8 +156,7 @@ void Localization::Reset()
 
 void Localization::LoadJSON(const JSONValue& source)
 {
-    const JSONObject& ids = source.GetObject();
-    for (JSONObject::ConstIterator i = ids.Begin(); i != ids.End(); ++i)
+    for (JSONObject::ConstIterator i = source.Begin(); i != source.End(); ++i)
     {
         String id = i->first_;
         if (id.Empty())
@@ -165,7 +164,7 @@ void Localization::LoadJSON(const JSONValue& source)
             LOGWARNING("Localization::LoadJSON(source): string ID is empty");
             continue;
         }
-        const JSONObject& langs = i->second_.GetObject();
+        const JSONValue& langs = i->second_;
         for (JSONObject::ConstIterator j = langs.Begin(); j != langs.End(); ++j)
         {
             const String& lang = j->first_;