]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/spirit/include/boost/spirit/home/classic/utility/impl/chset_operators.ipp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / spirit / include / boost / spirit / home / classic / utility / impl / chset_operators.ipp
CommitLineData
7c673cae
FG
1/*=============================================================================
2 Copyright (c) 2001-2003 Joel de Guzman
3 http://spirit.sourceforge.net/
4
5 Use, modification and distribution is subject to the Boost Software
6 License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
7 http://www.boost.org/LICENSE_1_0.txt)
8=============================================================================*/
9#ifndef BOOST_SPIRIT_CHSET_OPERATORS_IPP
10#define BOOST_SPIRIT_CHSET_OPERATORS_IPP
11
12///////////////////////////////////////////////////////////////////////////////
13#include <boost/limits.hpp>
14
15///////////////////////////////////////////////////////////////////////////////
16namespace boost { namespace spirit {
17
18BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
19
20///////////////////////////////////////////////////////////////////////////////
21//
22// chset free operators implementation
23//
24///////////////////////////////////////////////////////////////////////////////
25template <typename CharT>
26inline chset<CharT>
27operator|(chset<CharT> const& a, chset<CharT> const& b)
28{
29 return chset<CharT>(a) |= b;
30}
31
32//////////////////////////////////
33template <typename CharT>
34inline chset<CharT>
35operator-(chset<CharT> const& a, chset<CharT> const& b)
36{
37 return chset<CharT>(a) -= b;
38}
39
40//////////////////////////////////
41template <typename CharT>
42inline chset<CharT>
43operator~(chset<CharT> const& a)
44{
45 return chset<CharT>(a).inverse();
46}
47
48//////////////////////////////////
49template <typename CharT>
50inline chset<CharT>
51operator&(chset<CharT> const& a, chset<CharT> const& b)
52{
53 return chset<CharT>(a) &= b;
54}
55
56//////////////////////////////////
57template <typename CharT>
58inline chset<CharT>
59operator^(chset<CharT> const& a, chset<CharT> const& b)
60{
61 return chset<CharT>(a) ^= b;
62}
63
64///////////////////////////////////////////////////////////////////////////////
65//
66// range <--> chset free operators implementation
67//
68///////////////////////////////////////////////////////////////////////////////
69template <typename CharT>
70inline chset<CharT>
71operator|(chset<CharT> const& a, range<CharT> const& b)
72{
73 chset<CharT> a_(a);
74 a_.set(b);
75 return a_;
76}
77
78//////////////////////////////////
79template <typename CharT>
80inline chset<CharT>
81operator&(chset<CharT> const& a, range<CharT> const& b)
82{
83 chset<CharT> a_(a);
84 if(b.first != (std::numeric_limits<CharT>::min)()) {
85 a_.clear(range<CharT>((std::numeric_limits<CharT>::min)(), b.first - 1));
86 }
87 if(b.last != (std::numeric_limits<CharT>::max)()) {
88 a_.clear(range<CharT>(b.last + 1, (std::numeric_limits<CharT>::max)()));
89 }
90 return a_;
91}
92
93//////////////////////////////////
94template <typename CharT>
95inline chset<CharT>
96operator-(chset<CharT> const& a, range<CharT> const& b)
97{
98 chset<CharT> a_(a);
99 a_.clear(b);
100 return a_;
101}
102
103//////////////////////////////////
104template <typename CharT>
105inline chset<CharT>
106operator^(chset<CharT> const& a, range<CharT> const& b)
107{
108 return a ^ chset<CharT>(b);
109}
110
111//////////////////////////////////
112template <typename CharT>
113inline chset<CharT>
114operator|(range<CharT> const& a, chset<CharT> const& b)
115{
116 chset<CharT> b_(b);
117 b_.set(a);
118 return b_;
119}
120
121//////////////////////////////////
122template <typename CharT>
123inline chset<CharT>
124operator&(range<CharT> const& a, chset<CharT> const& b)
125{
126 chset<CharT> b_(b);
127 if(a.first != (std::numeric_limits<CharT>::min)()) {
128 b_.clear(range<CharT>((std::numeric_limits<CharT>::min)(), a.first - 1));
129 }
130 if(a.last != (std::numeric_limits<CharT>::max)()) {
131 b_.clear(range<CharT>(a.last + 1, (std::numeric_limits<CharT>::max)()));
132 }
133 return b_;
134}
135
136//////////////////////////////////
137template <typename CharT>
138inline chset<CharT>
139operator-(range<CharT> const& a, chset<CharT> const& b)
140{
141 return chset<CharT>(a) - b;
142}
143
144//////////////////////////////////
145template <typename CharT>
146inline chset<CharT>
147operator^(range<CharT> const& a, chset<CharT> const& b)
148{
149 return chset<CharT>(a) ^ b;
150}
151
152///////////////////////////////////////////////////////////////////////////////
153//
154// literal primitives <--> chset free operators implementation
155//
156///////////////////////////////////////////////////////////////////////////////
157template <typename CharT>
158inline chset<CharT>
159operator|(chset<CharT> const& a, CharT b)
160{
161 return a | chset<CharT>(b);
162}
163
164//////////////////////////////////
165template <typename CharT>
166inline chset<CharT>
167operator&(chset<CharT> const& a, CharT b)
168{
169 return a & chset<CharT>(b);
170}
171
172//////////////////////////////////
173template <typename CharT>
174inline chset<CharT>
175operator-(chset<CharT> const& a, CharT b)
176{
177 return a - chset<CharT>(b);
178}
179
180//////////////////////////////////
181template <typename CharT>
182inline chset<CharT>
183operator^(chset<CharT> const& a, CharT b)
184{
185 return a ^ chset<CharT>(b);
186}
187
188//////////////////////////////////
189template <typename CharT>
190inline chset<CharT>
191operator|(CharT a, chset<CharT> const& b)
192{
193 return chset<CharT>(a) | b;
194}
195
196//////////////////////////////////
197template <typename CharT>
198inline chset<CharT>
199operator&(CharT a, chset<CharT> const& b)
200{
201 return chset<CharT>(a) & b;
202}
203
204//////////////////////////////////
205template <typename CharT>
206inline chset<CharT>
207operator-(CharT a, chset<CharT> const& b)
208{
209 return chset<CharT>(a) - b;
210}
211
212//////////////////////////////////
213template <typename CharT>
214inline chset<CharT>
215operator^(CharT a, chset<CharT> const& b)
216{
217 return chset<CharT>(a) ^ b;
218}
219
220///////////////////////////////////////////////////////////////////////////////
221//
222// chlit <--> chset free operators implementation
223//
224///////////////////////////////////////////////////////////////////////////////
225template <typename CharT>
226inline chset<CharT>
227operator|(chset<CharT> const& a, chlit<CharT> const& b)
228{
229 return a | chset<CharT>(b.ch);
230}
231
232//////////////////////////////////
233template <typename CharT>
234inline chset<CharT>
235operator&(chset<CharT> const& a, chlit<CharT> const& b)
236{
237 return a & chset<CharT>(b.ch);
238}
239
240//////////////////////////////////
241template <typename CharT>
242inline chset<CharT>
243operator-(chset<CharT> const& a, chlit<CharT> const& b)
244{
245 return a - chset<CharT>(b.ch);
246}
247
248//////////////////////////////////
249template <typename CharT>
250inline chset<CharT>
251operator^(chset<CharT> const& a, chlit<CharT> const& b)
252{
253 return a ^ chset<CharT>(b.ch);
254}
255
256//////////////////////////////////
257template <typename CharT>
258inline chset<CharT>
259operator|(chlit<CharT> const& a, chset<CharT> const& b)
260{
261 return chset<CharT>(a.ch) | b;
262}
263
264//////////////////////////////////
265template <typename CharT>
266inline chset<CharT>
267operator&(chlit<CharT> const& a, chset<CharT> const& b)
268{
269 return chset<CharT>(a.ch) & b;
270}
271
272//////////////////////////////////
273template <typename CharT>
274inline chset<CharT>
275operator-(chlit<CharT> const& a, chset<CharT> const& b)
276{
277 return chset<CharT>(a.ch) - b;
278}
279
280//////////////////////////////////
281template <typename CharT>
282inline chset<CharT>
283operator^(chlit<CharT> const& a, chset<CharT> const& b)
284{
285 return chset<CharT>(a.ch) ^ b;
286}
287
288///////////////////////////////////////////////////////////////////////////////
289//
290// negated_char_parser<range> <--> chset free operators implementation
291//
292///////////////////////////////////////////////////////////////////////////////
293template <typename CharT>
294inline chset<CharT>
295operator|(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b)
296{
297 return a | chset<CharT>(b);
298}
299
300//////////////////////////////////
301template <typename CharT>
302inline chset<CharT>
303operator&(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b)
304{
305 return a & chset<CharT>(b);
306}
307
308//////////////////////////////////
309template <typename CharT>
310inline chset<CharT>
311operator-(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b)
312{
313 return a - chset<CharT>(b);
314}
315
316//////////////////////////////////
317template <typename CharT>
318inline chset<CharT>
319operator^(chset<CharT> const& a, negated_char_parser<range<CharT> > const& b)
320{
321 return a ^ chset<CharT>(b);
322}
323
324//////////////////////////////////
325template <typename CharT>
326inline chset<CharT>
327operator|(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b)
328{
329 return chset<CharT>(a) | b;
330}
331
332//////////////////////////////////
333template <typename CharT>
334inline chset<CharT>
335operator&(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b)
336{
337 return chset<CharT>(a) & b;
338}
339
340//////////////////////////////////
341template <typename CharT>
342inline chset<CharT>
343operator-(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b)
344{
345 return chset<CharT>(a) - b;
346}
347
348//////////////////////////////////
349template <typename CharT>
350inline chset<CharT>
351operator^(negated_char_parser<range<CharT> > const& a, chset<CharT> const& b)
352{
353 return chset<CharT>(a) ^ b;
354}
355
356///////////////////////////////////////////////////////////////////////////////
357//
358// negated_char_parser<chlit> <--> chset free operators implementation
359//
360///////////////////////////////////////////////////////////////////////////////
361template <typename CharT>
362inline chset<CharT>
363operator|(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b)
364{
365 return a | chset<CharT>(b);
366}
367
368//////////////////////////////////
369template <typename CharT>
370inline chset<CharT>
371operator&(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b)
372{
373 return a & chset<CharT>(b);
374}
375
376//////////////////////////////////
377template <typename CharT>
378inline chset<CharT>
379operator-(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b)
380{
381 return a - chset<CharT>(b);
382}
383
384//////////////////////////////////
385template <typename CharT>
386inline chset<CharT>
387operator^(chset<CharT> const& a, negated_char_parser<chlit<CharT> > const& b)
388{
389 return a ^ chset<CharT>(b);
390}
391
392//////////////////////////////////
393template <typename CharT>
394inline chset<CharT>
395operator|(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b)
396{
397 return chset<CharT>(a) | b;
398}
399
400//////////////////////////////////
401template <typename CharT>
402inline chset<CharT>
403operator&(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b)
404{
405 return chset<CharT>(a) & b;
406}
407
408//////////////////////////////////
409template <typename CharT>
410inline chset<CharT>
411operator-(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b)
412{
413 return chset<CharT>(a) - b;
414}
415
416//////////////////////////////////
417template <typename CharT>
418inline chset<CharT>
419operator^(negated_char_parser<chlit<CharT> > const& a, chset<CharT> const& b)
420{
421 return chset<CharT>(a) ^ b;
422}
423
424///////////////////////////////////////////////////////////////////////////////
425//
426// anychar_parser <--> chset free operators
427//
428// Where a is chset and b is a anychar_parser, and vice-versa, implements:
429//
430// a | b, a & b, a - b, a ^ b
431//
432///////////////////////////////////////////////////////////////////////////////
433namespace impl {
434
435 template <typename CharT>
436 inline BOOST_SPIRIT_CLASSIC_NS::range<CharT> const&
437 full()
438 {
439 static BOOST_SPIRIT_CLASSIC_NS::range<CharT> full_(
440 (std::numeric_limits<CharT>::min)(),
441 (std::numeric_limits<CharT>::max)());
442 return full_;
443 }
444
445 template <typename CharT>
446 inline BOOST_SPIRIT_CLASSIC_NS::range<CharT> const&
447 empty()
448 {
449 static BOOST_SPIRIT_CLASSIC_NS::range<CharT> empty_;
450 return empty_;
451 }
452}
453
454//////////////////////////////////
455template <typename CharT>
456inline chset<CharT>
457operator|(chset<CharT> const&, anychar_parser)
458{
459 return chset<CharT>(impl::full<CharT>());
460}
461
462//////////////////////////////////
463template <typename CharT>
464inline chset<CharT>
465operator&(chset<CharT> const& a, anychar_parser)
466{
467 return a;
468}
469
470//////////////////////////////////
471template <typename CharT>
472inline chset<CharT>
473operator-(chset<CharT> const&, anychar_parser)
474{
475 return chset<CharT>();
476}
477
478//////////////////////////////////
479template <typename CharT>
480inline chset<CharT>
481operator^(chset<CharT> const& a, anychar_parser)
482{
483 return ~a;
484}
485
486//////////////////////////////////
487template <typename CharT>
488inline chset<CharT>
489operator|(anychar_parser, chset<CharT> const& /*b*/)
490{
491 return chset<CharT>(impl::full<CharT>());
492}
493
494//////////////////////////////////
495template <typename CharT>
496inline chset<CharT>
497operator&(anychar_parser, chset<CharT> const& b)
498{
499 return b;
500}
501
502//////////////////////////////////
503template <typename CharT>
504inline chset<CharT>
505operator-(anychar_parser, chset<CharT> const& b)
506{
507 return ~b;
508}
509
510//////////////////////////////////
511template <typename CharT>
512inline chset<CharT>
513operator^(anychar_parser, chset<CharT> const& b)
514{
515 return ~b;
516}
517
518///////////////////////////////////////////////////////////////////////////////
519//
520// nothing_parser <--> chset free operators implementation
521//
522///////////////////////////////////////////////////////////////////////////////
523template <typename CharT>
524inline chset<CharT>
525operator|(chset<CharT> const& a, nothing_parser)
526{
527 return a;
528}
529
530//////////////////////////////////
531template <typename CharT>
532inline chset<CharT>
533operator&(chset<CharT> const& /*a*/, nothing_parser)
534{
535 return impl::empty<CharT>();
536}
537
538//////////////////////////////////
539template <typename CharT>
540inline chset<CharT>
541operator-(chset<CharT> const& a, nothing_parser)
542{
543 return a;
544}
545
546//////////////////////////////////
547template <typename CharT>
548inline chset<CharT>
549operator^(chset<CharT> const& a, nothing_parser)
550{
551 return a;
552}
553
554//////////////////////////////////
555template <typename CharT>
556inline chset<CharT>
557operator|(nothing_parser, chset<CharT> const& b)
558{
559 return b;
560}
561
562//////////////////////////////////
563template <typename CharT>
564inline chset<CharT>
565operator&(nothing_parser, chset<CharT> const& /*b*/)
566{
567 return impl::empty<CharT>();
568}
569
570//////////////////////////////////
571template <typename CharT>
572inline chset<CharT>
573operator-(nothing_parser, chset<CharT> const& /*b*/)
574{
575 return impl::empty<CharT>();
576}
577
578//////////////////////////////////
579template <typename CharT>
580inline chset<CharT>
581operator^(nothing_parser, chset<CharT> const& b)
582{
583 return b;
584}
585
586///////////////////////////////////////////////////////////////////////////////
587BOOST_SPIRIT_CLASSIC_NAMESPACE_END
588
589}} // namespace boost::spirit
590
591#endif
592