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
							 |