You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
75 lines
1.7 KiB
75 lines
1.7 KiB
/* boost random/vector_io.hpp header file |
|
* |
|
* Copyright Steven Watanabe 2011 |
|
* Distributed under the Boost Software License, Version 1.0. (See |
|
* accompanying file LICENSE_1_0.txt or copy at |
|
* http://www.boost.org/LICENSE_1_0.txt) |
|
* |
|
* See http://www.boost.org for most recent version including documentation. |
|
* |
|
* $Id: vector_io.hpp 71018 2011-04-05 21:27:52Z steven_watanabe $ |
|
*/ |
|
|
|
#ifndef BOOST_RANDOM_DETAIL_VECTOR_IO_HPP |
|
#define BOOST_RANDOM_DETAIL_VECTOR_IO_HPP |
|
|
|
#include <vector> |
|
#include <iosfwd> |
|
#include <istream> |
|
|
|
namespace boost { |
|
namespace random { |
|
namespace detail { |
|
|
|
template<class CharT, class Traits, class T> |
|
void print_vector(std::basic_ostream<CharT, Traits>& os, |
|
const std::vector<T>& vec) |
|
{ |
|
typename std::vector<T>::const_iterator |
|
iter = vec.begin(), |
|
end = vec.end(); |
|
os << os.widen('['); |
|
if(iter != end) { |
|
os << *iter; |
|
++iter; |
|
for(; iter != end; ++iter) |
|
{ |
|
os << os.widen(' ') << *iter; |
|
} |
|
} |
|
os << os.widen(']'); |
|
} |
|
|
|
template<class CharT, class Traits, class T> |
|
void read_vector(std::basic_istream<CharT, Traits>& is, std::vector<T>& vec) |
|
{ |
|
CharT ch; |
|
if(!(is >> ch)) { |
|
return; |
|
} |
|
if(ch != is.widen('[')) { |
|
is.putback(ch); |
|
is.setstate(std::ios_base::failbit); |
|
return; |
|
} |
|
T val; |
|
while(is >> std::ws >> val) { |
|
vec.push_back(val); |
|
} |
|
if(is.fail()) { |
|
is.clear(); |
|
if(!(is >> ch)) { |
|
return; |
|
} |
|
if(ch != is.widen(']')) { |
|
is.putback(ch); |
|
is.setstate(std::ios_base::failbit); |
|
} |
|
} |
|
} |
|
|
|
} |
|
} |
|
} |
|
|
|
#endif // BOOST_RANDOM_DETAIL_VECTOR_IO_HPP
|
|
|