Merge branch '1.2'
[jansson.git] / src / value.c
index 2b97947..35166f4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2009 Petri Lehtinen <petri@digip.org>
+ * Copyright (c) 2009, 2010 Petri Lehtinen <petri@digip.org>
  *
  * Jansson is free software; you can redistribute it and/or modify
  * it under the terms of the MIT license. See LICENSE for details.
@@ -170,7 +170,7 @@ int json_object_update(json_t *object, json_t *other)
         key = json_object_iter_key(iter);
         value = json_object_iter_value(iter);
 
-        if(json_object_set(object, key, value))
+        if(json_object_set_nocheck(object, key, value))
             return -1;
 
         iter = json_object_iter_next(other, iter);
@@ -190,6 +190,17 @@ void *json_object_iter(json_t *json)
     return hashtable_iter(&object->hashtable);
 }
 
+void *json_object_iter_at(json_t *json, const char *key)
+{
+    json_object_t *object;
+
+    if(!key || !json_is_object(json))
+        return NULL;
+
+    object = json_to_object(json);
+    return hashtable_iter_at(&object->hashtable, key);
+}
+
 void *json_object_iter_next(json_t *json, void *iter)
 {
     json_object_t *object;
@@ -217,6 +228,19 @@ json_t *json_object_iter_value(void *iter)
     return (json_t *)hashtable_iter_value(iter);
 }
 
+int json_object_iter_set_new(json_t *json, void *iter, json_t *value)
+{
+    json_object_t *object;
+
+    if(!json_is_object(json) || !iter || !value)
+        return -1;
+
+    object = json_to_object(json);
+    hashtable_iter_set(&object->hashtable, iter, value);
+
+    return 0;
+}
+
 static int json_object_equal(json_t *object1, json_t *object2)
 {
     void *iter;
@@ -260,7 +284,7 @@ static json_t *json_object_copy(json_t *object)
 
         key = json_object_iter_key(iter);
         value = json_object_iter_value(iter);
-        json_object_set(result, key, value);
+        json_object_set_nocheck(result, key, value);
 
         iter = json_object_iter_next(object, iter);
     }
@@ -285,7 +309,7 @@ static json_t *json_object_deep_copy(json_t *object)
 
         key = json_object_iter_key(iter);
         value = json_object_iter_value(iter);
-        json_object_set(result, key, json_deep_copy(value));
+        json_object_set_new_nocheck(result, key, json_deep_copy(value));
 
         iter = json_object_iter_next(object, iter);
     }
@@ -586,7 +610,7 @@ static json_t *json_array_deep_copy(json_t *array)
         return NULL;
 
     for(i = 0; i < json_array_size(array); i++)
-        json_array_append(result, json_deep_copy(json_array_get(array, i)));
+        json_array_append_new(result, json_deep_copy(json_array_get(array, i)));
 
     return result;
 }
@@ -667,7 +691,7 @@ static int json_string_equal(json_t *string1, json_t *string2)
 
 static json_t *json_string_copy(json_t *string)
 {
-    return json_string(json_string_value(string));
+    return json_string_nocheck(json_string_value(string));
 }