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.
93 lines
2.6 KiB
93 lines
2.6 KiB
// Boost.Range library |
|
// |
|
// Copyright Neil Groves 2009. |
|
// Use, modification and distribution is subject to 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) |
|
// |
|
// For more information, see http://www.boost.org/libs/range/ |
|
// |
|
#ifndef BOOST_RANGE_ITERATOR_RANGE_IO_HPP_INCLUDED |
|
#define BOOST_RANGE_ITERATOR_RANGE_IO_HPP_INCLUDED |
|
|
|
#include <boost/config.hpp> |
|
#include <boost/detail/workaround.hpp> |
|
|
|
#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500)) |
|
#pragma warning( push ) |
|
#pragma warning( disable : 4996 ) |
|
#endif |
|
|
|
// From boost/dynamic_bitset.hpp; thanks to Matthias Troyer for Cray X1 patch. |
|
#ifndef BOOST_OLD_IOSTREAMS |
|
# if defined(__STL_CONFIG_H) && \ |
|
!defined (__STL_USE_NEW_IOSTREAMS) && !defined(__crayx1) \ |
|
/**/ |
|
# define BOOST_OLD_IOSTREAMS |
|
# endif |
|
#endif // #ifndef BOOST_OLD_IOSTREAMS |
|
|
|
#ifndef _STLP_NO_IOSTREAMS |
|
# ifndef BOOST_OLD_IOSTREAMS |
|
# include <ostream> |
|
# else |
|
# include <ostream.h> |
|
# endif |
|
#endif // _STLP_NO_IOSTREAMS |
|
|
|
#include <boost/range/iterator_range_core.hpp> |
|
#include <iterator> |
|
#include <algorithm> |
|
#include <cstddef> |
|
|
|
namespace boost |
|
{ |
|
|
|
#ifndef _STLP_NO_IOSTREAMS |
|
# ifndef BOOST_OLD_IOSTREAMS |
|
|
|
//! iterator_range output operator |
|
/*! |
|
Output the range to an ostream. Elements are outputed |
|
in a sequence without separators. |
|
*/ |
|
template< typename IteratorT, typename Elem, typename Traits > |
|
inline std::basic_ostream<Elem,Traits>& operator<<( |
|
std::basic_ostream<Elem, Traits>& Os, |
|
const iterator_range<IteratorT>& r ) |
|
{ |
|
std::copy( r.begin(), r.end(), |
|
std::ostream_iterator< BOOST_DEDUCED_TYPENAME |
|
iterator_value<IteratorT>::type, |
|
Elem, Traits>(Os) ); |
|
return Os; |
|
} |
|
|
|
# else |
|
|
|
//! iterator_range output operator |
|
/*! |
|
Output the range to an ostream. Elements are outputed |
|
in a sequence without separators. |
|
*/ |
|
template< typename IteratorT > |
|
inline std::ostream& operator<<( |
|
std::ostream& Os, |
|
const iterator_range<IteratorT>& r ) |
|
{ |
|
std::copy( r.begin(), r.end(), std::ostream_iterator<char>(Os)); |
|
return Os; |
|
} |
|
|
|
# endif |
|
#endif // _STLP_NO_IOSTREAMS |
|
|
|
} // namespace boost |
|
|
|
#undef BOOST_OLD_IOSTREAMS |
|
|
|
#if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500)) |
|
#pragma warning(pop) |
|
#endif |
|
|
|
#endif // include guard
|
|
|