Skip to content

Commit a295007

Browse files
authored
Add files via upload
1 parent 6a29a84 commit a295007

6 files changed

Lines changed: 480 additions & 0 deletions

File tree

include/charimpl/charimpl.hpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
// MIT License
2+
//
3+
// Copyright (c) 2023 igozdev
4+
//
5+
// Permission is hereby granted, free of charge, to any person obtaining a copy
6+
// of this software and associated documentation files (the "Software"), to deal
7+
// in the Software without restriction, including without limitation the rights
8+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
// copies of the Software, and to permit persons to whom the Software is
10+
// furnished to do so, subject to the following conditions:
11+
//
12+
// The above copyright notice and this permission notice shall be included in all
13+
// copies or substantial portions of the Software.
14+
//
15+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
// SOFTWARE.
22+
23+
#pragma once
24+
25+
#include <charimpl/impl/ascii.hpp>
26+
#include <charimpl/impl/ebcdic.hpp>
27+
#include <charimpl/impl/ebcdic037.hpp>
28+
#include <charimpl/impl/ebcdic273.hpp>
29+
#include <charimpl/impl/ebcdic1047.hpp>

include/charimpl/impl/ascii.hpp

Lines changed: 145 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,145 @@
1+
// MIT License
2+
//
3+
// Copyright (c) 2023 igozdev
4+
//
5+
// Permission is hereby granted, free of charge, to any person obtaining a copy
6+
// of this software and associated documentation files (the "Software"), to deal
7+
// in the Software without restriction, including without limitation the rights
8+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
// copies of the Software, and to permit persons to whom the Software is
10+
// furnished to do so, subject to the following conditions:
11+
//
12+
// The above copyright notice and this permission notice shall be included in all
13+
// copies or substantial portions of the Software.
14+
//
15+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
// SOFTWARE.
22+
23+
#pragma once
24+
25+
#define CHARIMPL_ASCII_EXPR \
26+
'\a' == static_cast<char>(0x07) && \
27+
'\b' == static_cast<char>(0x08) && \
28+
'\t' == static_cast<char>(0x09) && \
29+
'\n' == static_cast<char>(0x0A) && \
30+
'\v' == static_cast<char>(0x0B) && \
31+
'\f' == static_cast<char>(0x0C) && \
32+
'\r' == static_cast<char>(0x0D) && \
33+
' ' == static_cast<char>(0x20) && \
34+
'!' == static_cast<char>(0x21) && \
35+
'\"' == static_cast<char>(0x22) && \
36+
'#' == static_cast<char>(0x23) && \
37+
'$' == static_cast<char>(0x24) && \
38+
'%' == static_cast<char>(0x25) && \
39+
'&' == static_cast<char>(0x26) && \
40+
'\'' == static_cast<char>(0x27) && \
41+
'(' == static_cast<char>(0x28) && \
42+
')' == static_cast<char>(0x29) && \
43+
'*' == static_cast<char>(0x2A) && \
44+
'+' == static_cast<char>(0x2B) && \
45+
',' == static_cast<char>(0x2C) && \
46+
'-' == static_cast<char>(0x2D) && \
47+
'.' == static_cast<char>(0x2E) && \
48+
'/' == static_cast<char>(0x2F) && \
49+
'0' == static_cast<char>(0x30) && \
50+
'1' == static_cast<char>(0x31) && \
51+
'2' == static_cast<char>(0x32) && \
52+
'3' == static_cast<char>(0x33) && \
53+
'4' == static_cast<char>(0x34) && \
54+
'5' == static_cast<char>(0x35) && \
55+
'6' == static_cast<char>(0x36) && \
56+
'7' == static_cast<char>(0x37) && \
57+
'8' == static_cast<char>(0x38) && \
58+
'9' == static_cast<char>(0x39) && \
59+
':' == static_cast<char>(0x3A) && \
60+
';' == static_cast<char>(0x3B) && \
61+
'<' == static_cast<char>(0x3C) && \
62+
'=' == static_cast<char>(0x3D) && \
63+
'>' == static_cast<char>(0x3E) && \
64+
'?' == static_cast<char>(0x3F) && \
65+
'@' == static_cast<char>(0x40) && \
66+
'A' == static_cast<char>(0x41) && \
67+
'B' == static_cast<char>(0x42) && \
68+
'C' == static_cast<char>(0x43) && \
69+
'D' == static_cast<char>(0x44) && \
70+
'E' == static_cast<char>(0x45) && \
71+
'F' == static_cast<char>(0x46) && \
72+
'G' == static_cast<char>(0x47) && \
73+
'H' == static_cast<char>(0x48) && \
74+
'I' == static_cast<char>(0x49) && \
75+
'J' == static_cast<char>(0x4A) && \
76+
'K' == static_cast<char>(0x4B) && \
77+
'L' == static_cast<char>(0x4C) && \
78+
'M' == static_cast<char>(0x4D) && \
79+
'N' == static_cast<char>(0x4E) && \
80+
'O' == static_cast<char>(0x4F) && \
81+
'P' == static_cast<char>(0x50) && \
82+
'Q' == static_cast<char>(0x51) && \
83+
'R' == static_cast<char>(0x52) && \
84+
'S' == static_cast<char>(0x53) && \
85+
'T' == static_cast<char>(0x54) && \
86+
'U' == static_cast<char>(0x55) && \
87+
'V' == static_cast<char>(0x56) && \
88+
'W' == static_cast<char>(0x57) && \
89+
'X' == static_cast<char>(0x58) && \
90+
'Y' == static_cast<char>(0x59) && \
91+
'Z' == static_cast<char>(0x5A) && \
92+
'[' == static_cast<char>(0x5B) && \
93+
'\\' == static_cast<char>(0x5C) && \
94+
']' == static_cast<char>(0x5D) && \
95+
'^' == static_cast<char>(0x5E) && \
96+
'_' == static_cast<char>(0x5F) && \
97+
'`' == static_cast<char>(0x60) && \
98+
'a' == static_cast<char>(0x61) && \
99+
'b' == static_cast<char>(0x62) && \
100+
'c' == static_cast<char>(0x63) && \
101+
'd' == static_cast<char>(0x64) && \
102+
'e' == static_cast<char>(0x65) && \
103+
'f' == static_cast<char>(0x66) && \
104+
'g' == static_cast<char>(0x67) && \
105+
'h' == static_cast<char>(0x68) && \
106+
'i' == static_cast<char>(0x69) && \
107+
'j' == static_cast<char>(0x6A) && \
108+
'k' == static_cast<char>(0x6B) && \
109+
'l' == static_cast<char>(0x6C) && \
110+
'm' == static_cast<char>(0x6D) && \
111+
'n' == static_cast<char>(0x6E) && \
112+
'o' == static_cast<char>(0x6F) && \
113+
'p' == static_cast<char>(0x70) && \
114+
'q' == static_cast<char>(0x71) && \
115+
'r' == static_cast<char>(0x72) && \
116+
's' == static_cast<char>(0x73) && \
117+
't' == static_cast<char>(0x74) && \
118+
'u' == static_cast<char>(0x75) && \
119+
'v' == static_cast<char>(0x76) && \
120+
'w' == static_cast<char>(0x77) && \
121+
'x' == static_cast<char>(0x78) && \
122+
'y' == static_cast<char>(0x79) && \
123+
'z' == static_cast<char>(0x7A) && \
124+
'{' == static_cast<char>(0x7B) && \
125+
'|' == static_cast<char>(0x7C) && \
126+
'}' == static_cast<char>(0x7D) && \
127+
'~' == static_cast<char>(0x7E)
128+
129+
namespace charimpl
130+
{
131+
#if defined(__cpp_consteval)
132+
consteval
133+
#elif defined(__cpp_constexpr)
134+
constexpr
135+
#else
136+
inline
137+
#endif
138+
bool is_ascii()
139+
#if defined(__cpp_noexcept_function_type)
140+
noexcept
141+
#endif
142+
{
143+
return CHARIMPL_ASCII_EXPR;
144+
}
145+
}

