-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathXSwitchFlags.cpp
More file actions
78 lines (71 loc) · 2.1 KB
/
XSwitchFlags.cpp
File metadata and controls
78 lines (71 loc) · 2.1 KB
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include "defines.h"
// Constructor
//XSwitchFlags::XSwitchFlags(const TString& switches) noexcept
// : m_dFlagMask(0ULL)
//{
// // no - sign, & no + sign, invalid syntax
// if (switches[0] == TEXT('-'))
// m_dFlagMask |= (1ULL << 60);
// else if (switches[0] == TEXT('+'))
// m_dFlagMask |= (1ULL << 61);
// else
// return; // just return with no flags set.
//
// const auto len = switches.len();
//
// // Parse the switches
// for (auto i = decltype(len){1}; i < len; ++i)
// {
// const auto c = switches[i];
//
// // Check if its in the right range
// if ((c >= TEXT('A')) && (c <= TEXT('z'))) // this gives us 57bits in use + 2 special cases
// {
// const auto bitn = c - TEXT('A');
// m_dFlagMask |= (1ULL << bitn);
// }
// }
//}
XSwitchFlags::XSwitchFlags(const TString& switches) noexcept
: XSwitchFlags(switches.to_chr(), switches.len())
{
}
XSwitchFlags::XSwitchFlags(const TCHAR* const switches, size_t len) noexcept
: m_dFlagMask(0ULL)
{
if (!switches || !len)
return;
// no - sign, & no + sign, invalid syntax
if (switches[0] == TEXT('-'))
m_dFlagMask |= (1ULL << 60);
else if (switches[0] == TEXT('+'))
m_dFlagMask |= (1ULL << 61);
else
return; // just return with no flags set.
// Parse the switches
for (auto i = decltype(len){1}; i < len; ++i)
{
const auto c = switches[i];
// Check if its in the right range
if ((c >= TEXT('A')) && (c <= TEXT('z'))) // this gives us 57bits in use + 2 special cases
{
const auto bitn = c - TEXT('A');
m_dFlagMask |= (1ULL << bitn);
}
}
}
// Checks if flags are set.
const bool XSwitchFlags::isSet(const TCHAR c) const noexcept
{
// Lower-case & Upper-case
if ((c >= TEXT('A')) && (c <= TEXT('z'))) // this gives us 57bits in use + 2 special cases
{
const auto bitn = c - TEXT('A');
return (m_dFlagMask & (1ULL << bitn)) != 0;
}
else if (c == TEXT('-')) // check if - flag identifier used.
return (m_dFlagMask & (1ULL << 60)) != 0;
else if (c == TEXT('+')) // check if + flag identifier used.
return (m_dFlagMask & (1ULL << 61)) != 0;
return m_bFalse;
}