/** Convert a PCSCHEMA to a human-readable JSON string */ char * pc_schema_to_json(const PCSCHEMA *pcs) { int i; char *str; stringbuffer_t *sb = stringbuffer_create(); stringbuffer_append(sb, "{"); if ( pcs->pcid ) stringbuffer_aprintf(sb, "\"pcid\" : %d,\n", pcs->pcid); if ( pcs->srid ) stringbuffer_aprintf(sb, "\"srid\" : %d,\n", pcs->srid); if ( pcs->compression ) stringbuffer_aprintf(sb, "\"compression\" : %d,\n", pcs->compression); if ( pcs->ndims ) { stringbuffer_append(sb, "\"dims\" : [\n"); for ( i = 0; i < pcs->ndims; i++ ) { if ( pcs->dims[i] ) { PCDIMENSION *d = pcs->dims[i]; if ( i ) stringbuffer_append(sb, ","); stringbuffer_append(sb, "\n { \n"); if ( d->name ) stringbuffer_aprintf(sb, " \"name\" : \"%s\",\n", d->name); if ( d->description ) stringbuffer_aprintf(sb, " \"description\" : \"%s\",\n", d->description); stringbuffer_aprintf(sb, " \"size\" : %d,\n", d->size); stringbuffer_aprintf(sb, " \"byteoffset\" : %d,\n", d->byteoffset); stringbuffer_aprintf(sb, " \"scale\" : %g,\n", d->scale); stringbuffer_aprintf(sb, " \"interpretation\" : \"%s\",\n", pc_interpretation_string(d->interpretation)); stringbuffer_aprintf(sb, " \"offset\" : %g,\n", d->offset); stringbuffer_aprintf(sb, " \"active\" : %d\n", d->active); stringbuffer_append(sb, " }"); } } stringbuffer_append(sb, "\n]\n"); } stringbuffer_append(sb, "}\n"); str = stringbuffer_getstringcopy(sb); stringbuffer_destroy(sb); return str; }
/**@brief * Convert a PCSDIMENSION to a human-readable JSON string * @param the PCDIMENSION we want to print * @return q pointer to the string buff describing the object * */ char * pc_dimension_to_json(const PCDIMENSION *d) { int i; char *str; stringbuffer_t *sb = stringbuffer_create(); stringbuffer_append(sb, "{"); if ( d ) { if ( i ) stringbuffer_append(sb, ","); stringbuffer_append(sb, "\n { \n"); if ( d->name ) stringbuffer_aprintf(sb, " \"name\" : \"%s\",\n", d->name); if ( d->description ) stringbuffer_aprintf(sb, " \"description\" : \"%s\",\n", d->description); stringbuffer_aprintf(sb, " \"size\" : %d,\n", d->size); stringbuffer_aprintf(sb, " \"byteoffset\" : %d,\n", d->byteoffset); stringbuffer_aprintf(sb, " \"scale\" : %g,\n", d->scale); stringbuffer_aprintf(sb, " \"interpretation\" : \"%s\",\n", pc_interpretation_string(d->interpretation)); stringbuffer_aprintf(sb, " \"offset\" : %g,\n", d->offset); stringbuffer_aprintf(sb, " \"active\" : %d\n", d->active); stringbuffer_append(sb, " }"); } stringbuffer_append(sb, "}\n"); str = stringbuffer_getstringcopy(sb); stringbuffer_destroy(sb); return str; }
int pc_double_to_ptr(uint8_t *ptr, uint32_t interpretation, double val) { switch( interpretation ) { case PC_UINT8: { uint8_t v = (uint8_t)lround(val); memcpy(ptr, &(v), sizeof(uint8_t)); break; } case PC_UINT16: { uint16_t v = (uint16_t)lround(val); memcpy(ptr, &(v), sizeof(uint16_t)); break; } case PC_UINT32: { uint32_t v = (uint32_t)lround(val); memcpy(ptr, &(v), sizeof(uint32_t)); break; } case PC_UINT64: { uint64_t v = (uint64_t)lround(val); memcpy(ptr, &(v), sizeof(uint64_t)); break; } case PC_INT8: { int8_t v = (int8_t)lround(val); memcpy(ptr, &(v), sizeof(int8_t)); break; } case PC_INT16: { int16_t v = (int16_t)lround(val); memcpy(ptr, &(v), sizeof(int16_t)); break; } case PC_INT32: { int32_t v = (int32_t)lround(val); memcpy(ptr, &(v), sizeof(int32_t)); break; } case PC_INT64: { int64_t v = (int64_t)lround(val); memcpy(ptr, &(v), sizeof(int64_t)); break; } case PC_FLOAT: { float v = (float)val; memcpy(ptr, &(v), sizeof(float)); break; } case PC_DOUBLE: { double v = val; memcpy(ptr, &(v), sizeof(double)); break; } default: { pcerror("unknown interpretation type \"%s\" encountered in pc_double_to_ptr", pc_interpretation_string( interpretation )); return PC_FAILURE; } } return PC_SUCCESS; }