include/charimpl/impl/ebcdic.hpp

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
// MIT License
2+
//
3+
// Copyright (c) 2023 igozdev
4+
//
5+
// Permission is hereby granted, free of charge, to any person obtaining a copy
6+
// of this software and associated documentation files (the "Software"), to deal
7+
// in the Software without restriction, including without limitation the rights
8+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
// copies of the Software, and to permit persons to whom the Software is
10+
// furnished to do so, subject to the following conditions:
11+
//
12+
// The above copyright notice and this permission notice shall be included in all
13+
// copies or substantial portions of the Software.
14+
//
15+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
// SOFTWARE.
22+
23+
#pragma once
24+
25+
#define CHARIMPL_EBCDIC_EXPR \
26+
'\a' == static_cast<char>(0x2F) && \
27+
'\b' == static_cast<char>(0x16) && \
28+
'\t' == static_cast<char>(0x05) && \
29+
'\n' == static_cast<char>(0x25) && \
30+
'\v' == static_cast<char>(0x0B) && \
31+
'\f' == static_cast<char>(0x0C) && \
32+
'\r' == static_cast<char>(0x0D) && \
33+
' ' == static_cast<char>(0x40) && \
34+
'.' == static_cast<char>(0x4B) && \
35+
'<' == static_cast<char>(0x4C) && \
36+
'(' == static_cast<char>(0x4D) && \
37+
'+' == static_cast<char>(0x4E) && \
38+
'&' == static_cast<char>(0x50) && \
39+
'*' == static_cast<char>(0x5C) && \
40+
')' == static_cast<char>(0x5D) && \
41+
';' == static_cast<char>(0x5E) && \
42+
'-' == static_cast<char>(0x60) && \
43+
'/' == static_cast<char>(0x61) && \
44+
',' == static_cast<char>(0x6B) && \
45+
'%' == static_cast<char>(0x6C) && \
46+
'_' == static_cast<char>(0x6D) && \
47+
'>' == static_cast<char>(0x6E) && \
48+
'?' == static_cast<char>(0x6F) && \
49+
':' == static_cast<char>(0x7A) && \
50+
'\'' == static_cast<char>(0x7D) && \
51+
'=' == static_cast<char>(0x7E) && \
52+
'\"' == static_cast<char>(0x7F) && \
53+
'a' == static_cast<char>(0x81) && \
54+
'b' == static_cast<char>(0x82) && \
55+
'c' == static_cast<char>(0x83) && \
56+
'd' == static_cast<char>(0x84) && \
57+
'e' == static_cast<char>(0x85) && \
58+
'f' == static_cast<char>(0x86) && \
59+
'g' == static_cast<char>(0x87) && \
60+
'h' == static_cast<char>(0x88) && \
61+
'i' == static_cast<char>(0x89) && \
62+
'j' == static_cast<char>(0x91) && \
63+
'k' == static_cast<char>(0x92) && \
64+
'l' == static_cast<char>(0x93) && \
65+
'm' == static_cast<char>(0x94) && \
66+
'n' == static_cast<char>(0x95) && \
67+
'o' == static_cast<char>(0x96) && \
68+
'p' == static_cast<char>(0x97) && \
69+
'q' == static_cast<char>(0x98) && \
70+
'r' == static_cast<char>(0x99) && \
71+
's' == static_cast<char>(0xA2) && \
72+
't' == static_cast<char>(0xA3) && \
73+
'u' == static_cast<char>(0xA4) && \
74+
'v' == static_cast<char>(0xA5) && \
75+
'w' == static_cast<char>(0xA6) && \
76+
'x' == static_cast<char>(0xA7) && \
77+
'y' == static_cast<char>(0xA8) && \
78+
'z' == static_cast<char>(0xA9) && \
79+
'A' == static_cast<char>(0xC1) && \
80+
'B' == static_cast<char>(0xC2) && \
81+
'C' == static_cast<char>(0xC3) && \
82+
'D' == static_cast<char>(0xC4) && \
83+
'E' == static_cast<char>(0xC5) && \
84+
'F' == static_cast<char>(0xC6) && \
85+
'G' == static_cast<char>(0xC7) && \
86+
'H' == static_cast<char>(0xC8) && \
87+
'I' == static_cast<char>(0xC9) && \
88+
'J' == static_cast<char>(0xD1) && \
89+
'K' == static_cast<char>(0xD2) && \
90+
'L' == static_cast<char>(0xD3) && \
91+
'M' == static_cast<char>(0xD4) && \
92+
'N' == static_cast<char>(0xD5) && \
93+
'O' == static_cast<char>(0xD6) && \
94+
'P' == static_cast<char>(0xD7) && \
95+
'Q' == static_cast<char>(0xD8) && \
96+
'R' == static_cast<char>(0xD9) && \
97+
'S' == static_cast<char>(0xE2) && \
98+
'T' == static_cast<char>(0xE3) && \
99+
'U' == static_cast<char>(0xE4) && \
100+
'V' == static_cast<char>(0xE5) && \
101+
'W' == static_cast<char>(0xE6) && \
102+
'X' == static_cast<char>(0xE7) && \
103+
'Y' == static_cast<char>(0xE8) && \
104+
'Z' == static_cast<char>(0xE9) && \
105+
'0' == static_cast<char>(0xF0) && \
106+
'1' == static_cast<char>(0xF1) && \
107+
'2' == static_cast<char>(0xF2) && \
108+
'3' == static_cast<char>(0xF3) && \
109+
'4' == static_cast<char>(0xF4) && \
110+
'5' == static_cast<char>(0xF5) && \
111+
'6' == static_cast<char>(0xF6) && \
112+
'7' == static_cast<char>(0xF7) && \
113+
'8' == static_cast<char>(0xF8) && \
114+
'9' == static_cast<char>(0xF9)
115+
116+
namespace charimpl
117+
{
118+
#if defined(__cpp_consteval)
119+
consteval
120+
#elif defined(__cpp_constexpr)
121+
constexpr
122+
#else
123+
inline
124+
#endif
125+
bool is_ebcdic()
126+
#if defined(__cpp_noexcept_function_type)
127+
noexcept
128+
#endif
129+
{
130+
return CHARIMPL_EBCDIC_EXPR;
131+
}
132+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
// MIT License
2+
//
3+
// Copyright (c) 2023 igozdev
4+
//
5+
// Permission is hereby granted, free of charge, to any person obtaining a copy
6+
// of this software and associated documentation files (the "Software"), to deal
7+
// in the Software without restriction, including without limitation the rights
8+
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
// copies of the Software, and to permit persons to whom the Software is
10+
// furnished to do so, subject to the following conditions:
11+
//
12+
// The above copyright notice and this permission notice shall be included in all
13+
// copies or substantial portions of the Software.
14+
//
15+
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
// SOFTWARE.
22+
23+
#pragma once
24+
25+
#include <charimpl/impl/ebcdic.hpp>
26+
27+
#define CHARIMPL_EBCDIC037_EXPR \
28+
CHARIMPL_EBCDIC_EXPR && \
29+
'!' == static_cast<char>(0x5A) && \
30+
'$' == static_cast<char>(0x5B) && \
31+
'`' == static_cast<char>(0x79) && \
32+
'#' == static_cast<char>(0x7B) && \
33+
'@' == static_cast<char>(0x7C) && \
34+
'~' == static_cast<char>(0xA1) && \
35+
'^' == static_cast<char>(0xB0) && \
36+
'[' == static_cast<char>(0xBA) && \
37+
']' == static_cast<char>(0xBB) && \
38+
'{' == static_cast<char>(0xC0) && \
39+
'}' == static_cast<char>(0xD0) && \
40+
'\\' == static_cast<char>(0xE0)
41+
42+
namespace charimpl
43+
{
44+
#if defined(__cpp_consteval)
45+
consteval
46+
#elif defined(__cpp_constexpr)
47+
constexpr
48+
#else
49+
inline
50+
#endif
51+
bool is_ebcdic037()
52+
#if defined(__cpp_noexcept_function_type)
53+
noexcept
54+
#endif
55+
{
56+
return CHARIMPL_EBCDIC037_EXPR;
57+
}
58+
}

0 commit comments

Comments
 (0)