[Opensrf-commits] r1019 - in branches/new-json2: include/opensrf src/libopensrf

svn at svn.open-ils.org svn at svn.open-ils.org
Tue Jul 10 18:02:40 EDT 2007


Author: erickson
Date: 2007-07-10 17:58:03 -0400 (Tue, 10 Jul 2007)
New Revision: 1019

Modified:
   branches/new-json2/include/opensrf/osrf_json.h
   branches/new-json2/src/libopensrf/osrf_json_object.c
Log:
created some additional boolean handling functions
implemented faster jsonObjectClone



Modified: branches/new-json2/include/opensrf/osrf_json.h
===================================================================
--- branches/new-json2/include/opensrf/osrf_json.h	2007-07-09 13:08:34 UTC (rev 1018)
+++ branches/new-json2/include/opensrf/osrf_json.h	2007-07-10 21:58:03 UTC (rev 1019)
@@ -188,7 +188,13 @@
  */
 jsonObject* jsonNewNumberObject( long double num );
 
+
 /**
+ * Creates a new json bool
+ */
+jsonObject* jsonNewBoolObject(int val);
+
+/**
  * Deallocates an object
  */
 void jsonObjectFree( jsonObject* o );
@@ -291,6 +297,7 @@
 
 int jsonBoolIsTrue( jsonObject* boolObj );
 
+void jsonSetBool(jsonObject* bl, int val);
 
 jsonObject* jsonObjectClone( const jsonObject* o );
 

Modified: branches/new-json2/src/libopensrf/osrf_json_object.c
===================================================================
--- branches/new-json2/src/libopensrf/osrf_json_object.c	2007-07-09 13:08:34 UTC (rev 1018)
+++ branches/new-json2/src/libopensrf/osrf_json_object.c	2007-07-10 21:58:03 UTC (rev 1019)
@@ -52,6 +52,13 @@
 	return o;
 }
 
+jsonObject* jsonNewBoolObject(int val) {
+    jsonObject* o = jsonNewObject(NULL);
+    o->type = JSON_BOOL;
+    jsonSetBool(o, val);
+    return o;
+}
+
 jsonObject* jsonNewObjectType(int type) {
 	jsonObject* o = jsonNewObject(NULL);
 	o->type = type;
@@ -84,6 +91,11 @@
 	jsonObjectFree(o);
 }
 
+void jsonSetBool(jsonObject* bl, int val) {
+    if(!bl) return;
+    JSON_INIT_CLEAR(bl, JSON_BOOL);
+    bl->value.b = val;
+}
 
 unsigned long jsonObjectPush(jsonObject* o, jsonObject* newo) {
 	if(!(o && newo)) return -1;
@@ -300,6 +312,7 @@
 	dest->classname = strdup(classname);
 }
 
+/*
 jsonObject* jsonObjectClone( const jsonObject* o ) {
 	if(!o) return NULL;
 	char* json = jsonObjectToJSONRaw(o);
@@ -309,7 +322,41 @@
 	free(json);
 	return oo;
 }
+*/
 
+jsonObject* jsonObjectClone( const jsonObject* o ) {
+    if(!o) return NULL;
+
+    jsonObject* arr; 
+    jsonObject* hash; 
+    jsonIterator* itr;
+    jsonObject* tmp;
+    int i;
+
+    switch(o->type) {
+        case JSON_NULL:
+            return jsonNewObject(NULL);
+        case JSON_STRING:
+            return jsonNewObject(jsonObjectGetString(o));
+        case JSON_NUMBER:
+            return jsonNewNumberObject(jsonObjectGetNumber(o));
+        case JSON_BOOL:
+            return jsonNewBoolObject(jsonBoolIsTrue((jsonObject*) o));
+        case JSON_ARRAY:
+            arr = jsonNewObject(NULL);
+            for(i=0; i < o->size; i++) 
+                jsonObjectPush(arr, jsonObjectClone(jsonObjectGetIndex(o, i)));
+            return arr;
+        case JSON_HASH:
+            hash = jsonNewObject(NULL);
+            itr = jsonNewIterator(o);
+            while( (tmp = jsonIteratorNext(itr)) )
+                jsonObjectSetKey(hash, itr->key, jsonObjectClone(tmp));
+            jsonObjectIteratorFree(itr);
+            return hash;
+    }
+}
+
 int jsonBoolIsTrue( jsonObject* boolObj ) {
     if( boolObj && boolObj->type == JSON_BOOL && boolObj->value.b )
         return 1;



More information about the opensrf-commits mailing list