Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Added Printable interface class to allow printing of classes such as …

…IPAddress
  • Loading branch information...
commit 3540d92eb2a8066eb4e8553f6eb72bd632335411 1 parent 7f18110
Adrian McEwen authored
11 hardware/arduino/cores/arduino/Print.cpp
View
@@ -101,6 +101,11 @@ void Print::print(double n, int digits)
printFloat(n, digits);
}
+void Print::print(const Printable& x)
+{
+ x.printTo(*this);
+}
+
void Print::println(void)
{
print('\r');
@@ -161,6 +166,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)
3  hardware/arduino/cores/arduino/Print.h
View
@@ -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 String &s);
void println(const char[]);
@@ -60,6 +62,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);
};
32 hardware/arduino/cores/arduino/Printable.h
View
@@ -0,0 +1,32 @@
+/*
+ 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;
+
+class Printable
+{
+ public:
+ virtual void printTo(Print& p) const =0;
+};
+
+#endif
+
10 libraries/Ethernet/IPAddress.cpp
View
@@ -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);
+}
+
6 libraries/Ethernet/IPAddress.h
View
@@ -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 @@ class IPAddress {
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;
Please sign in to comment.
Something went wrong with that request. Please try again.