From 6d8e40ea3b44afeb6749196f3079808b0ba8d418 Mon Sep 17 00:00:00 2001 From: erickson Date: Tue, 10 Jul 2007 21:58:03 +0000 Subject: [PATCH] created some additional boolean handling functions implemented faster jsonObjectClone git-svn-id: svn://svn.open-ils.org/OpenSRF/branches/new-json2@1019 9efc2488-bf62-4759-914b-345cdb29e865 --- include/opensrf/osrf_json.h | 7 ++++++ src/libopensrf/osrf_json_object.c | 47 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) diff --git a/include/opensrf/osrf_json.h b/include/opensrf/osrf_json.h index b5f56db..82c5253 100644 --- a/include/opensrf/osrf_json.h +++ b/include/opensrf/osrf_json.h @@ -188,6 +188,12 @@ jsonObject* jsonNewObjectType(int type); */ jsonObject* jsonNewNumberObject( long double num ); + +/** + * Creates a new json bool + */ +jsonObject* jsonNewBoolObject(int val); + /** * Deallocates an object */ @@ -291,6 +297,7 @@ void jsonObjectSetClass(jsonObject* dest, const char* classname ); int jsonBoolIsTrue( jsonObject* boolObj ); +void jsonSetBool(jsonObject* bl, int val); jsonObject* jsonObjectClone( const jsonObject* o ); diff --git a/src/libopensrf/osrf_json_object.c b/src/libopensrf/osrf_json_object.c index 7be5335..17d6fb4 100644 --- a/src/libopensrf/osrf_json_object.c +++ b/src/libopensrf/osrf_json_object.c @@ -52,6 +52,13 @@ jsonObject* jsonNewNumberObject( long double num ) { 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 @@ static void _jsonFreeListItem(void* item){ 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 @@ void jsonObjectSetClass(jsonObject* dest, const char* classname ) { dest->classname = strdup(classname); } +/* jsonObject* jsonObjectClone( const jsonObject* o ) { if(!o) return NULL; char* json = jsonObjectToJSONRaw(o); @@ -309,6 +322,40 @@ jsonObject* jsonObjectClone( const jsonObject* o ) { 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 ) -- 2.11.0