Skip to content

Commit 1f4fbda

Browse files
committed
Rename json::internal::write to json::traverse
1 parent fc84a80 commit 1f4fbda

File tree

3 files changed

+74
-78
lines changed

3 files changed

+74
-78
lines changed

include/tao/json/internal/to_stream.hh

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,11 @@
66

77
#include <ostream>
88

9-
#include "../external/double.hh"
109
#include "../value.hh"
10+
#include "../traverse.hh"
1111

12-
#include "escape.hh"
1312
#include "value_writer.hh"
1413
#include "pretty_writer.hh"
15-
#include "write.hh"
1614

1715
namespace tao
1816
{
@@ -24,14 +22,14 @@ namespace tao
2422
void to_stream( std::ostream & o, const basic_value< Traits > & v )
2523
{
2624
internal::value_writer writer( o );
27-
internal::write( v, writer );
25+
json::traverse( v, writer );
2826
}
2927

3028
template< template< typename ... > class Traits >
3129
void to_stream( std::ostream & o, const basic_value< Traits > & v, const unsigned indent )
3230
{
3331
internal::pretty_writer writer( o, indent );
34-
internal::write( v, writer );
32+
json::traverse( v, writer );
3533
}
3634

3735
} // internal

include/tao/json/internal/write.hh

Lines changed: 0 additions & 73 deletions
This file was deleted.

include/tao/json/traverse.hh

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
// Copyright (c) 2016 Dr. Colin Hirsch and Daniel Frey
2+
// Please see LICENSE for license or visit https://github.com/taocpp/json/
3+
4+
#ifndef TAOCPP_JSON_INCLUDE_TRAVERSE_HH
5+
#define TAOCPP_JSON_INCLUDE_TRAVERSE_HH
6+
7+
#include <stdexcept>
8+
9+
#include "value.hh"
10+
11+
namespace tao
12+
{
13+
namespace json
14+
{
15+
template< template< typename ... > class Traits, typename Handler >
16+
void traverse( const basic_value< Traits > & v, Handler & handler )
17+
{
18+
switch( v.type() ) {
19+
case type::NULL_:
20+
handler.null();
21+
break;
22+
case type::BOOL:
23+
handler.boolean( v.unsafe_get_bool() );
24+
break;
25+
case type::SIGNED:
26+
handler.number( v.unsafe_get_signed() );
27+
break;
28+
case type::UNSIGNED:
29+
handler.number( v.unsafe_get_unsigned() );
30+
break;
31+
case type::DOUBLE:
32+
handler.number( v.unsafe_get_double() );
33+
break;
34+
case type::STRING:
35+
handler.string( v.unsafe_get_string() );
36+
break;
37+
case type::ARRAY:
38+
handler.begin_array();
39+
for( const auto & e : v.unsafe_get_array() ) {
40+
json::traverse( e, handler );
41+
handler.element();
42+
}
43+
handler.end_array();
44+
break;
45+
case type::OBJECT:
46+
handler.begin_object();
47+
for( const auto & e : v.unsafe_get_object() ) {
48+
handler.key( e.first );
49+
json::traverse( e.second, handler );
50+
handler.value();
51+
}
52+
handler.end_object();
53+
break;
54+
case type::POINTER:
55+
if ( const basic_value< Traits > * p = v.unsafe_get_pointer() ) {
56+
json::traverse( * p, handler );
57+
}
58+
else {
59+
handler.null();
60+
}
61+
break;
62+
default:
63+
throw std::logic_error( "invalid value for tao::json::type" ); // LCOV_EXCL_LINE
64+
}
65+
}
66+
67+
} // json
68+
69+
} // tao
70+
71+
#endif

0 commit comments

Comments
 (0)