[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