MiKTeX 26.5-next
A scalable TeX distribution
Loading...
Searching...
No Matches
inliners.h
Go to the documentation of this file.
1
13
14#pragma once
15
16#include <miktex/Util/config.h>
17
18#include <string>
19
20#include <cstring>
21#include <cwchar>
22
23MIKTEX_UTIL_BEGIN_NAMESPACE;
24
25inline const char* StrChr(const char* s, int ch)
26{
27 return strchr(s, ch);
28}
29
30inline const wchar_t* StrChr(const wchar_t* s, wint_t ch)
31{
32 return wcschr(s, ch);
33}
34
35template<typename CharType> size_t StrLen(const CharType* s)
36{
37 const CharType* start = s;
38 for (; *s != 0; ++s)
39 {
40 }
41 return s - start;
42}
43
44template<> inline size_t StrLen<char>(const char* s)
45{
46 return strlen(s);
47}
48
49template<> inline size_t StrLen<wchar_t>(const wchar_t* s)
50{
51 return wcslen(s);
52}
53
54inline int CeeStringCompare(const char* s1, const char* s2, bool ignoreCase)
55{
56#if defined(_MSC_VER)
57 return ignoreCase ? _stricmp(s1, s2) : strcmp(s1, s2);
58#else
59 return ignoreCase ? strcasecmp(s1, s2) : strcmp(s1, s2);
60#endif
61}
62
63inline int CeeStringCompare(const char* s1, const char* s2, size_t n, bool ignoreCase)
64{
65#if defined(_MSC_VER)
66 return ignoreCase ? _strnicmp(s1, s2, n) : strncmp(s1, s2, n);
67#else
68 return ignoreCase ? strncasecmp(s1, s2, n) : strncmp(s1, s2, n);
69#endif
70}
71
72inline int CeeStringCompare(const char* s1, const char* s2)
73{
74 return CeeStringCompare(s1, s2, false);
75}
76
77inline int StringCompare(const std::string& s1, const std::string& s2, bool ignoreCase)
78{
79 return CeeStringCompare(s1.c_str(), s2.c_str(), ignoreCase);
80}
81
82inline int StringCompare(const std::string& s1, const std::string& s2)
83{
84 return StringCompare(s1, s2, false);
85}
86
87MIKTEX_UTIL_END_NAMESPACE;