]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/locale/boundary/facets.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / boost / locale / boundary / facets.hpp
1 //
2 // Copyright (c) 2009-2011 Artyom Beilis (Tonkikh)
3 //
4 // Distributed under the Boost Software License, Version 1.0. (See
5 // accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt)
7 //
8 #ifndef BOOST_LOCALE_BOUNDARY_FACETS_HPP_INCLUDED
9 #define BOOST_LOCALE_BOUNDARY_FACETS_HPP_INCLUDED
10
11 #include <boost/locale/config.hpp>
12 #include <boost/locale/boundary/types.hpp>
13 #ifdef BOOST_MSVC
14 # pragma warning(push)
15 # pragma warning(disable : 4275 4251 4231 4660)
16 #endif
17 #include <locale>
18 #include <vector>
19
20
21
22
23 namespace boost {
24
25 namespace locale {
26
27 ///
28 /// \brief This namespae contains all operations required for boundary analysis of text
29 ///
30 namespace boundary {
31 ///
32 /// \addtogroup boundary
33 ///
34 /// @{
35 ///
36
37
38 ///
39 /// \brief This structure is used for representing boundary point
40 /// that follows the offset.
41 ///
42 struct break_info {
43
44 ///
45 /// Create empty break point at beginning
46 ///
47 break_info() :
48 offset(0),
49 rule(0)
50 {
51 }
52 ///
53 /// Create empty break point at offset v.
54 /// it is useful for order comparison with other points.
55 ///
56 break_info(size_t v) :
57 offset(v),
58 rule(0)
59 {
60 }
61
62 ///
63 /// Offset from the beggining of the text where a break occurs.
64 ///
65 size_t offset;
66 ///
67 /// The identification of this break point according to
68 /// various break types
69 ///
70 rule_type rule;
71
72 ///
73 /// Compare two break points' offset. Allows to search with
74 /// standard algorithms over the index.
75 ///
76 bool operator<(break_info const &other) const
77 {
78 return offset < other.offset;
79 }
80 };
81
82 ///
83 /// This type holds the analysis of the text - all its break points
84 /// with marks
85 ///
86 typedef std::vector<break_info> index_type;
87
88
89 template<typename CharType>
90 class boundary_indexing;
91
92 #ifdef BOOST_LOCALE_DOXYGEN
93 ///
94 /// \brief This facet generates an index for boundary analysis
95 /// for a given text.
96 ///
97 /// It is specialized for 4 types of characters \c char_t, \c wchar_t, \c char16_t and \c char32_t
98 ///
99 template<typename Char>
100 class BOOST_LOCALE_DECL boundary_indexing : public std::locale::facet {
101 public:
102 ///
103 /// Default constructor typical for facets
104 ///
105 boundary_indexing(size_t refs=0) : std::locale::facet(refs)
106 {
107 }
108 ///
109 /// Create index for boundary type \a t for text in range [begin,end)
110 ///
111 /// The returned value is an index of type \ref index_type. Note that this
112 /// index is never empty, even if the range [begin,end) is empty it consists
113 /// of at least one boundary point with the offset 0.
114 ///
115 virtual index_type map(boundary_type t,Char const *begin,Char const *end) const = 0;
116 ///
117 /// Identification of this facet
118 ///
119 static std::locale::id id;
120
121 #if defined (__SUNPRO_CC) && defined (_RWSTD_VER)
122 std::locale::id& __get_id (void) const { return id; }
123 #endif
124 };
125
126 #else
127
128 template<>
129 class BOOST_LOCALE_DECL boundary_indexing<char> : public std::locale::facet {
130 public:
131 boundary_indexing(size_t refs=0) : std::locale::facet(refs)
132 {
133 }
134 virtual index_type map(boundary_type t,char const *begin,char const *end) const = 0;
135 static std::locale::id id;
136 #if defined (__SUNPRO_CC) && defined (_RWSTD_VER)
137 std::locale::id& __get_id (void) const { return id; }
138 #endif
139 };
140
141 template<>
142 class BOOST_LOCALE_DECL boundary_indexing<wchar_t> : public std::locale::facet {
143 public:
144 boundary_indexing(size_t refs=0) : std::locale::facet(refs)
145 {
146 }
147 virtual index_type map(boundary_type t,wchar_t const *begin,wchar_t const *end) const = 0;
148
149 static std::locale::id id;
150 #if defined (__SUNPRO_CC) && defined (_RWSTD_VER)
151 std::locale::id& __get_id (void) const { return id; }
152 #endif
153 };
154
155 #ifdef BOOST_LOCALE_ENABLE_CHAR16_T
156 template<>
157 class BOOST_LOCALE_DECL boundary_indexing<char16_t> : public std::locale::facet {
158 public:
159 boundary_indexing(size_t refs=0) : std::locale::facet(refs)
160 {
161 }
162 virtual index_type map(boundary_type t,char16_t const *begin,char16_t const *end) const = 0;
163 static std::locale::id id;
164 #if defined (__SUNPRO_CC) && defined (_RWSTD_VER)
165 std::locale::id& __get_id (void) const { return id; }
166 #endif
167 };
168 #endif
169
170 #ifdef BOOST_LOCALE_ENABLE_CHAR32_T
171 template<>
172 class BOOST_LOCALE_DECL boundary_indexing<char32_t> : public std::locale::facet {
173 public:
174 boundary_indexing(size_t refs=0) : std::locale::facet(refs)
175 {
176 }
177 virtual index_type map(boundary_type t,char32_t const *begin,char32_t const *end) const = 0;
178 static std::locale::id id;
179 #if defined (__SUNPRO_CC) && defined (_RWSTD_VER)
180 std::locale::id& __get_id (void) const { return id; }
181 #endif
182 };
183 #endif
184
185 #endif
186
187 ///
188 /// @}
189 ///
190
191
192 } // boundary
193
194 } // locale
195 } // boost
196
197
198 #ifdef BOOST_MSVC
199 #pragma warning(pop)
200 #endif
201
202 #endif
203 // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4