corto_string corto_value_str(corto_value* v, corto_uint32 maxLength) { corto_string_ser_t serData; corto_walk_opt s; serData.buffer = CORTO_BUFFER_INIT; serData.buffer.max = maxLength; serData.compactNotation = TRUE; serData.prefixType = FALSE; serData.enableColors = FALSE; s = corto_string_ser(CORTO_LOCAL, CORTO_NOT, CORTO_WALK_TRACE_NEVER); corto_walk_value(&s, v, &serData); corto_string result = corto_buffer_str(&serData.buffer); corto_walk_deinit(&s, &serData); return result; }
static corto_int16 corto_ser_any(corto_walk_opt* s, corto_value *info, void *userData) { corto_any *this = corto_value_ptrof(info); corto_compare_ser_t *data = userData, privateData; corto_any *value = (void*)((corto_word)corto_value_ptrof(&data->value) + ((corto_word)this - (corto_word)data->base)); corto_value v = corto_value_value(this->value, this->type); privateData.value = corto_value_value(value->value, value->type); /* Set base of privateData. Because we're reusing the serializer, the * construct callback won't be called again */ privateData.base = this->value; corto_walk_value(s, &v, &privateData); data->result = privateData.result; return data->result != CORTO_EQ; }
static void* corto_fmt_str_fromValue( corto_fmt_opt *opt, corto_value *v) { corto_string_ser_t serData; corto_walk_opt s = corto_string_ser( CORTO_LOCAL|CORTO_READONLY|CORTO_PRIVATE, CORTO_NOT, CORTO_WALK_TRACE_NEVER); serData.buffer = UT_STRBUF_INIT; serData.buffer.max = 0; serData.compactNotation = TRUE; serData.prefixType = FALSE; serData.enableColors = FALSE; corto_walk_value(&s, v, &serData); corto_string result = ut_strbuf_get(&serData.buffer); corto_walk_deinit(&s, &serData); return result; }