raw
experimental-genesis    1 //  /****************************\
experimental-genesis 2 // * EXPERIMENTAL BRANCH. *
experimental-genesis 3 // * FOR LABORATORY USE ONLY. *
experimental-genesis 4 // ********************************
experimental-genesis 5 // ************
experimental-genesis 6 // **************
experimental-genesis 7 // ****************
experimental-genesis 8 // **** **** ****
experimental-genesis 9 // *** *** ***
experimental-genesis 10 // *** *** ***
experimental-genesis 11 // *** * * **
experimental-genesis 12 // ******** ********
experimental-genesis 13 // ******* ******
experimental-genesis 14 // *** **
experimental-genesis 15 // * ******* **
experimental-genesis 16 // ** * * * * *
experimental-genesis 17 // ** * * ***
experimental-genesis 18 // **** * * * * ****
experimental-genesis 19 // **** *** * * ** ***
experimental-genesis 20 // **** ********* ******
experimental-genesis 21 // ******* ***** *******
experimental-genesis 22 // ********* ****** **
experimental-genesis 23 // ** ****** ******
experimental-genesis 24 // ** ******* **
experimental-genesis 25 // ** ******* ***
experimental-genesis 26 // **** ******** ************
experimental-genesis 27 // ************ ************
experimental-genesis 28 // ******** *******
experimental-genesis 29 // ****** ****
experimental-genesis 30 // *** ***
experimental-genesis 31 // ********************************
experimental-genesis 32 #ifndef JSON_SPIRIT_READ_STREAM
experimental-genesis 33 #define JSON_SPIRIT_READ_STREAM
experimental-genesis 34
experimental-genesis 35 // Copyright John W. Wilkinson 2007 - 2009.
experimental-genesis 36 // Distributed under the MIT License, see accompanying file LICENSE.txt
experimental-genesis 37
experimental-genesis 38 // json spirit version 4.03
experimental-genesis 39
experimental-genesis 40 #if defined(_MSC_VER) && (_MSC_VER >= 1020)
experimental-genesis 41 # pragma once
experimental-genesis 42 #endif
experimental-genesis 43
experimental-genesis 44 #include "json_spirit_reader_template.h"
experimental-genesis 45
experimental-genesis 46 namespace json_spirit
experimental-genesis 47 {
experimental-genesis 48 // these classes allows you to read multiple top level contiguous values from a stream,
experimental-genesis 49 // the normal stream read functions have a bug that prevent multiple top level values
experimental-genesis 50 // from being read unless they are separated by spaces
experimental-genesis 51
experimental-genesis 52 template< class Istream_type, class Value_type >
experimental-genesis 53 class Stream_reader
experimental-genesis 54 {
experimental-genesis 55 public:
experimental-genesis 56
experimental-genesis 57 Stream_reader( Istream_type& is )
experimental-genesis 58 : iters_( is )
experimental-genesis 59 {
experimental-genesis 60 }
experimental-genesis 61
experimental-genesis 62 bool read_next( Value_type& value )
experimental-genesis 63 {
experimental-genesis 64 return read_range( iters_.begin_, iters_.end_, value );
experimental-genesis 65 }
experimental-genesis 66
experimental-genesis 67 private:
experimental-genesis 68
experimental-genesis 69 typedef Multi_pass_iters< Istream_type > Mp_iters;
experimental-genesis 70
experimental-genesis 71 Mp_iters iters_;
experimental-genesis 72 };
experimental-genesis 73
experimental-genesis 74 template< class Istream_type, class Value_type >
experimental-genesis 75 class Stream_reader_thrower
experimental-genesis 76 {
experimental-genesis 77 public:
experimental-genesis 78
experimental-genesis 79 Stream_reader_thrower( Istream_type& is )
experimental-genesis 80 : iters_( is )
experimental-genesis 81 , posn_begin_( iters_.begin_, iters_.end_ )
experimental-genesis 82 , posn_end_( iters_.end_, iters_.end_ )
experimental-genesis 83 {
experimental-genesis 84 }
experimental-genesis 85
experimental-genesis 86 void read_next( Value_type& value )
experimental-genesis 87 {
experimental-genesis 88 posn_begin_ = read_range_or_throw( posn_begin_, posn_end_, value );
experimental-genesis 89 }
experimental-genesis 90
experimental-genesis 91 private:
experimental-genesis 92
experimental-genesis 93 typedef Multi_pass_iters< Istream_type > Mp_iters;
experimental-genesis 94 typedef spirit_namespace::position_iterator< typename Mp_iters::Mp_iter > Posn_iter_t;
experimental-genesis 95
experimental-genesis 96 Mp_iters iters_;
experimental-genesis 97 Posn_iter_t posn_begin_, posn_end_;
experimental-genesis 98 };
experimental-genesis 99 }
experimental-genesis 100
experimental-genesis 101 #endif