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