Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r61345 - in trunk: boost/range libs/range/test
From: neil_at_[hidden]
Date: 2010-04-17 17:02:30


Author: neilgroves
Date: 2010-04-17 17:02:28 EDT (Sat, 17 Apr 2010)
New Revision: 61345
URL: http://svn.boost.org/trac/boost/changeset/61345

Log:
Boost.Range corrected istream_range implementation. Added the missing istream_range unit test. Removed the untested and undocumented unbounded_range for this release.
Added:
   trunk/libs/range/test/istream_range.cpp (contents, props changed)
Removed:
   trunk/boost/range/unbounded_range.hpp
Text files modified:
   trunk/boost/range/istream_range.hpp | 23 ++++++++++++++---------
   trunk/libs/range/test/Jamfile.v2 | 1 +
   2 files changed, 15 insertions(+), 9 deletions(-)

Modified: trunk/boost/range/istream_range.hpp
==============================================================================
--- trunk/boost/range/istream_range.hpp (original)
+++ trunk/boost/range/istream_range.hpp 2010-04-17 17:02:28 EDT (Sat, 17 Apr 2010)
@@ -16,19 +16,24 @@
  */
 
 #include <iterator>
+#include <istream>
 #include <boost/config.hpp>
-#include <boost/range/range.hpp>
+#include <boost/range/iterator_range.hpp>
 
 namespace boost
 {
- template<class Type, class Elem, class Traits> inline
- range<std::istream_iterator<Type, Elem, Traits> >
- istream_range(std::basic_istream<Elem, Traits>& in)
- {
- return range<std::istream_iterator<Type, Elem, Traits> >(
- std::istream_iterator<Type>(in),
- std::istream_iterator<Type>());
- }
+ namespace range
+ {
+ template<class Type, class Elem, class Traits> inline
+ iterator_range<std::istream_iterator<Type, Elem, Traits> >
+ istream_range(std::basic_istream<Elem, Traits>& in)
+ {
+ return iterator_range<std::istream_iterator<Type, Elem, Traits> >(
+ std::istream_iterator<Type>(in),
+ std::istream_iterator<Type>());
+ }
+ } // namespace range
+ using range::istream_range;
 } // namespace boost
 
 #endif // include guard

Deleted: trunk/boost/range/unbounded_range.hpp
==============================================================================
--- trunk/boost/range/unbounded_range.hpp 2010-04-17 17:02:28 EDT (Sat, 17 Apr 2010)
+++ (empty file)
@@ -1,73 +0,0 @@
-#ifndef BOOST_RANGE_UNBOUNDED_RANGE_HPP
-#define BOOST_RANGE_UNBOUNDED_RANGE_HPP
-
-#include <boost/range/iterator_range.hpp>
-#include <boost/config.hpp>
-
-namespace boost
-{
- template< class Iter >
- struct unbounded_iterator_range : iterator_range<Iter>
- {
- explicit unbounded_iterator_range( Iter r )
- : iterator_range<Iter>( r, r )
- {
- //
- // Remark: by storing the same iterator
- // twice, we can still allow
- // comparison to execute without leading to
- // operations on singular iterators
- //
- }
-
- private:
-
- bool empty() const
- {
- return false;
- }
- //
- // Hide members that are illegal to use.
- //
- /*
- void end() const;
- void size() const;
- void empty() const;
- void equal() const;
- operator bool() const;
- bool operator==( unbounded_iterator_range );
- bool operator!=( unbounded_iterator_range );
- template< class S >
- void operator[]( S s ) const;
- template< class D >
- void advance_end( D d ) const;
- void back() const;
- */
- };
-
- template< class Iter >
- inline unbounded_iterator_range<Iter> unbounded_range( Iter r )
- {
- return unbounded_iterator_range<Iter>(r);
- }
-
- namespace detail
- {
- char is_unbounded_range( ... );
- template< class Iter >
- long is_unbounded_range( const unbounded_iterator_range<Iter>* );
- }
-
- template< class T >
- struct is_unbounded_range
- {
- private:
- static T* ptr_;
-
- public:
- BOOST_STATIC_CONSTANT( bool,
- value = sizeof(long) == sizeof(detail::is_unbounded_range(ptr_) ) );
- };
-}
-
-#endif

Modified: trunk/libs/range/test/Jamfile.v2
==============================================================================
--- trunk/libs/range/test/Jamfile.v2 (original)
+++ trunk/libs/range/test/Jamfile.v2 2010-04-17 17:02:28 EDT (Sat, 17 Apr 2010)
@@ -128,6 +128,7 @@
         [ range-test counting_range ]
         [ range-test extension_mechanism ]
         [ range-test irange ]
+ [ range-test istream_range ]
         [ range-test iterator_pair ]
         [ range-test iterator_range ]
 # [ range-test mfc : <include>$(VC71_ROOT)/atlmfc/include ]

Added: trunk/libs/range/test/istream_range.cpp
==============================================================================
--- (empty file)
+++ trunk/libs/range/test/istream_range.cpp 2010-04-17 17:02:28 EDT (Sat, 17 Apr 2010)
@@ -0,0 +1,51 @@
+// Boost.Range library
+//
+// Copyright Neil Groves 2010. 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/
+//
+#include <boost/range/istream_range.hpp>
+#include <boost/range/algorithm_ext.hpp>
+#include <boost/range/begin.hpp>
+#include <boost/range/end.hpp>
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test.hpp>
+#include <sstream>
+#include <vector>
+
+namespace
+{
+ // Test an integer range with a step size of 1.
+ void test_istream_range()
+ {
+ std::stringstream s;
+ std::vector<int> reference;
+ for (int i = 0; i < 10; ++i)
+ {
+ reference.push_back(i);
+ s << i << " ";
+ }
+
+ std::vector<int> target;
+ boost::push_back(target, boost::range::istream_range<int>(s));
+
+ BOOST_CHECK_EQUAL_COLLECTIONS( reference.begin(), reference.end(),
+ target.begin(), target.end() );
+ }
+
+} // namespace anonymous namespace
+
+boost::unit_test::test_suite*
+init_unit_test_suite(int argc, char* argv[])
+{
+ boost::unit_test::test_suite* test
+ = BOOST_TEST_SUITE( "RangeTestSuite.istream_range" );
+
+ test->add(BOOST_TEST_CASE( &test_istream_range ));
+
+ return test;
+}


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk