acme
Foundational cross-platform layer of the ca2 framework
Toggle main menu visibility
Loading...
Searching...
No Matches
_conv.h
1
// Refactored by camilo on 2022-12-09 00:48 <3ThomasBorregaardSorensen!!
2
#pragma once
3
4
5
template
< prototype_
char
acter CHARACTER >
6
constexpr
CHARACTER
* __zerotosz(
CHARACTER
* & p)
7
{
8
9
*p++ =
'0'
;
10
11
*p = 0;
12
13
return
p;
14
15
}
16
17
18
template
< prototype_
unsigned
UNSIGNED, prototype_
char
acter CHARACTER >
19
constexpr
void
__utosz_internal(UNSIGNED u,
CHARACTER
* & pParam, ::i32 base, enum_digit_case edigitcase)
20
{
21
22
auto
& p = (::non_const < CHARACTER * > &) pParam;
23
24
while
(u != 0)
25
{
26
27
auto
digit = (u % base);
28
29
if
(digit <= 9)
30
{
31
32
*p = (
CHARACTER
)(digit +
'0'
);
33
34
}
35
else
36
{
37
38
*p = (
CHARACTER
)(digit - 10 + edigitcase);
39
40
}
41
42
u = (UNSIGNED) (u / base);
43
44
p++;
45
46
}
47
48
}
49
50
58
template
< prototype_
unsigned
UNSIGNED, prototype_
char
acter CHARACTER >
59
constexpr
void
__rear_tosz(UNSIGNED u,
CHARACTER
*& p, ::i32 base, enum_digit_case edigitcase)
60
{
61
62
__utosz_internal(u, p, base, edigitcase);
63
64
}
65
66
67
template
< prototype_
signed
SIGNED, prototype_
char
acter CHARACTER >
68
constexpr
void
__rear_tosz(SIGNED i,
CHARACTER
*& p, ::i32 base, enum_digit_case edigitcase)
69
{
70
71
auto
[u, bNegative] = as_absolute_unsigned(i);
72
73
__utosz_internal(u, p, base, edigitcase);
74
75
if
(bNegative) *p++ =
'-'
;
76
77
}
78
79
87
template
< prototype_
int
egral INTEGRAL, prototype_
char
acter CHARACTER >
88
constexpr
void
__tosz(INTEGRAL i,
CHARACTER
* & pcharacter, ::i32 base, enum_digit_case edigitcase)
89
{
90
91
auto
& p = (non_const <CHARACTER> * &) pcharacter;
92
93
if
(i == 0)
94
{
95
96
__zerotosz(p);
97
98
return
;
99
100
}
101
102
auto
s = p;
103
104
__rear_tosz(i, p, base, edigitcase);
105
106
reverse(s, p);
107
108
*p = 0;
109
110
}
111
112
//::pair <::i32,::i32> ia;
113
114
115
116
CHARACTER
prototype
string
_conv.h
Generated by
1.17.0