#include <cstddef>
#include <string>
+#include <utility>
+#include <iterator>
#include <boost/type_traits/is_array.hpp>
#include <boost/type_traits/is_pointer.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/mpl/identity.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/mpl/fold.hpp>
-#include <boost/detail/iterator.hpp>
// Container traits implementation ---------------------------------------------------------
/*
Wraps std::container compliant containers
*/
- template< typename ContainerT >
+ template< typename ContainerT >
struct default_container_traits
{
typedef typename ContainerT::value_type value_type;
>::type result_iterator;
typedef typename ContainerT::difference_type difference_type;
typedef typename ContainerT::size_type size_type;
-
+
// static operations
template< typename C >
static size_type size( const C& c )
return c.empty();
}
-#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
-
template< typename C >
static iterator begin( C& c )
{
return c.end();
}
-#else // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
-
- template< typename C >
- static result_iterator begin( C& c )
- {
- return c.begin();
- }
-
- template< typename C >
- static result_iterator end( C& c )
- {
- return c.end();
- }
-
-#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
-
};
template<typename T>
{
typedef typename PairT::first_type element_type;
- typedef typename ::boost::detail::
- iterator_traits<element_type>::value_type value_type;
+ typedef typename
+ std::iterator_traits<element_type>::value_type value_type;
typedef std::size_t size_type;
- typedef typename ::boost::detail::
- iterator_traits<element_type>::difference_type difference_type;
+ typedef typename
+ std::iterator_traits<element_type>::difference_type difference_type;
typedef element_type iterator;
typedef element_type const_iterator;
BOOST_STATIC_CONSTANT( size_type, array_size = sz );
};
-
+
// array length resolving
/*
Lenght of string contained in a static array could
else
return std::char_traits<char>::length(a);
}
-
+
template< typename A >
static bool empty( const A& a )
{
const_iterator,
iterator
>::type result_iterator;
-
+
private:
// resolve array size
typedef typename
{
return array_length_type::empty(a);
}
-
-#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
template< typename A >
static iterator begin( A& a )
return a+array_length_type::length(a);
}
-#else // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
-
- template< typename A >
- static result_iterator begin( A& a )
- {
- return a;
- }
-
- template< typename A >
- static result_iterator end( A& a )
- {
- return a+array_length_type::length(a);
- }
-
-#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
-
};
template<typename T>
return p==0 || p[0]==0;
}
-#ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
-
template< typename P >
static iterator begin( P& p )
{
return p+char_traits::length(p);
}
-#else // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
-
- template< typename P >
- static result_iterator begin( P& p )
- {
- return p;
- }
-
- template< typename P >
- static result_iterator end( P& p )
- {
- if ( p==0 )
- return p;
- else
- return p+char_traits::length(p);
- }
-
-#endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
};
template<typename T>