123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- // Boost string_algo library sequence_traits.hpp header file ---------------------------//
- // Copyright Pavol Droba 2002-2003.
- //
- // 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 updates, documentation, and revision history.
- #ifndef BOOST_STRING_SEQUENCE_TRAITS_HPP
- #define BOOST_STRING_SEQUENCE_TRAITS_HPP
- #include <boost/config.hpp>
- #include <boost/mpl/bool.hpp>
- #include <boost/algorithm/string/yes_no_type.hpp>
- /*! \file
- Traits defined in this header are used by various algorithms to achieve
- better performance for specific containers.
- Traits provide fail-safe defaults. If a container supports some of these
- features, it is possible to specialize the specific trait for this container.
- For lacking compilers, it is possible of define an override for a specific tester
- function.
- Due to a language restriction, it is not currently possible to define specializations for
- stl containers without including the corresponding header. To decrease the overhead
- needed by this inclusion, user can selectively include a specialization
- header for a specific container. They are located in boost/algorithm/string/stl
- directory. Alternatively she can include boost/algorithm/string/std_collection_traits.hpp
- header which contains specializations for all stl containers.
- */
- namespace boost {
- namespace algorithm {
- // sequence traits -----------------------------------------------//
- //! Native replace trait
- /*!
- This trait specifies that the sequence has \c std::string like replace method
- */
- template< typename T >
- class has_native_replace
- {
- public:
- # if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
- enum { value = false };
- # else
- BOOST_STATIC_CONSTANT(bool, value=false);
- # endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
- typedef mpl::bool_<has_native_replace<T>::value> type;
- };
- //! Stable iterators trait
- /*!
- This trait specifies that the sequence has stable iterators. It means
- that operations like insert/erase/replace do not invalidate iterators.
- */
- template< typename T >
- class has_stable_iterators
- {
- public:
- # if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
- enum { value = false };
- # else
- BOOST_STATIC_CONSTANT(bool, value=false);
- # endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
- typedef mpl::bool_<has_stable_iterators<T>::value> type;
- };
- //! Const time insert trait
- /*!
- This trait specifies that the sequence's insert method has
- constant time complexity.
- */
- template< typename T >
- class has_const_time_insert
- {
- public:
- # if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
- enum { value = false };
- # else
- BOOST_STATIC_CONSTANT(bool, value=false);
- # endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
- typedef mpl::bool_<has_const_time_insert<T>::value> type;
- };
- //! Const time erase trait
- /*!
- This trait specifies that the sequence's erase method has
- constant time complexity.
- */
- template< typename T >
- class has_const_time_erase
- {
- public:
- # if BOOST_WORKAROUND( __IBMCPP__, <= 600 )
- enum { value = false };
- # else
- BOOST_STATIC_CONSTANT(bool, value=false);
- # endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 )
- typedef mpl::bool_<has_const_time_erase<T>::value> type;
- };
- } // namespace algorithm
- } // namespace boost
- #endif // BOOST_STRING_SEQUENCE_TRAITS_HPP
|