static char* print_value(cjson* item, int depth, int fmt) { char* out; switch (item->type) { case JSON_NULL: out = print_null(); break; case JSON_TRUE: out = print_true(); break; case JSON_FALSE: out = print_false(); break; case JSON_STRING: out = print_string(item->valuestring); break; case JSON_NUMBER: out = print_number(item); break; case JSON_ARRAY: out = print_array(item, depth, fmt); break; case JSON_OBJECT: out = print_object(item, depth, fmt); break; } return out; }
void Print( const Value* value, std::ostream& result ) { // TODO: switch on typeid? if( !value ) { return; } const IntegerValue* integervalue = dynamic_cast<const IntegerValue*>( value ); if( integervalue ) { print_integer( integervalue, result ); return; } const DecimalValue* decimalvalue = dynamic_cast<const DecimalValue*>( value ); if( decimalvalue ) { print_decimal( decimalvalue, result ); return; } const StringValue* stringvalue = dynamic_cast<const StringValue*>( value ); if( stringvalue ) { print_string( stringvalue, result ); return; } const TrueValue* truevalue = dynamic_cast<const TrueValue*>( value ); if( truevalue ) { print_true( truevalue, result ); return; } const FalseValue* falsevalue = dynamic_cast<const FalseValue*>( value ); if( falsevalue ) { print_false( falsevalue, result ); return; } const NilValue* nilvalue = dynamic_cast<const NilValue*>( value ); if( nilvalue ) { print_nil( nilvalue, result ); return; } const CombinationValue* combovalue = dynamic_cast< const CombinationValue*>( value ); if( combovalue ) { print_combination( combovalue, result ); return; } const SymbolValue* symbolvalue = dynamic_cast< const SymbolValue*>( value ); if( symbolvalue ) { print_symbol( symbolvalue, result ); return; } const NativeFunctionValue* fnvalue = dynamic_cast< const NativeFunctionValue*>( value ); if( fnvalue ) { print_built_in_procedure( fnvalue, result ); return; } const CompoundProcedureValue* procvalue = dynamic_cast< const CompoundProcedureValue*>( value ); if( procvalue ) { print_compound_procedure( procvalue, result ); return; } const PairValue* pairvalue = dynamic_cast< const PairValue*>( value ); if( pairvalue ) { print_pair( pairvalue, result ); return; } result << "<<UNPRINTABLE TYPE " << typeid(value).name() << ">>"; }