76 lines
1.7 KiB
Plaintext
76 lines
1.7 KiB
Plaintext
/* 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$
|
|
*/
|
|
|
|
#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
|