@@ -41,66 +41,55 @@ size_t Print::write(const uint8_t *buffer, size_t size)
41
41
return n;
42
42
}
43
43
44
- size_t Print::doPrint ( const __FlashStringHelper *ifsh )
44
+ size_t Print::println ( void )
45
45
{
46
- PGM_P p = reinterpret_cast <PGM_P>(ifsh);
46
+ return write (" \r\n " );
47
+ }
48
+
49
+
50
+ size_t Formatters::DefaultFormatter::printTo (Print *p, const __FlashStringHelper *ifsh) const
51
+ {
52
+ PGM_P ptr = reinterpret_cast <PGM_P>(ifsh);
47
53
size_t n = 0 ;
48
54
while (1 ) {
49
- unsigned char c = pgm_read_byte (p ++);
55
+ unsigned char c = pgm_read_byte (ptr ++);
50
56
if (c == 0 ) break ;
51
- if (write (c)) n++;
57
+ if (p-> write (c)) n++;
52
58
else break ;
53
59
}
54
60
return n;
55
61
}
56
62
57
- size_t Print::doPrint ( const String &s)
63
+ size_t Formatters::DefaultFormatter::printTo (Print *p, const String &s) const
58
64
{
59
- return write (s.c_str (), s.length ());
65
+ return p-> write (s.c_str (), s.length ());
60
66
}
61
67
62
- size_t Print::doPrint ( signed long n, int base)
68
+ size_t Formatters::DefaultFormatter::printSignedNumber (Print *p, signed long n) const
63
69
{
64
- if (base == 0 ) {
65
- return write (n);
66
- } else if (base == 10 ) {
70
+ if (this ->base == 10 ) {
67
71
if (n < 0 ) {
68
- int t = print (' -' );
72
+ size_t t = p-> write (' -' );
69
73
n = -n;
70
- return printNumber (n, 10 ) + t;
74
+ return printNumber (p, n ) + t;
71
75
}
72
- return printNumber (n, 10 );
76
+ return printNumber (p, n );
73
77
} else {
74
- return printNumber (n, base );
78
+ return printNumber (p, n );
75
79
}
76
80
}
77
81
78
- size_t Print::doPrint (unsigned long n, int base)
79
- {
80
- if (base == 0 ) return write (n);
81
- else return printNumber (n, base);
82
- }
83
-
84
- size_t Print::doPrint (double n, int digits)
85
- {
86
- return printFloat (n, digits);
87
- }
88
-
89
- size_t Print::println (void )
90
- {
91
- return write (" \r\n " );
92
- }
93
-
94
82
// Private Methods /////////////////////////////////////////////////////////////
95
83
96
- size_t Print:: printNumber (unsigned long n, uint8_t base)
84
+ size_t Formatters::DefaultFormatter:: printNumber (Print *p , unsigned long n) const
97
85
{
98
86
char buf[8 * sizeof (long ) + 1 ]; // Assumes 8-bit chars plus zero byte.
99
87
char *str = &buf[sizeof (buf) - 1 ];
88
+ uint8_t base = this ->base ;
100
89
101
90
*str = ' \0 ' ;
102
91
103
- // prevent crash if called with base == 1
92
+ // prevent crash if called with base 0 or 1
104
93
if (base < 2 ) base = 10 ;
105
94
106
95
do {
@@ -110,22 +99,24 @@ size_t Print::printNumber(unsigned long n, uint8_t base)
110
99
*--str = c < 10 ? c + ' 0' : c + ' A' - 10 ;
111
100
} while (n);
112
101
113
- return write (str);
102
+ return p-> write (str);
114
103
}
115
104
116
- size_t Print:: printFloat (double number, uint8_t digits)
105
+ size_t Formatters::DefaultFormatter:: printFloat (Print *p, double number) const
117
106
{
118
107
size_t n = 0 ;
108
+ uint8_t digits = this ->precision ;
109
+ auto int_formatter = DefaultFormatter ();
119
110
120
- if (isnan (number)) return print (" nan" );
121
- if (isinf (number)) return print (" inf" );
122
- if (number > 4294967040.0 ) return print (" ovf" ); // constant determined empirically
123
- if (number <-4294967040.0 ) return print (" ovf" ); // constant determined empirically
111
+ if (isnan (number)) return p-> write (" nan" );
112
+ if (isinf (number)) return p-> write (" inf" );
113
+ if (number > 4294967040.0 ) return p-> write (" ovf" ); // constant determined empirically
114
+ if (number <-4294967040.0 ) return p-> write (" ovf" ); // constant determined empirically
124
115
125
116
// Handle negative numbers
126
117
if (number < 0.0 )
127
118
{
128
- n += print (' -' );
119
+ n += p-> write (' -' );
129
120
number = -number;
130
121
}
131
122
@@ -139,19 +130,19 @@ size_t Print::printFloat(double number, uint8_t digits)
139
130
// Extract the integer part of the number and print it
140
131
unsigned long int_part = (unsigned long )number;
141
132
double remainder = number - (double )int_part;
142
- n += print ( int_part);
133
+ n += int_formatter. printTo (p, int_part);
143
134
144
135
// Print the decimal point, but only if there are digits beyond
145
136
if (digits > 0 ) {
146
- n += print (' .' );
137
+ n += p-> write (' .' );
147
138
}
148
139
149
140
// Extract digits from the remainder one at a time
150
141
while (digits-- > 0 )
151
142
{
152
143
remainder *= 10.0 ;
153
144
unsigned int toPrint = (unsigned int )(remainder );
154
- n += print ( toPrint);
145
+ n += int_formatter. printTo (p, toPrint);
155
146
remainder -= toPrint;
156
147
}
157
148
0 commit comments