diff options
author | Michael Hope <michael.hope@linaro.org> | 2010-09-29 20:45:57 +1300 |
---|---|---|
committer | Michael Hope <michael.hope@linaro.org> | 2010-09-29 20:45:57 +1300 |
commit | 6fcd4cd306dbecf56f5b0b506a3c23762d1219fa (patch) | |
tree | 467125eca5a2e6706001cad8e09bc475e58a12d9 /wirish/Print.cpp | |
parent | 368e4fc1662c2594b2a0908900713a2555a3ed8e (diff) | |
parent | adde11b099ff5dad176e410279d21feac39d2c7e (diff) | |
download | librambutan-6fcd4cd306dbecf56f5b0b506a3c23762d1219fa.tar.gz librambutan-6fcd4cd306dbecf56f5b0b506a3c23762d1219fa.zip |
Merge remote branch 'upstream/master'
Diffstat (limited to 'wirish/Print.cpp')
-rw-r--r-- | wirish/Print.cpp | 307 |
1 files changed, 142 insertions, 165 deletions
diff --git a/wirish/Print.cpp b/wirish/Print.cpp index 9baa757..c66ca61 100644 --- a/wirish/Print.cpp +++ b/wirish/Print.cpp @@ -1,213 +1,190 @@ /* - Print.cpp - Base class that provides print() and println() - Copyright (c) 2008 David A. Mellis. All right reserved. - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - - Modified 23 November 2006 by David A. Mellis + * Print.cpp - Base class that provides print() and println() + * Copyright (c) 2008 David A. Mellis. All right reserved. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * as published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + * + * Modified 23 November 2006 by David A. Mellis */ #include "wirish.h" #include "Print.h" -// Public Methods ////////////////////////////////////////////////////////////// - -/* default implementation: may be overridden */ -void Print::write(const char *str) -{ - while (*str) - write(*str++); -} - -/* default implementation: may be overridden */ -void Print::write(void *buffer, uint32 size) -{ - uint8 *ch = (uint8*)buffer; - while (size--) { - write(*ch++); - } -} +//------------------------------ Public Methods ------------------------------- -void Print::print(uint8 b) -{ - this->write(b); +void Print::write(const char *str) { + while (*str) + write(*str++); } -void Print::print(char c) -{ - print((byte) c); +void Print::write(void *buffer, uint32 size) { + uint8 *ch = (uint8*)buffer; + while (size--) { + write(*ch++); + } } -void Print::print(const char str[]) -{ - write(str); +void Print::print(uint8 b) { + this->write(b); } -void Print::print(int n) -{ - print((long) n); +void Print::print(char c) { + print((byte) c); } -void Print::print(unsigned int n) -{ - print((unsigned long) n); +void Print::print(const char str[]) { + write(str); } -void Print::print(long n) -{ - if (n < 0) { - print('-'); - n = -n; - } - printNumber(n, 10); +void Print::print(int n) { + print((long) n); } -void Print::print(unsigned long n) -{ - printNumber(n, 10); +void Print::print(unsigned int n) { + print((unsigned long) n); } -void Print::print(long n, int base) -{ - if (base == 0) - print((char) n); - else if (base == 10) - print(n); - else - printNumber(n, base); +void Print::print(long n) { + if (n < 0) { + print('-'); + n = -n; + } + printNumber(n, 10); } -void Print::print(double n) -{ - printFloat(n, 2); +void Print::print(unsigned long n) { + printNumber(n, 10); } -void Print::println(void) -{ - print('\r'); - print('\n'); +void Print::print(long n, int base) { + if (base == 0) { + print((char) n); + } else if (base == 10) { + print(n); + } else { + printNumber(n, base); + } } -void Print::println(char c) -{ - print(c); - println(); +void Print::print(double n) { + printFloat(n, 2); } -void Print::println(const char c[]) -{ - print(c); - println(); +void Print::println(void) { + print('\r'); + print('\n'); } -void Print::println(uint8 b) -{ - print(b); - println(); +void Print::println(char c) { + print(c); + println(); } -void Print::println(int n) -{ - print(n); - println(); +void Print::println(const char c[]) { + print(c); + println(); } -void Print::println(unsigned int n) -{ - print(n); - println(); +void Print::println(uint8 b) { + print(b); + println(); } -void Print::println(long n) -{ - print(n); - println(); +void Print::println(int n) { + print(n); + println(); } -void Print::println(unsigned long n) -{ - print(n); - println(); +void Print::println(unsigned int n) { + print(n); + println(); } -void Print::println(long n, int base) -{ - print(n, base); - println(); +void Print::println(long n) { + print(n); + println(); } -void Print::println(double n) -{ - print(n); - println(); +void Print::println(unsigned long n) { + print(n); + println(); } -// Private Methods ///////////////////////////////////////////////////////////// - -void Print::printNumber(unsigned long n, uint8 base) -{ - unsigned char buf[8 * sizeof(long)]; // Assumes 8-bit chars. - unsigned long i = 0; - - if (n == 0) { - print('0'); - return; - } - - while (n > 0) { - buf[i++] = n % base; - n /= base; - } - - for (; i > 0; i--) - print((char) (buf[i - 1] < 10 ? - '0' + buf[i - 1] : - 'A' + buf[i - 1] - 10)); +void Print::println(long n, int base) { + print(n, base); + println(); } -void Print::printFloat(double number, uint8 digits) -{ - // Handle negative numbers - if (number < 0.0) - { - print('-'); - number = -number; - } - - // Round correctly so that print(1.999, 2) prints as "2.00" - double rounding = 0.5; - for (uint8 i=0; i<digits; ++i) - rounding /= 10.0; - - number += rounding; - - // Extract the integer part of the number and print it - unsigned long int_part = (unsigned long)number; - double remainder = number - (double)int_part; - print(int_part); - - // Print the decimal point, but only if there are digits beyond - if (digits > 0) - print("."); - - // Extract digits from the remainder one at a time - while (digits-- > 0) - { - remainder *= 10.0; - int toPrint = int(remainder); - print(toPrint); - remainder -= toPrint; - } +void Print::println(double n) { + print(n); + println(); +} + +//------------------------------ Private Methods ------------------------------ + +void Print::printNumber(unsigned long n, uint8 base) { + unsigned char buf[8 * sizeof(long)]; // Assumes 8-bit chars. + unsigned long i = 0; + + if (n == 0) { + print('0'); + return; + } + + while (n > 0) { + buf[i++] = n % base; + n /= base; + } + + for (; i > 0; i--) + print((char) (buf[i - 1] < 10 ? + '0' + buf[i - 1] : + 'A' + buf[i - 1] - 10)); +} + +void Print::printFloat(double number, uint8 digits) { + // Handle negative numbers + if (number < 0.0) { + print('-'); + number = -number; + } + + // Round correctly so that print(1.999, 2) prints as "2.00" + double rounding = 0.5; + for (uint8 i=0; i<digits; ++i) { + rounding /= 10.0; + } + + number += rounding; + + // Extract the integer part of the number and print it + unsigned long int_part = (unsigned long)number; + double remainder = number - (double)int_part; + print(int_part); + + // Print the decimal point, but only if there are digits beyond + if (digits > 0) { + print("."); + } + + // Extract digits from the remainder one at a time + while (digits-- > 0) { + remainder *= 10.0; + int toPrint = int(remainder); + print(toPrint); + remainder -= toPrint; + } } |