-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathiless_range.h
37 lines (29 loc) · 1.19 KB
/
iless_range.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#ifndef COOL_ILESS_RANGE_H_
#define COOL_ILESS_RANGE_H_
#include <cool/iless_char.h>
#include <algorithm>
#include <iterator>
namespace cool
{
///////////////////////////////////////////////////////////////////////////
// iless_range is a comparison class which lexicographically compares two
// container-like objects without regards to case
///////////////////////////////////////////////////////////////////////////
struct iless_range : private iless_char
{
iless_range() = default;
explicit iless_range(iless_char const& ilc) : iless_char{ilc} {}
explicit iless_range(std::locale const& loc) : iless_char{loc} {}
using iless_char::get_locale;
iless_char const& get_iless_char() const noexcept { return *this; }
template<typename L, typename R>
bool operator()(L const& l, R const& r) const
{
return std::lexicographical_compare(std::begin(l), std::end(l),
std::begin(r), std::end(r),
get_iless_char());
}
using is_transparent = void;
};
} // cool namespace
#endif /* COOL_ILESS_RANGE_H_ */