]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
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 |