static bool jnumber_to_string_append (jvalue_ref jref, JStreamRef generating) { SANITY_CHECK_POINTER(jref); if (jnum_deref(jref)->m_error) { PJ_LOG_WARN("converting a number that has an error (%d) set to a string", jnum_deref(jref)->m_error); } bool ok = false; switch (jnum_deref(jref)->m_type) { case NUM_RAW: assert(jnum_deref(jref)->value.raw.m_len != 0); ok = (generating->number (generating, jnum_deref(jref)->value.raw) != NULL); break; case NUM_FLOAT: ok = (generating->floating (generating, jnum_deref(jref)->value.floating) != NULL); break; case NUM_INT: ok = (generating->integer (generating, jnum_deref(jref)->value.integer) != NULL); break; default: // mismatched on purpose so that generation yields an error assert(false); generating->o_begin (generating); raw_buffer asStrBuf = J_CSTR_TO_BUF("Error - Unrecognized number type"); generating->string (generating, asStrBuf); generating->integer (generating, jnum_deref(jref)->m_type); break; } return ok; }
static bool inject_default_jnumber_double(void *ctxt, jvalue_ref ref) { char buf[24]; int len = snprintf(buf, sizeof(buf), "%.14lg", jnum_deref(ref)->value.floating); JSAXContextRef context = (JSAXContextRef)ctxt; return context->m_handlers->yajl_number(context, buf, len); }
static bool inject_default_jnumber_int(void *ctxt, jvalue_ref ref) { char buf[24]; int len = snprintf(buf, sizeof(buf), "%" PRId64, jnum_deref(ref)->value.integer); JSAXContextRef context = (JSAXContextRef)ctxt; return context->m_handlers->yajl_number(context, buf, len); }
static bool inject_default_jnumber_raw(void *ctxt, jvalue_ref ref) { JSAXContextRef context = (JSAXContextRef)ctxt; raw_buffer raw = jnum_deref(ref)->value.raw; return context->m_handlers->yajl_number(context, raw.m_str, raw.m_len); }