]>
git.gir.st - tmk_keyboard.git/blob - tmk_core/protocol/usb_hid/arduino-1.0.1/cores/arduino/Print.cpp
2 Print.cpp - Base class that provides print() and println()
3 Copyright (c) 2008 David A. Mellis. All right reserved.
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with this library; if not, write to the Free Software
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 Modified 23 November 2006 by David A. Mellis
30 // Public Methods //////////////////////////////////////////////////////////////
32 /* default implementation: may be overridden */
33 size_t Print::write(const uint8_t *buffer
, size_t size
)
37 n
+= write(*buffer
++);
42 size_t Print::print(const __FlashStringHelper
*ifsh
)
44 const char PROGMEM
*p
= (const char PROGMEM
*)ifsh
;
47 unsigned char c
= pgm_read_byte(p
++);
54 size_t Print::print(const String
&s
)
57 for (uint16_t i
= 0; i
< s
.length(); i
++) {
63 size_t Print::print(const char str
[])
68 size_t Print::print(char c
)
73 size_t Print::print(unsigned char b
, int base
)
75 return print((unsigned long) b
, base
);
78 size_t Print::print(int n
, int base
)
80 return print((long) n
, base
);
83 size_t Print::print(unsigned int n
, int base
)
85 return print((unsigned long) n
, base
);
88 size_t Print::print(long n
, int base
)
92 } else if (base
== 10) {
96 return printNumber(n
, 10) + t
;
98 return printNumber(n
, 10);
100 return printNumber(n
, base
);
104 size_t Print::print(unsigned long n
, int base
)
106 if (base
== 0) return write(n
);
107 else return printNumber(n
, base
);
110 size_t Print::print(double n
, int digits
)
112 return printFloat(n
, digits
);
115 size_t Print::println(const __FlashStringHelper
*ifsh
)
117 size_t n
= print(ifsh
);
122 size_t Print::print(const Printable
& x
)
124 return x
.printTo(*this);
127 size_t Print::println(void)
129 size_t n
= print('\r');
134 size_t Print::println(const String
&s
)
141 size_t Print::println(const char c
[])
148 size_t Print::println(char c
)
155 size_t Print::println(unsigned char b
, int base
)
157 size_t n
= print(b
, base
);
162 size_t Print::println(int num
, int base
)
164 size_t n
= print(num
, base
);
169 size_t Print::println(unsigned int num
, int base
)
171 size_t n
= print(num
, base
);
176 size_t Print::println(long num
, int base
)
178 size_t n
= print(num
, base
);
183 size_t Print::println(unsigned long num
, int base
)
185 size_t n
= print(num
, base
);
190 size_t Print::println(double num
, int digits
)
192 size_t n
= print(num
, digits
);
197 size_t Print::println(const Printable
& x
)
204 // Private Methods /////////////////////////////////////////////////////////////
206 size_t Print::printNumber(unsigned long n
, uint8_t base
) {
207 char buf
[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte.
208 char *str
= &buf
[sizeof(buf
) - 1];
212 // prevent crash if called with base == 1
213 if (base
< 2) base
= 10;
218 char c
= m
- base
* n
;
219 *--str
= c
< 10 ? c
+ '0' : c
+ 'A' - 10;
225 size_t Print::printFloat(double number
, uint8_t digits
)
229 // Handle negative numbers
236 // Round correctly so that print(1.999, 2) prints as "2.00"
237 double rounding
= 0.5;
238 for (uint8_t i
=0; i
<digits
; ++i
)
243 // Extract the integer part of the number and print it
244 unsigned long int_part
= (unsigned long)number
;
245 double remainder
= number
- (double)int_part
;
246 n
+= print(int_part
);
248 // Print the decimal point, but only if there are digits beyond
253 // Extract digits from the remainder one at a time
257 int toPrint
= int(remainder
);
259 remainder
-= toPrint
;