C++: Optimize PropertyProxy
[jansson.git] / src / jansson.ipp
index fd3a1bf..e965ef7 100644 (file)
@@ -338,14 +338,17 @@ namespace json {
         }
 
         PropertyProxy::PropertyProxy(json_t* object, const char* key)
-            : _object(object) {
-            _key = strdup(key);
+            : _object(object), _key(0) {
+            _iter = json_object_iter_at(object, key);
+            if(!_iter)
+                _key = strdup(key);
             json_incref(_object);
         }
 
         PropertyProxy::PropertyProxy(const PropertyProxy& other)
-            : _object(other._object) {
-            _key = strdup(other._key);
+            : _object(other._object), _iter(other._iter), _key(0) {
+            if(other._key)
+                _key = strdup(other._key);
             json_incref(_object);
         }
 
@@ -356,12 +359,18 @@ namespace json {
 
         // assign value to proxied object property
         PropertyProxy& PropertyProxy::operator=(const Value& value) {
-            json_object_set(_object, _key, value.as_json());
+            if(_iter)
+                json_object_iter_set(_object, _iter, value.as_json());
+            else
+                json_object_set(_object, _key, value.as_json());
             return *this;
         }
 
         json_t* PropertyProxy::as_json() const {
-            return json_object_get(_object, _key);
+            if(_iter)
+                return json_object_iter_value(_iter);
+            else
+                return json_object_get(_object, _key);
         }
 
     } // namespace json::detail