Merge branch 'new-extension' into platforms

This commit is contained in:
David A. Mellis 2011-06-25 11:40:12 -04:00
commit 7e1e9bfea2
6 changed files with 67 additions and 2 deletions

View File

@ -39,7 +39,7 @@ void loop() {
/*
SerialEvent occurs whenever a new byte comes in the
hardware serial RX. Don't do complex things here, as thge
hardware serial RX. Don't do complex things here, as the
processor halts the regular program to run this routine:
*/
void serialEvent() {

View File

@ -117,6 +117,11 @@ void Print::println(const __FlashStringHelper *ifsh)
println();
}
void Print::print(const Printable& x)
{
x.printTo(*this);
}
void Print::println(void)
{
print('\r');
@ -177,6 +182,12 @@ void Print::println(double n, int digits)
println();
}
void Print::println(const Printable& x)
{
print(x);
println();
}
// Private Methods /////////////////////////////////////////////////////////////
void Print::printNumber(unsigned long n, uint8_t base) {

View File

@ -24,6 +24,7 @@
#include <stdio.h> // for size_t
#include "WString.h"
#include "Printable.h"
#define DEC 10
#define HEX 16
@ -50,6 +51,7 @@ class Print
void print(long, int = DEC);
void print(unsigned long, int = DEC);
void print(double, int = 2);
void print(const Printable&);
void println(const __FlashStringHelper *);
void println(const String &s);
@ -61,6 +63,7 @@ class Print
void println(long, int = DEC);
void println(unsigned long, int = DEC);
void println(double, int = 2);
void println(const Printable&);
void println(void);
};

View File

@ -0,0 +1,37 @@
/*
Printable.h - Interface class that allows printing of complex types
Copyright (c) 2011 Adrian McEwen. 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
*/
#ifndef Printable_h
#define Printable_h
class Print;
/** The Printable class provides a way for new classes to allow themselves to be printed.
By deriving from Printable and implementing the printTo method, it will then be possible
for users to print out instances of this class by passing them into the usual
Print::print and Print::println methods.
*/
class Printable
{
public:
virtual void printTo(Print& p) const = 0;
};
#endif

View File

@ -42,3 +42,13 @@ bool IPAddress::operator==(const uint8_t* addr)
return memcmp(addr, _address, sizeof(_address)) == 0;
}
void IPAddress::printTo(Print& p) const
{
for (int i =0; i < 3; i++)
{
p.print(_address[i], DEC);
p.print('.');
}
p.print(_address[3], DEC);
}

View File

@ -26,9 +26,11 @@
#ifndef IPAddress_h
#define IPAddress_h
#include <Printable.h>
// A class to make it easier to handle and pass around IP addresses
class IPAddress {
class IPAddress : public Printable {
private:
uint8_t _address[4]; // IPv4 address
// Access the raw byte array containing the address. Because this returns a pointer
@ -58,6 +60,8 @@ public:
IPAddress& operator=(const uint8_t *address);
IPAddress& operator=(uint32_t address);
virtual void printTo(Print& p) const;
friend class EthernetClass;
friend class UDP;
friend class Client;