File tree Expand file tree Collapse file tree 3 files changed +74
-78
lines changed
Expand file tree Collapse file tree 3 files changed +74
-78
lines changed Original file line number Diff line number Diff line change 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
1715namespace 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
Load Diff This file was deleted.
Original file line number Diff line number Diff line change 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
You can’t perform that action at this time.
0 commit comments