@@ -178,7 +178,7 @@ size_t Print::print(unsigned long long n, int base) {
178178}
179179
180180size_t Print::print (double n, int digits) {
181- return printFloat (n, digits);
181+ return printNumber (n, digits);
182182}
183183
184184size_t Print::print (const Printable& x) {
@@ -243,29 +243,14 @@ size_t Print::println(const Printable& x) {
243243
244244// Private Methods /////////////////////////////////////////////////////////////
245245
246- size_t Print::printNumber (unsigned long n, uint8_t base) {
247- char buf[8 * sizeof (n) + 1 ]; // Assumes 8-bit chars plus zero byte.
248- char *str = &buf[sizeof (buf) - 1 ];
249-
250- *str = ' \0 ' ;
251-
252- // prevent crash if called with base == 1
253- if (base < 2 ) {
254- base = 10 ;
255- }
256-
257- do {
258- auto m = n;
259- n /= base;
260- char c = m - base * n;
261-
262- *--str = c < 10 ? c + ' 0' : c + ' A' - 10 ;
263- } while (n);
264-
265- return write (str);
266- }
246+ template <typename T, typename ... P> inline size_t Print::_println (T v, P... args)
247+ {
248+ size_t n = print (v, args...);
249+ n += println ();
250+ return n;
251+ };
267252
268- size_t Print::printNumber (unsigned long long n, uint8_t base) {
253+ template < typename T> size_t Print::printNumber (T n, uint8_t base) {
269254 char buf[8 * sizeof (n) + 1 ]; // Assumes 8-bit chars plus zero byte.
270255 char * str = &buf[sizeof (buf) - 1 ];
271256
@@ -287,7 +272,7 @@ size_t Print::printNumber(unsigned long long n, uint8_t base) {
287272 return write (str);
288273}
289274
290- size_t Print::printFloat (double number, uint8_t digits) {
275+ template <> size_t Print::printNumber (double number, uint8_t digits) {
291276 char buf[40 ];
292277 return write (dtostrf (number, 0 , digits, buf));
293278}
0 commit comments