1 | // Boost string_algo library sequence_traits.hpp header file ---------------------------// |
2 | |
3 | // Copyright Pavol Droba 2002-2003. |
4 | // |
5 | // Distributed under the Boost Software License, Version 1.0. |
6 | // (See accompanying file LICENSE_1_0.txt or copy at |
7 | // http://www.boost.org/LICENSE_1_0.txt) |
8 | |
9 | // See http://www.boost.org/ for updates, documentation, and revision history. |
10 | |
11 | #ifndef BOOST_STRING_SEQUENCE_TRAITS_HPP |
12 | #define BOOST_STRING_SEQUENCE_TRAITS_HPP |
13 | |
14 | #include <boost/config.hpp> |
15 | #include <boost/mpl/bool.hpp> |
16 | #include <boost/algorithm/string/yes_no_type.hpp> |
17 | |
18 | /*! \file |
19 | Traits defined in this header are used by various algorithms to achieve |
20 | better performance for specific containers. |
21 | Traits provide fail-safe defaults. If a container supports some of these |
22 | features, it is possible to specialize the specific trait for this container. |
23 | For lacking compilers, it is possible of define an override for a specific tester |
24 | function. |
25 | |
26 | Due to a language restriction, it is not currently possible to define specializations for |
27 | stl containers without including the corresponding header. To decrease the overhead |
28 | needed by this inclusion, user can selectively include a specialization |
29 | header for a specific container. They are located in boost/algorithm/string/stl |
30 | directory. Alternatively she can include boost/algorithm/string/std_collection_traits.hpp |
31 | header which contains specializations for all stl containers. |
32 | */ |
33 | |
34 | namespace boost { |
35 | namespace algorithm { |
36 | |
37 | // sequence traits -----------------------------------------------// |
38 | |
39 | |
40 | //! Native replace trait |
41 | /*! |
42 | This trait specifies that the sequence has \c std::string like replace method |
43 | */ |
44 | template< typename T > |
45 | class has_native_replace |
46 | { |
47 | |
48 | public: |
49 | # if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) |
50 | enum { value = false }; |
51 | # else |
52 | BOOST_STATIC_CONSTANT(bool, value=false); |
53 | # endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 ) |
54 | |
55 | |
56 | typedef mpl::bool_<has_native_replace<T>::value> type; |
57 | }; |
58 | |
59 | |
60 | //! Stable iterators trait |
61 | /*! |
62 | This trait specifies that the sequence has stable iterators. It means |
63 | that operations like insert/erase/replace do not invalidate iterators. |
64 | */ |
65 | template< typename T > |
66 | class has_stable_iterators |
67 | { |
68 | public: |
69 | # if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) |
70 | enum { value = false }; |
71 | # else |
72 | BOOST_STATIC_CONSTANT(bool, value=false); |
73 | # endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 ) |
74 | |
75 | typedef mpl::bool_<has_stable_iterators<T>::value> type; |
76 | }; |
77 | |
78 | |
79 | //! Const time insert trait |
80 | /*! |
81 | This trait specifies that the sequence's insert method has |
82 | constant time complexity. |
83 | */ |
84 | template< typename T > |
85 | class has_const_time_insert |
86 | { |
87 | public: |
88 | # if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) |
89 | enum { value = false }; |
90 | # else |
91 | BOOST_STATIC_CONSTANT(bool, value=false); |
92 | # endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 ) |
93 | |
94 | typedef mpl::bool_<has_const_time_insert<T>::value> type; |
95 | }; |
96 | |
97 | |
98 | //! Const time erase trait |
99 | /*! |
100 | This trait specifies that the sequence's erase method has |
101 | constant time complexity. |
102 | */ |
103 | template< typename T > |
104 | class has_const_time_erase |
105 | { |
106 | public: |
107 | # if BOOST_WORKAROUND( __IBMCPP__, <= 600 ) |
108 | enum { value = false }; |
109 | # else |
110 | BOOST_STATIC_CONSTANT(bool, value=false); |
111 | # endif // BOOST_WORKAROUND( __IBMCPP__, <= 600 ) |
112 | |
113 | typedef mpl::bool_<has_const_time_erase<T>::value> type; |
114 | }; |
115 | |
116 | } // namespace algorithm |
117 | } // namespace boost |
118 | |
119 | |
120 | #endif // BOOST_STRING_SEQUENCE_TRAITS_HPP |
121 | |