merged from trunk

[SVN r47983]
This commit is contained in:
Eric Niebler
2008-08-05 05:39:57 +00:00
parent 630a84aae0
commit 893b0fa60b
15 changed files with 123 additions and 106 deletions
+6 -1
View File
@@ -25,7 +25,9 @@
#include <boost/detail/workaround.hpp>
#include <cstring>
#ifndef BOOST_NO_CWCHAR
#include <cwchar>
#endif
namespace boost
{
@@ -36,10 +38,12 @@ namespace boost
return strlen( s );
}
#ifndef BOOST_NO_INTRINSIC_WCHAR_T
inline std::size_t length( const wchar_t* s )
{
return wcslen( s );
}
#endif
//
// Remark: the compiler cannot choose between T* and T[sz]
@@ -57,7 +61,7 @@ namespace boost
return true;
}
#ifndef BOOST_NO_INTRINSIC_WCHAR_T
inline bool is_char_ptr( wchar_t* )
{
return true;
@@ -67,6 +71,7 @@ namespace boost
{
return true;
}
#endif
template< class T >
inline long is_char_ptr( T /* r */ )
+4 -4
View File
@@ -73,15 +73,15 @@ namespace range_detail
// May this be discarded? Or is it needed for bad compilers?
//
template< typename T, std::size_t sz >
inline const T* range_begin( const T (&array)[sz] )
inline const T* range_begin( const T (&a)[sz] )
{
return array;
return a;
}
template< typename T, std::size_t sz >
inline T* range_begin( T (&array)[sz] )
inline T* range_begin( T (&a)[sz] )
{
return array;
return a;
}
+4 -4
View File
@@ -71,15 +71,15 @@ namespace range_detail
//////////////////////////////////////////////////////////////////////
template< typename T, std::size_t sz >
inline const T* range_end( const T (&array)[sz] )
inline const T* range_end( const T (&a)[sz] )
{
return range_detail::array_end<T,sz>( array );
return range_detail::array_end<T,sz>( a );
}
template< typename T, std::size_t sz >
inline T* range_end( T (&array)[sz] )
inline T* range_end( T (&a)[sz] )
{
return range_detail::array_end<T,sz>( array );
return range_detail::array_end<T,sz>( a );
}
#if !BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) && \
+7 -5
View File
@@ -185,7 +185,7 @@ namespace boost
m_Begin(Begin), m_End(End)
#ifndef NDEBUG
, singular(false)
#endif
#endif
{}
//! Constructor from a Range
@@ -210,7 +210,7 @@ namespace boost
template< class Range >
iterator_range( const Range& r, iterator_range_detail::const_range_tag ) :
m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) )
#ifndef NDEBUG
#ifndef NDEBUG
, singular(false)
#endif
{}
@@ -219,7 +219,7 @@ namespace boost
template< class Range >
iterator_range( Range& r, iterator_range_detail::range_tag ) :
m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) )
#ifndef NDEBUG
#ifndef NDEBUG
, singular(false)
#endif
{}
@@ -390,13 +390,15 @@ namespace boost
bool singular;
#endif
#ifndef NDEBUG
public:
bool is_singular() const
{
#ifndef NDEBUG
return singular;
#else
return false;
#endif
}
#endif
protected:
//
+11 -3
View File
@@ -23,6 +23,8 @@
#include <boost/range/size_type.hpp>
#include <boost/range/difference_type.hpp>
#include <boost/assert.hpp>
#include <boost/type_traits/is_reference.hpp>
#include <boost/type_traits/remove_reference.hpp>
namespace boost
{
@@ -41,6 +43,12 @@ namespace boost
typedef BOOST_DEDUCED_TYPENAME range_difference<ForwardRange>::type difference_type;
typedef BOOST_DEDUCED_TYPENAME range_size<ForwardRange>::type size_type;
typedef BOOST_DEDUCED_TYPENAME base::reference reference;
public: // for return value of front/back
typedef BOOST_DEDUCED_TYPENAME
boost::mpl::if_< boost::is_reference<reference>,
const BOOST_DEDUCED_TYPENAME boost::remove_reference<reference>::type&,
reference >::type const_reference;
public:
sub_range() : base()
@@ -112,7 +120,7 @@ namespace boost
return base::front();
}
const value_type& front() const
const_reference front() const
{
return base::front();
}
@@ -122,7 +130,7 @@ namespace boost
return base::back();
}
const value_type& back() const
const_reference back() const
{
return base::back();
}
@@ -132,7 +140,7 @@ namespace boost
return base::operator[](sz);
}
const value_type& operator[]( difference_type sz ) const
const_reference operator[]( difference_type sz ) const
{
return base::operator[](sz);
}