@@ -146,25 +146,35 @@ size_t Print::print(unsigned int n, int base) {
146
146
}
147
147
148
148
size_t Print::print (long n, int base) {
149
- if (base == 0 ) {
150
- return write (n);
151
- } else if (base == 10 ) {
152
- if (n < 0 ) {
153
- int t = print (' -' );
154
- n = -n;
155
- return printNumber (n, 10 ) + t;
156
- }
157
- return printNumber (n, 10 );
158
- } else {
159
- return printNumber (n, base);
149
+ int t = 0 ;
150
+ if (base == 10 && n < 0 ) {
151
+ t = print (' -' );
152
+ n = -n;
160
153
}
154
+ return printNumber (static_cast <unsigned long >(n), base) + t;
161
155
}
162
156
163
157
size_t Print::print (unsigned long n, int base) {
164
- if (base == 0 )
158
+ if (base == 0 ) {
159
+ return write (n);
160
+ }
161
+ return printNumber (n, base);
162
+ }
163
+
164
+ size_t Print::print (long long n, int base) {
165
+ int t = 0 ;
166
+ if (base == 10 && n < 0 ) {
167
+ t = print (' -' );
168
+ n = -n;
169
+ }
170
+ return printNumber (static_cast <unsigned long long >(n), base) + t;
171
+ }
172
+
173
+ size_t Print::print (unsigned long long n, int base) {
174
+ if (base == 0 ) {
165
175
return write (n);
166
- else
167
- return printNumber (n, base);
176
+ }
177
+ return printNumber (n, base);
168
178
}
169
179
170
180
size_t Print::print (double n, int digits) {
@@ -233,6 +243,18 @@ size_t Print::println(unsigned long num, int base) {
233
243
return n;
234
244
}
235
245
246
+ size_t Print::println (long long num, int base) {
247
+ size_t n = print (num, base);
248
+ n += println ();
249
+ return n;
250
+ }
251
+
252
+ size_t Print::println (unsigned long long num, int base) {
253
+ size_t n = print (num, base);
254
+ n += println ();
255
+ return n;
256
+ }
257
+
236
258
size_t Print::println (double num, int digits) {
237
259
size_t n = print (num, digits);
238
260
n += println ();
@@ -258,9 +280,29 @@ size_t Print::printNumber(unsigned long n, uint8_t base) {
258
280
base = 10 ;
259
281
260
282
do {
261
- unsigned long m = n;
283
+ char c = n % base;
284
+ n /= base;
285
+
286
+ *--str = c < 10 ? c + ' 0' : c + ' A' - 10 ;
287
+ } while (n);
288
+
289
+ return write (str);
290
+ }
291
+
292
+ size_t Print::printNumber (unsigned long long n, uint8_t base) {
293
+ char buf[8 * sizeof (long long ) + 1 ]; // Assumes 8-bit chars plus zero byte.
294
+ char * str = &buf[sizeof (buf) - 1 ];
295
+
296
+ *str = ' \0 ' ;
297
+
298
+ // prevent crash if called with base == 1
299
+ if (base < 2 )
300
+ base = 10 ;
301
+
302
+ do {
303
+ char c = n % base;
262
304
n /= base;
263
- char c = m - base * n;
305
+
264
306
*--str = c < 10 ? c + ' 0' : c + ' A' - 10 ;
265
307
} while (n);
266
308
0 commit comments