@@ -28,24 +28,27 @@ Params:
28
28
Returns:
29
29
The unsigned integer value as a string of characters
30
30
*/
31
- char [] unsignedToTempString (uint radix = 10 )(ulong value, return scope char [] buf) @safe
32
- if (radix >= 2 && radix <= 16 )
31
+ char [] unsignedToTempString ()(ulong value, return scope char [] buf, uint radix = 10 ) @safe
33
32
{
33
+ if (radix < 2 )
34
+ // not a valid radix, just return an empty string
35
+ return buf[$ .. $];
36
+
34
37
size_t i = buf.length;
35
38
do
36
39
{
37
- uint x = void ;
38
40
if (value < radix)
39
41
{
40
- x = cast (uint )value;
41
- value = 0 ;
42
+ ubyte x = cast (ubyte )value;
43
+ buf[-- i] = cast (char )((x < 10 ) ? x + ' 0' : x - 10 + ' a' );
44
+ break ;
42
45
}
43
46
else
44
47
{
45
- x = cast (uint )(value % radix);
46
- value /= radix;
48
+ ubyte x = cast (ubyte )(value % radix);
49
+ value = value / radix;
50
+ buf[-- i] = cast (char )((x < 10 ) ? x + ' 0' : x - 10 + ' a' );
47
51
}
48
- buf[-- i] = cast (char )((radix <= 10 || x < 10 ) ? x + ' 0' : x - 10 + ' a' );
49
52
} while (value);
50
53
return buf[i .. $];
51
54
}
@@ -74,46 +77,46 @@ Params:
74
77
Returns:
75
78
The unsigned integer value as a string of characters
76
79
*/
77
- auto unsignedToTempString (uint radix = 10 )( ulong value ) @safe
80
+ auto unsignedToTempString ()( ulong value, uint radix = 10 ) @safe
78
81
{
79
82
TempStringNoAlloc! () result = void ;
80
- result._len = unsignedToTempString! radix (value, result._buf).length & 0xff ;
83
+ result._len = unsignedToTempString(value, result._buf, radix ).length & 0xff ;
81
84
return result;
82
85
}
83
86
84
87
unittest
85
88
{
86
89
UnsignedStringBuf buf;
87
- assert (0. unsignedToTempString(buf) == " 0" );
88
- assert (1. unsignedToTempString(buf) == " 1" );
89
- assert (12. unsignedToTempString(buf) == " 12" );
90
- assert (0x12ABCF .unsignedToTempString! 16 (buf) == " 12abcf" );
91
- assert (long .sizeof.unsignedToTempString(buf) == " 8" );
92
- assert (uint .max.unsignedToTempString(buf) == " 4294967295" );
93
- assert (ulong .max.unsignedToTempString(buf) == " 18446744073709551615" );
90
+ assert (0. unsignedToTempString(buf, 10 ) == " 0" );
91
+ assert (1. unsignedToTempString(buf, 10 ) == " 1" );
92
+ assert (12. unsignedToTempString(buf, 10 ) == " 12" );
93
+ assert (0x12ABCF .unsignedToTempString(buf, 16 ) == " 12abcf" );
94
+ assert (long .sizeof.unsignedToTempString(buf, 10 ) == " 8" );
95
+ assert (uint .max.unsignedToTempString(buf, 10 ) == " 4294967295" );
96
+ assert (ulong .max.unsignedToTempString(buf, 10 ) == " 18446744073709551615" );
94
97
95
98
// use stack allocated struct version
96
- assert (0. unsignedToTempString == " 0" );
99
+ assert (0. unsignedToTempString( 10 ) == " 0" );
97
100
assert (1. unsignedToTempString == " 1" );
98
101
assert (12. unsignedToTempString == " 12" );
99
- assert (0x12ABCF .unsignedToTempString! 16 == " 12abcf" );
102
+ assert (0x12ABCF .unsignedToTempString( 16 ) == " 12abcf" );
100
103
assert (long .sizeof.unsignedToTempString == " 8" );
101
104
assert (uint .max.unsignedToTempString == " 4294967295" );
102
105
assert (ulong .max.unsignedToTempString == " 18446744073709551615" );
103
106
104
107
// test bad radices
105
- assert (! is ( typeof ( 100. unsignedToTempString! 1 (buf))) );
106
- assert (! is ( typeof ( 100. unsignedToTempString! 0 (buf) == " " )) );
108
+ assert (100. unsignedToTempString(buf, 1 ) == " " );
109
+ assert (100. unsignedToTempString(buf, 0 ) == " " );
107
110
}
108
111
109
112
alias SignedStringBuf = char [20 ];
110
113
111
- char [] signedToTempString (uint radix = 10 )( long value, return scope char [] buf) @safe
114
+ char [] signedToTempString (long value, return scope char [] buf, uint radix = 10 ) @safe
112
115
{
113
116
bool neg = value < 0 ;
114
117
if (neg)
115
118
value = cast (ulong )- value;
116
- auto r = unsignedToTempString! radix (value, buf);
119
+ auto r = unsignedToTempString(value, buf, radix );
117
120
if (neg)
118
121
{
119
122
// about to do a slice without a bounds check
@@ -124,12 +127,12 @@ char[] signedToTempString(uint radix = 10)(long value, return scope char[] buf)
124
127
return r;
125
128
}
126
129
127
- auto signedToTempString (uint radix = 10 )( long value ) @safe
130
+ auto signedToTempString (long value, uint radix = 10 ) @safe
128
131
{
129
132
bool neg = value < 0 ;
130
133
if (neg)
131
134
value = cast (ulong )- value;
132
- auto r = unsignedToTempString! radix (value);
135
+ auto r = unsignedToTempString(value, radix );
133
136
if (neg)
134
137
{
135
138
r._len++ ;
@@ -141,34 +144,34 @@ auto signedToTempString(uint radix = 10)(long value) @safe
141
144
unittest
142
145
{
143
146
SignedStringBuf buf;
144
- assert (0. signedToTempString(buf) == " 0" );
147
+ assert (0. signedToTempString(buf, 10 ) == " 0" );
145
148
assert (1. signedToTempString(buf) == " 1" );
146
149
assert ((- 1 ).signedToTempString(buf) == " -1" );
147
150
assert (12. signedToTempString(buf) == " 12" );
148
151
assert ((- 12 ).signedToTempString(buf) == " -12" );
149
- assert (0x12ABCF .signedToTempString(buf) == " 12abcf" );
150
- assert ((- 0x12ABCF ) .signedToTempString(buf) == " -12abcf" );
152
+ assert (0x12ABCF .signedToTempString(buf, 16 ) == " 12abcf" );
153
+ assert ((- 0x12ABCF ) .signedToTempString(buf, 16 ) == " -12abcf" );
151
154
assert (long .sizeof.signedToTempString(buf) == " 8" );
152
155
assert (int .max.signedToTempString(buf) == " 2147483647" );
153
156
assert (int .min.signedToTempString(buf) == " -2147483648" );
154
157
assert (long .max.signedToTempString(buf) == " 9223372036854775807" );
155
158
assert (long .min.signedToTempString(buf) == " -9223372036854775808" );
156
159
157
160
// use stack allocated struct version
158
- assert (0. signedToTempString() == " 0" );
161
+ assert (0. signedToTempString(10 ) == " 0" );
159
162
assert (1. signedToTempString == " 1" );
160
163
assert ((- 1 ).signedToTempString == " -1" );
161
164
assert (12. signedToTempString == " 12" );
162
165
assert ((- 12 ).signedToTempString == " -12" );
163
- assert (0x12ABCF .signedToTempString! 16 == " 12abcf" );
164
- assert ((- 0x12ABCF ) .signedToTempString! 16 == " -12abcf" );
166
+ assert (0x12ABCF .signedToTempString( 16 ) == " 12abcf" );
167
+ assert ((- 0x12ABCF ) .signedToTempString( 16 ) == " -12abcf" );
165
168
assert (long .sizeof.signedToTempString == " 8" );
166
169
assert (int .max.signedToTempString == " 2147483647" );
167
170
assert (int .min.signedToTempString == " -2147483648" );
168
171
assert (long .max.signedToTempString == " 9223372036854775807" );
169
172
assert (long .min.signedToTempString == " -9223372036854775808" );
170
- assert (long .max.signedToTempString! 2 == " 111111111111111111111111111111111111111111111111111111111111111" );
171
- assert (long .min.signedToTempString! 2 == " -1000000000000000000000000000000000000000000000000000000000000000" );
173
+ assert (long .max.signedToTempString( 2 ) == " 111111111111111111111111111111111111111111111111111111111111111" );
174
+ assert (long .min.signedToTempString( 2 ) == " -1000000000000000000000000000000000000000000000000000000000000000" );
172
175
}
173
176
174
177
0 commit comments