]> git.donarmstrong.com Git - rsem.git/blob - boost/random/detail/vector_io.hpp
0bb261c3ae23f3709a39ad3d2835d0a80ad005b0
[rsem.git] / boost / random / detail / vector_io.hpp
1 /* boost random/vector_io.hpp header file
2  *
3  * Copyright Steven Watanabe 2011
4  * Distributed under the Boost Software License, Version 1.0. (See
5  * accompanying file LICENSE_1_0.txt or copy at
6  * http://www.boost.org/LICENSE_1_0.txt)
7  *
8  * See http://www.boost.org for most recent version including documentation.
9  *
10  * $Id: vector_io.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $
11  */
12
13 #ifndef BOOST_RANDOM_DETAIL_VECTOR_IO_HPP
14 #define BOOST_RANDOM_DETAIL_VECTOR_IO_HPP
15
16 #include <vector>
17 #include <iosfwd>
18 #include <istream>
19
20 namespace boost {
21 namespace random {
22 namespace detail {
23
24 template<class CharT, class Traits, class T>
25 void print_vector(std::basic_ostream<CharT, Traits>& os,
26                   const std::vector<T>& vec)
27 {
28     typename std::vector<T>::const_iterator
29         iter = vec.begin(),
30         end =  vec.end();
31     os << os.widen('[');
32     if(iter != end) {
33         os << *iter;
34         ++iter;
35         for(; iter != end; ++iter)
36         {
37             os << os.widen(' ') << *iter;
38         }
39     }
40     os << os.widen(']');
41 }
42
43 template<class CharT, class Traits, class T>
44 void read_vector(std::basic_istream<CharT, Traits>& is, std::vector<T>& vec)
45 {
46     CharT ch;
47     if(!(is >> ch)) {
48         return;
49     }
50     if(ch != is.widen('[')) {
51         is.putback(ch);
52         is.setstate(std::ios_base::failbit);
53         return;
54     }
55     T val;
56     while(is >> std::ws >> val) {
57         vec.push_back(val);
58     }
59     if(is.fail()) {
60         is.clear();
61         if(!(is >> ch)) {
62             return;
63         }
64         if(ch != is.widen(']')) {
65             is.putback(ch);
66             is.setstate(std::ios_base::failbit);
67         }
68     }
69 }
70
71 }
72 }
73 }
74
75 #endif // BOOST_RANDOM_DETAIL_VECTOR_IO_HPP