template<typename Container, typename PointT> void octree_base<Container, PointT>::saveToFile () { // Create JSON object boost::shared_ptr<cJSON> idx (cJSON_CreateObject (), cJSON_Delete); cJSON* name = cJSON_CreateString ("test"); cJSON* version = cJSON_CreateNumber ( OUTOFCORE_VERSION_ ); cJSON* pointtype = cJSON_CreateString ("urp"); cJSON* lod = cJSON_CreateNumber (static_cast<double>(root_->m_tree_->max_depth_)); // cJSON does not allow 64 bit ints. Have to put the points in a double to // use this api, will allow counts up to 2^52 points to be stored correctly std::vector<double> lodPoints_db; lodPoints_db.insert (lodPoints_db.begin (), lodPoints_.begin (), lodPoints_.end ()); cJSON* numpts = cJSON_CreateDoubleArray ( &(lodPoints_db.front ()), static_cast<int>(lodPoints_db.size ()) ); cJSON_AddItemToObject (idx.get (), "name", name); cJSON_AddItemToObject (idx.get (), "version", version); cJSON_AddItemToObject (idx.get (), "pointtype", pointtype); cJSON_AddItemToObject (idx.get (), "lod", lod); cJSON_AddItemToObject (idx.get (), "numpts", numpts); cJSON_AddStringToObject(idx.get(), "coord_system", coord_system_.c_str()); char* idx_txt = cJSON_Print (idx.get ()); std::ofstream f (treepath_.string ().c_str (), std::ios::out | std::ios::trunc); f << idx_txt; f.close (); free (idx_txt); }
void OutofcoreOctreeBaseMetadata::serializeMetadataToDisk () { // Create JSON object boost::shared_ptr<cJSON> idx (cJSON_CreateObject (), cJSON_Delete); cJSON* name = cJSON_CreateString (tree_name_.c_str ()); cJSON* version = cJSON_CreateNumber ( __PCL_OUTOFCORE_VERSION__ ); cJSON* pointtype = cJSON_CreateString (point_type_.c_str ()); cJSON* lod = cJSON_CreateNumber (static_cast<double> (levels_of_depth_)); // cJSON does not allow 64 bit ints. Have to put the points in a double to // use this api, will allow counts up to 2^52 points to be stored correctly //or split into LSB MSB? std::vector<double> lodPoints_db; lodPoints_db.insert (lodPoints_db.begin (), LOD_num_points_.begin (), LOD_num_points_.end ()); cJSON* numpts = cJSON_CreateDoubleArray ( &(lodPoints_db.front ()), static_cast<int>(lodPoints_db.size ())); cJSON_AddItemToObject (idx.get (), "name", name); cJSON_AddItemToObject (idx.get (), "version", version); cJSON_AddItemToObject (idx.get (), "pointtype", pointtype); cJSON_AddItemToObject (idx.get (), "lod", lod); cJSON_AddItemToObject (idx.get (), "numpts", numpts); cJSON_AddStringToObject(idx.get(), "coord_system", coordinate_system_.c_str()); char* idx_txt = cJSON_Print (idx.get ()); std::ofstream f (metadata_filename_.string ().c_str (), std::ios::out | std::ios::trunc); f << idx_txt; f.close (); free (idx_txt); }
DiagnosticVisualisation::DiagnosticVisualisation(UdpClient *udpClient, unsigned int numberParticles, Particle2 *particleTable, RoboclawProxy *roboClaw, HokuyoProxy *hokuyo) { client = udpClient; NumberParticles = numberParticles; Particles = particleTable; RoboClaw = roboClaw; Hokuyo = hokuyo; rootJSON = cJSON_CreateObject(); roboClawJSON = cJSON_CreateObject(); hokuyoJSON = cJSON_CreateObject(); particlesJSONTable = cJSON_CreateArray(); //cJSON_AddItemToObject(rootJSON, "RoboClaw", roboClawJSON); cJSON_AddItemToObject(rootJSON, "Hokuyo", hokuyoJSON); cJSON_AddItemToObject(rootJSON, "Particles", particlesJSONTable); hokuyoJSONAngleTable = cJSON_CreateDoubleArray(Hokuyo->Angles, Hokuyo->Length); hokuyoJSONDistancesTable = cJSON_CreateIntArray(Hokuyo->Distances, Hokuyo->Length); cJSON_AddItemToObject(hokuyoJSON, "Angles", hokuyoJSONAngleTable); cJSON_AddItemToObject(hokuyoJSON, "Distances", hokuyoJSONDistancesTable); cJSON *itemParticle; cJSON *tableCalculatedProbability; cJSON *tableCalculatedDistances; for (unsigned int i = 0; i < NumberParticles; i++) { itemParticle = cJSON_CreateObject(); cJSON_AddNumberToObject(itemParticle, "X", Particles[i].X); cJSON_AddNumberToObject(itemParticle, "Y", Particles[i].Y); cJSON_AddNumberToObject(itemParticle, "P", Particles[i].P); cJSON_AddNumberToObject(itemParticle, "Angle", Particles[i].Angle); tableCalculatedProbability = cJSON_CreateDoubleArray( Particles[i].CalculatedProbability, Particles[i].Length); cJSON_AddItemToObject(itemParticle, "CalculatedProbability", tableCalculatedProbability); tableCalculatedDistances = cJSON_CreateDoubleArray( Particles[i].CalculatedDistances, Particles[i].Length); cJSON_AddItemToObject(itemParticle, "CalculatedDistances", tableCalculatedDistances); cJSON_AddItemToArray(particlesJSONTable, itemParticle); } /*particlesJSONTable = cJSON_CreateArray(); cJSON *itemParticle; for(int i = 0; i < NumberParticles;i++) { itemParticle = cJSON_CreateObject(); cJSON_AddNumberToObject(itemParticle,"X",Particles[i].X); cJSON_AddItemToArray(particlesJSONTable,itemParticle); } */ // cJSON_AddItemToObject(particlesJSON,"Particle",particlesJSONTable); //(Particles, // NumberParticles); //cJSON_AddNumberToObject(particlesJSON,"X",) char * rendered = cJSON_Print(rootJSON); printf(rendered); fflush(NULL); Hokuyo->Distances[0] = 777; Hokuyo->Angles[0] = 555; Particles[0].X = Particles[0].Angle = 888; Particles[0].CalculatedDistances[0] = 0.7777; Particles[0].CalculatedProbability[0] = 5000; Send(); rendered = cJSON_Print(rootJSON); printf(rendered); fflush(NULL); //particlesJSONTable = cJSON_CreateArray(); //cJSON_AddItemToArray() // // cJSON_AddItemToObject(particlesJSON, "X", ) //cJSON_AddNumberToObject() //cJSON_AddItemToObject(rootJSON, /*cJSON_AddItemToObject(root, "name", cJSON_CreateString("Jack (\"Bee\") Nimble")); cJSON_AddItemToObject(root, "format", fmt = cJSON_CreateObject()); cJSON_AddStringToObject(fmt, "type", "rect"); cJSON_AddNumberToObject(fmt, "width", 1920); cJSON_AddNumberToObject(fmt, "height", 1080); cJSON_AddFalseToObject (fmt, "interlace"); cJSON_AddNumberToObject(fmt, "frame rate", 24); { "name": "Jack (\"Bee\") Nimble", "format": { "type": "rect", "width": 1920, "height": 1080, "interlace": false, "frame rate": 24 } } */ }
cJSON* CHPRepPayloadToJson(OCRepPayload* repData) { cJSON *outJson = cJSON_CreateObject(); if (outJson == NULL) { return NULL; } OCRepPayloadValue* val = repData->values; while (val) { switch (val->type) { case OCREP_PROP_NULL: break; case OCREP_PROP_INT: OIC_LOG_V(DEBUG, TAG, "%s(int):%d", val->name, (int)val->i); cJSON_AddNumberToObject(outJson,val->name,(int)val->i); break; case OCREP_PROP_DOUBLE: OIC_LOG_V(DEBUG, TAG, "%s(double):%f", val->name, val->d); cJSON_AddNumberToObject(outJson,val->name,val->d); break; case OCREP_PROP_BOOL: OIC_LOG_V(DEBUG, TAG, "%s(bool):%s", val->name, val->b ? "true" : "false"); cJSON_AddBoolToObject(outJson,val->name,val->b); break; case OCREP_PROP_STRING: OIC_LOG_V(DEBUG, TAG, "%s(string):%s", val->name, val->str); cJSON_AddStringToObject(outJson,val->name,val->str); break; case OCREP_PROP_OBJECT: { cJSON *objJson = CHPRepPayloadToJson(val->obj); if (objJson != NULL) { cJSON_AddItemToObject(outJson,val->name,objJson); } break; } case OCREP_PROP_ARRAY: { unsigned int i = 0; int arraySize = (int)val->arr.dimensions[0]; switch (val->arr.type) { case OCREP_PROP_INT: OIC_LOG_V(DEBUG, TAG, "%s(int array)", val->name); if (arraySize > 0) { int castVal[val->arr.dimensions[0]]; for (i = 0 ; i < (unsigned int)arraySize ; i++) { castVal[i] = (int)val->arr.iArray[i]; } cJSON *array = cJSON_CreateIntArray(castVal,arraySize); if (array != NULL) { cJSON_AddItemToObject(outJson,val->name,array); } } break; case OCREP_PROP_DOUBLE: OIC_LOG_V(DEBUG, TAG, "%s(double array)", val->name); if (arraySize > 0) { cJSON *array = cJSON_CreateDoubleArray(val->arr.dArray,arraySize); if (array != NULL) { cJSON_AddItemToObject(outJson,val->name,array); } } break; case OCREP_PROP_STRING: OIC_LOG_V(DEBUG, TAG, "%s(string array)", val->name); if (arraySize > 0) { cJSON *array = cJSON_CreateStringArray((const char**)val->arr.strArray, arraySize); if (array != NULL) { cJSON_AddItemToObject(outJson,val->name,array); } } break; case OCREP_PROP_OBJECT: if (arraySize > 0) { cJSON *arrayJson = cJSON_CreateArray(); for (i = 0 ; i < (unsigned int)arraySize ; i++) { cJSON *objJson = CHPRepPayloadToJson(val->arr.objArray[i]); if (objJson != NULL && arrayJson != NULL) { cJSON_AddItemToArray(arrayJson, objJson); } } if (arrayJson != NULL) { cJSON_AddItemToObject(outJson,val->name,arrayJson); } } break; case OCREP_PROP_BOOL: //TODO : Not support - cJSON_CreateBoolArray break; default: OIC_LOG_V(ERROR, TAG, "Unknown/unsupported array type: %s", val->name); break; } break; } default: OIC_LOG_V(ERROR, TAG, "Unknown type: %s", val->name); break; } val = val->next; } if( repData->values != NULL) { return outJson; } else { cJSON_Delete(outJson); return NULL; } }
void cJSONExt_AddDoubleArrayToObject(cJSON* object, const char* name, double* vars, int numinarray) { cJSON* jsonarray = cJSON_CreateDoubleArray( vars, numinarray ); cJSON_AddItemToObject( object, name, jsonarray ); }