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;
}
Exemple #2
0
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);
}
Exemple #3
0
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);
}
Exemple #4
0
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);
}