|
|
@ -529,3 +529,30 @@ cJSON *cJSON_CreateIntArray(int *numbers,int count) {int i;cJSON *n=0,*p=0,*a |
|
|
|
cJSON *cJSON_CreateFloatArray(float *numbers,int count) {int i;cJSON *n=0,*p=0,*a=cJSON_CreateArray();for(i=0;a && i<count;i++){n=cJSON_CreateNumber(numbers[i]);if(!i)a->child=n;else suffix_object(p,n);p=n;}return a;} |
|
|
|
cJSON *cJSON_CreateDoubleArray(double *numbers,int count) {int i;cJSON *n=0,*p=0,*a=cJSON_CreateArray();for(i=0;a && i<count;i++){n=cJSON_CreateNumber(numbers[i]);if(!i)a->child=n;else suffix_object(p,n);p=n;}return a;} |
|
|
|
cJSON *cJSON_CreateStringArray(const char **strings,int count) {int i;cJSON *n=0,*p=0,*a=cJSON_CreateArray();for(i=0;a && i<count;i++){n=cJSON_CreateString(strings[i]);if(!i)a->child=n;else suffix_object(p,n);p=n;}return a;} |
|
|
|
|
|
|
|
/* Duplication */ |
|
|
|
cJSON *cJSON_Duplicate(cJSON *item,int recurse) |
|
|
|
{ |
|
|
|
cJSON *newitem,*cptr,*nptr=0,*newchild; |
|
|
|
/* Bail on bad ptr */ |
|
|
|
if (!item) return 0; |
|
|
|
/* Create new item */ |
|
|
|
newitem=cJSON_New_Item(); |
|
|
|
if (!newitem) return 0; |
|
|
|
/* Copy over all vars */ |
|
|
|
newitem->type=item->type&(~cJSON_IsReference),newitem->valueint=item->valueint,newitem->valuedouble=item->valuedouble; |
|
|
|
if (item->valuestring) newitem->valuestring=cJSON_strdup(item->valuestring); |
|
|
|
if (item->string) newitem->string=cJSON_strdup(item->string); |
|
|
|
/* If non-recursive, then we're done! */ |
|
|
|
if (!recurse) return newitem; |
|
|
|
/* Walk the ->next chain for the child. */ |
|
|
|
cptr=item->child; |
|
|
|
while (cptr) |
|
|
|
{ |
|
|
|
newchild=cJSON_Duplicate(cptr,1); /* Duplicate (with recurse) each item in the ->next chain */ |
|
|
|
if (nptr) {nptr->next=newchild,newchild->prev=nptr;nptr=newchild;} /* If newitem->child already set, then crosswire ->prev and ->next and move on */ |
|
|
|
else {newitem->child=newchild;nptr=newchild;} /* Set newitem->child and move to it */ |
|
|
|
cptr=cptr->next; |
|
|
|
} |
|
|
|
return newitem; |
|
|
|
} |
|
|
|