1/*
2 * IXStrCaseCompare.cpp
3 * Author: Benjamin Sergeant
4 * Copyright (c) 2020 Machine Zone. All rights reserved.
5 */
6
7#include "IXStrCaseCompare.h"
8
9#include <algorithm>
10#include <locale>
11
12namespace ix
13{
14 bool CaseInsensitiveLess::NocaseCompare::operator()(const unsigned char& c1,
15 const unsigned char& c2) const
16 {
17#if defined(_WIN32) && !defined(__GNUC__)
18 return std::tolower(c1, std::locale()) < std::tolower(c2, std::locale());
19#else
20 return std::tolower(c1) < std::tolower(c2);
21#endif
22 }
23
24 bool CaseInsensitiveLess::cmp(const std::string& s1, const std::string& s2)
25 {
26 return std::lexicographical_compare(s1.begin(),
27 s1.end(), // source range
28 s2.begin(),
29 s2.end(), // dest range
30 NocaseCompare()); // comparison
31 }
32
33 bool CaseInsensitiveLess::operator()(const std::string& s1, const std::string& s2) const
34 {
35 return CaseInsensitiveLess::cmp(s1, s2);
36 }
37} // namespace ix
38