Fabcoin Core  0.16.2
P2P Digital Currency
json_spirit_stream_reader.h
Go to the documentation of this file.
1 #ifndef JSON_SPIRIT_READ_STREAM
2 #define JSON_SPIRIT_READ_STREAM
3 
4 // Copyright John W. Wilkinson 2007 - 2009.
5 // Distributed under the MIT License, see accompanying file LICENSE.txt
6 
7 // json spirit version 4.03
8 
9 #if defined(_MSC_VER) && (_MSC_VER >= 1020)
10 # pragma once
11 #endif
12 
14 
15 namespace json_spirit
16 {
17  // these classes allows you to read multiple top level contiguous values from a stream,
18  // the normal stream read functions have a bug that prevent multiple top level values
19  // from being read unless they are separated by spaces
20 
21  template< class Istream_type, class Value_type >
23  {
24  public:
25 
26  Stream_reader( Istream_type& is )
27  : iters_( is )
28  {
29  }
30 
31  bool read_next( Value_type& value )
32  {
33  return read_range( iters_.begin_, iters_.end_, value );
34  }
35 
36  private:
37 
39 
40  Mp_iters iters_;
41  };
42 
43  template< class Istream_type, class Value_type >
45  {
46  public:
47 
48  Stream_reader_thrower( Istream_type& is )
49  : iters_( is )
50  , posn_begin_( iters_.begin_, iters_.end_ )
51  , posn_end_( iters_.end_, iters_.end_ )
52  {
53  }
54 
55  void read_next( Value_type& value )
56  {
57  posn_begin_ = read_range_or_throw( posn_begin_, posn_end_, value );
58  }
59 
60  private:
61 
63  typedef spirit_namespace::position_iterator< typename Mp_iters::Mp_iter > Posn_iter_t;
64 
65  Mp_iters iters_;
66  Posn_iter_t posn_begin_, posn_end_;
67  };
68 }
69 
70 #endif
bool read_next(Value_type &value)
spirit_namespace::position_iterator< typename Mp_iters::Mp_iter > Posn_iter_t
Multi_pass_iters< Istream_type > Mp_iters
Iter_type read_range_or_throw(Iter_type begin, Iter_type end, Value_type &value)
bool read_range(Iter_type &begin, Iter_type end, Value_type &value)
Multi_pass_iters< Istream_type > Mp_iters