libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
char.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
13#include <cstdint>
14#include <cstddef>
15#include <promeki/namespace.h>
16
17PROMEKI_NAMESPACE_BEGIN
18
31class Char {
32 public:
34 Char() : _cp(0) {}
35
37 Char(char c) : _cp(static_cast<unsigned char>(c)) {}
38
40 explicit Char(char32_t cp) : _cp(cp) {}
41
43 char32_t codepoint() const { return _cp; }
44
46 bool isNull() const { return _cp == 0; }
47
49 bool isAscii() const { return _cp < 0x80; }
50
52 bool isAlpha() const;
53
55 bool isDigit() const;
56
58 bool isAlphaNumeric() const;
59
61 bool isSpace() const;
62
64 bool isUpper() const;
65
67 bool isLower() const;
68
70 bool isPrintable() const;
71
73 bool isHexDigit() const {
74 return (_cp >= '0' && _cp <= '9') || (_cp >= 'a' && _cp <= 'f') || (_cp >= 'A' && _cp <= 'F');
75 }
76
81 int hexDigitValue() const {
82 if (_cp >= '0' && _cp <= '9') return _cp - '0';
83 if (_cp >= 'a' && _cp <= 'f') return 10 + _cp - 'a';
84 if (_cp >= 'A' && _cp <= 'F') return 10 + _cp - 'A';
85 return -1;
86 }
87
89 Char toUpper() const;
90
92 Char toLower() const;
93
95 size_t utf8ByteCount() const;
96
102 size_t toUtf8(char *buf) const;
103
110 static Char fromUtf8(const char *buf, size_t *bytesRead = nullptr);
111
112 bool operator==(Char o) const { return _cp == o._cp; }
113 bool operator==(char c) const { return _cp == static_cast<unsigned char>(c); }
114 bool operator!=(Char o) const { return _cp != o._cp; }
115 bool operator<(Char o) const { return _cp < o._cp; }
116 bool operator<=(Char o) const { return _cp <= o._cp; }
117 bool operator>(Char o) const { return _cp > o._cp; }
118 bool operator>=(Char o) const { return _cp >= o._cp; }
119
120 private:
121 char32_t _cp;
122};
123
124PROMEKI_NAMESPACE_END
125
126#endif // PROMEKI_ENABLE_CORE