acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
ansi.h
1// Refactored by camilo on 2022-11-04 05:50 <3ThomasBorregaardSorensen!!
2#pragma once
3
4
5#include <stdarg.h>
6#include <string.h>
7
8
9#define const_ansichar_trigger const_char_pointer
10
11
12template < prototype_character CHARACTER >
13CLASS_DECL_ACME constexpr memsize character_count_to_byte_length(const CHARACTER * pszTrigger, character_count nCharLength)
14{
15
16 return (::memsize)((nCharLength) * sizeof(CHARACTER));
17
18}
19
20
21template < prototype_character CHARACTER >
22CLASS_DECL_ACME constexpr memsize character_count_to_byte_length_constrain_source_length(const CHARACTER * pszTrigger, character_count nCharLength)
23{
24
25 return (::memsize)::minimum((nCharLength) * sizeof(CHARACTER), (string_get_length(pszTrigger) + 1) * sizeof(CHARACTER));
26
27}
28
29
30template < prototype_character CHARACTER >
31CLASS_DECL_ACME constexpr character_count byte_length_to_character_count(const CHARACTER * pszTrigger, memsize nByteLength)
32{
33
34 return (::character_count)((nByteLength / sizeof(CHARACTER)));
35
36}
37
38
39template < prototype_character CHARACTER >
40CLASS_DECL_ACME constexpr memsize null_terminated_character_count_to_byte_length(const CHARACTER * pszTrigger, character_count nCharLength)
41{
42
43 return (::memsize)((nCharLength + 1) * sizeof(CHARACTER));
44
45}
46
47
48template < prototype_character CHARACTER >
49constexpr character_count null_terminated_byte_length_to_character_count(const CHARACTER * pszTrigger, memsize nByteLength)
50{
51
52 return (::character_count)((nByteLength / sizeof(CHARACTER)) - 1);
53
54}
55
56
57CLASS_DECL_ACME void string_count_copy(::ansi_character * pchDest, const_char_pointer pchSrc, character_count nChars) noexcept;
58CLASS_DECL_ACME void string_count_copy(::ansi_character * pchDest, size_t nDestLen, const_char_pointer pchSrc, character_count nChars) noexcept;
59CLASS_DECL_ACME void overlapped_string_count_copy(::ansi_character * pchDest, const_char_pointer pchSrc, character_count nChars) noexcept;
60
61
62CLASS_DECL_ACME ::i32 _string_compare(const_char_pointer pszA, const_char_pointer pszB) noexcept;
63CLASS_DECL_ACME ::i32 case_insensitive__string_compare(const_char_pointer pszA, const_char_pointer pszB) noexcept;
64CLASS_DECL_ACME ::i32 _string_count_compare(const_char_pointer pszA, const_char_pointer pszB, character_count len) noexcept;
65CLASS_DECL_ACME ::i32 case_insensitive__string_count_compare(const_char_pointer pszA, const_char_pointer pszB, character_count len) noexcept;
66CLASS_DECL_ACME ::std::strong_ordering _string_collate(const_char_pointer pszA, const_char_pointer pszB) noexcept;
67CLASS_DECL_ACME ::std::strong_ordering _case_insensitive_string_collate(const_char_pointer pszA, const_char_pointer pszB) noexcept;
68CLASS_DECL_ACME ::std::strong_ordering _string_count_collate(const_char_pointer pszA, const_char_pointer pszB, character_count len) noexcept;
69CLASS_DECL_ACME ::std::strong_ordering _case_insensitive_string_count_collate(const_char_pointer pszA, const_char_pointer pszB, character_count len) noexcept;
70
71
72CLASS_DECL_ACME ::i32 string_compare(const_char_pointer pszA, character_count sizeA, const_char_pointer pszB, character_count sizeB) noexcept;
73CLASS_DECL_ACME ::i32 string_compare(const_char_pointer pszA, const_char_pointer pszB) noexcept;
74CLASS_DECL_ACME ::i32 case_insensitive_string_compare(const_char_pointer pszA, const_char_pointer pszB) noexcept;
75CLASS_DECL_ACME ::i32 string_count_compare(const_char_pointer pszA, const_char_pointer pszB, character_count len) noexcept;
76CLASS_DECL_ACME ::i32 case_insensitive_string_count_compare(const_char_pointer pszA, const_char_pointer pszB, character_count len) noexcept;
77CLASS_DECL_ACME ::std::strong_ordering string_collate(const_char_pointer pszA, const_char_pointer pszB) noexcept;
78CLASS_DECL_ACME ::std::strong_ordering case_insensitive_string_collate(const_char_pointer pszA, const_char_pointer pszB) noexcept;
79CLASS_DECL_ACME ::std::strong_ordering string_count_collate(const_char_pointer pszA, const_char_pointer pszB, character_count len) noexcept;
80CLASS_DECL_ACME ::std::strong_ordering case_insensitive_string_count_collate(const_char_pointer pszA, const_char_pointer pszB, character_count len) noexcept;
81
82
83
84inline ::i32 _string_count_compare(const ::ansi_character* pszA, const ::ansi_character* pszB, character_count len) noexcept { return strncmp(pszA, pszB, len); }
85
86#if defined(__BSD__)
87inline ::i32 _case_insensitive_string_count_compare(const ::ansi_character* pszA, const ::ansi_character* pszB, character_count len) noexcept { return strncasecmp(pszA, pszB, len); }
88#else
89inline ::i32 _case_insensitive_string_count_compare(const ::ansi_character* pszA, const ::ansi_character* pszB, character_count len) noexcept { return strnicmp(pszA, pszB, len); }
90#endif
91
92inline bool string_equals(const_char_pointer pszA, const_char_pointer pszB) noexcept{return string_compare(pszA, pszB) == 0; }
93
94CLASS_DECL_ACME character_count string_get_length(const_char_pointer psz) noexcept;
95CLASS_DECL_ACME character_count string_get_length2(const ::ansi_character* psz, character_count sizeMaximumInterest) noexcept;
96CLASS_DECL_ACME character_count string_safe_length(const_char_pointer psz) noexcept;
97CLASS_DECL_ACME character_count string_safe_length2(const ::ansi_character* psz, character_count sizeMaximumInterest) noexcept;
98CLASS_DECL_ACME ::ansi_character * string_lowercase(::ansi_character * psz, character_count size) noexcept;
99
100
101
102CLASS_DECL_ACME const_char_pointer string_find_character(const_char_pointer pszBlock, ::ansi_character chMatch) noexcept;
103CLASS_DECL_ACME const_char_pointer string_find_character(const_char_pointer psz, const_char_pointer pszEnd, ::ansi_character chMatch) noexcept;
104CLASS_DECL_ACME const_char_pointer string_rear_find_character(const_char_pointer psz, ::ansi_character ch) noexcept;
105CLASS_DECL_ACME const_char_pointer string_find_string(const_char_pointer pszBlock, const_char_pointer pszMatch) noexcept;
106CLASS_DECL_ACME const_char_pointer string_rear_find_string(const_char_pointer psz, const_char_pointer pszFind, character_count iStart) noexcept;
107CLASS_DECL_ACME const_char_pointer case_insensitive_string_find_string(const_char_pointer pszBlock, const_char_pointer pszMatch) noexcept;
108
109
110CLASS_DECL_ACME ::ansi_character character_tolower(::ansi_character ansich) noexcept;
111CLASS_DECL_ACME ::ansi_character character_toupper(::ansi_character ansich) noexcept;
112
113
114
115
116
117CLASS_DECL_ACME ::ansi_character character_tolower(::ansi_character ansich) noexcept;
118CLASS_DECL_ACME ::ansi_character character_toupper(::ansi_character ansich) noexcept;
119
120
121CLASS_DECL_ACME bool character_isalpha(::ansi_character ansich) noexcept;
122CLASS_DECL_ACME bool character_isalnum(::ansi_character ansich) noexcept;
123CLASS_DECL_ACME bool character_isdigit(::ansi_character ansich) noexcept;
124CLASS_DECL_ACME bool character_isspace(::ansi_character ansich) noexcept;
125CLASS_DECL_ACME bool character_isupper(::ansi_character ansich) noexcept;
126
127
128CLASS_DECL_ACME bool character_isxdigit(::ansi_character ansich) noexcept;
129
130
131CLASS_DECL_ACME ::ansi_character * string_uppercase(::ansi_character * psz, character_count size) noexcept;
132CLASS_DECL_ACME ::ansi_character * string_reverse(::ansi_character * psz) noexcept;
133
134
135
136CLASS_DECL_ACME character_count string_skip_any_character_in(const_char_pointer pszBlock, const_char_pointer pszSet) noexcept;
137CLASS_DECL_ACME character_count string_find_first_character_in(const_char_pointer pszBlock, const_char_pointer pszSet) noexcept;
138
139
140CLASS_DECL_ACME character_count get_formatted_length(const_char_pointer pszFormat, va_list args) noexcept;
141CLASS_DECL_ACME character_count _string_format(::ansi_character * pszBuffer, character_count nlength, const_char_pointer pszFormat, va_list args) noexcept;
142CLASS_DECL_ACME void flood_characters(::ansi_character * psz, ::ansi_character ch, character_count len) noexcept;
143
144CLASS_DECL_ACME character_count unichar_count(const_char_pointer pstr);
145
146
147CLASS_DECL_ACME ::i64 string_to_signed(const_char_pointer psz);
148CLASS_DECL_ACME ::u64 as_u64(const_char_pointer psz);
149CLASS_DECL_ACME ::f64 string_to_floating(const_char_pointer psz);
150
151
152