From 7d8d20894c7420ad2fea81d80b66075806476179 Mon Sep 17 00:00:00 2001 From: "David A. Mellis" Date: Wed, 7 Sep 2011 18:41:05 -0400 Subject: [PATCH] Making Print::write(char *) non-virtual. http://code.google.com/p/arduino/issues/detail?id=607 --- hardware/arduino/cores/arduino/Client.h | 1 - hardware/arduino/cores/arduino/Print.cpp | 10 ---------- hardware/arduino/cores/arduino/Print.h | 2 +- hardware/arduino/cores/arduino/Server.h | 2 +- hardware/arduino/cores/arduino/Udp.h | 2 -- libraries/Ethernet/EthernetClient.cpp | 4 ---- libraries/Ethernet/EthernetClient.h | 3 ++- libraries/Ethernet/EthernetServer.cpp | 5 ----- libraries/Ethernet/EthernetServer.h | 2 +- libraries/Ethernet/EthernetUdp.cpp | 6 ------ libraries/Ethernet/EthernetUdp.h | 4 ++-- libraries/LiquidCrystal/LiquidCrystal.h | 2 ++ libraries/SD/File.cpp | 4 ---- libraries/SD/SD.h | 3 ++- libraries/SoftwareSerial/SoftwareSerial.h | 2 ++ libraries/Wire/Wire.cpp | 8 -------- libraries/Wire/Wire.h | 3 ++- 17 files changed, 15 insertions(+), 48 deletions(-) diff --git a/hardware/arduino/cores/arduino/Client.h b/hardware/arduino/cores/arduino/Client.h index ed9e9b48c..ea134838a 100644 --- a/hardware/arduino/cores/arduino/Client.h +++ b/hardware/arduino/cores/arduino/Client.h @@ -10,7 +10,6 @@ public: virtual int connect(IPAddress ip, uint16_t port) =0; virtual int connect(const char *host, uint16_t port) =0; virtual size_t write(uint8_t) =0; - virtual size_t write(const char *str) =0; virtual size_t write(const uint8_t *buf, size_t size) =0; virtual int available() = 0; virtual int read() = 0; diff --git a/hardware/arduino/cores/arduino/Print.cpp b/hardware/arduino/cores/arduino/Print.cpp index 8190d4fb4..500de8cf3 100755 --- a/hardware/arduino/cores/arduino/Print.cpp +++ b/hardware/arduino/cores/arduino/Print.cpp @@ -29,16 +29,6 @@ // Public Methods ////////////////////////////////////////////////////////////// -/* default implementation: may be overridden */ -size_t Print::write(const char *str) -{ - size_t n = 0; - while (*str) { - n += write(*str++); - } - return n; -} - /* default implementation: may be overridden */ size_t Print::write(const uint8_t *buffer, size_t size) { diff --git a/hardware/arduino/cores/arduino/Print.h b/hardware/arduino/cores/arduino/Print.h index 8530b0358..1af6b723f 100755 --- a/hardware/arduino/cores/arduino/Print.h +++ b/hardware/arduino/cores/arduino/Print.h @@ -46,7 +46,7 @@ class Print void clearWriteError() { setWriteError(0); } virtual size_t write(uint8_t) = 0; - virtual size_t write(const char *str); + size_t write(const char *str) { return write((const uint8_t *)str, strlen(str)); } virtual size_t write(const uint8_t *buffer, size_t size); size_t print(const __FlashStringHelper *); diff --git a/hardware/arduino/cores/arduino/Server.h b/hardware/arduino/cores/arduino/Server.h index edab726be..9674c7626 100644 --- a/hardware/arduino/cores/arduino/Server.h +++ b/hardware/arduino/cores/arduino/Server.h @@ -1,7 +1,7 @@ #ifndef server_h #define server_h -class Server { +class Server : public Print { public: virtual void begin() =0; }; diff --git a/hardware/arduino/cores/arduino/Udp.h b/hardware/arduino/cores/arduino/Udp.h index 1fb9cd3cf..dc5644b9d 100644 --- a/hardware/arduino/cores/arduino/Udp.h +++ b/hardware/arduino/cores/arduino/Udp.h @@ -57,8 +57,6 @@ public: virtual int endPacket() =0; // Write a single byte into the packet virtual size_t write(uint8_t) =0; - // Write a string of characters into the packet - virtual size_t write(const char *str) =0; // Write size bytes from buffer into the packet virtual size_t write(const uint8_t *buffer, size_t size) =0; diff --git a/libraries/Ethernet/EthernetClient.cpp b/libraries/Ethernet/EthernetClient.cpp index 42c2c6cc1..a77a62beb 100644 --- a/libraries/Ethernet/EthernetClient.cpp +++ b/libraries/Ethernet/EthernetClient.cpp @@ -74,10 +74,6 @@ size_t EthernetClient::write(uint8_t b) { return write(&b, 1); } -size_t EthernetClient::write(const char *str) { - return write((const uint8_t *) str, strlen(str)); -} - size_t EthernetClient::write(const uint8_t *buf, size_t size) { if (_sock == MAX_SOCK_NUM) { setWriteError(); diff --git a/libraries/Ethernet/EthernetClient.h b/libraries/Ethernet/EthernetClient.h index f68a3b4d9..44740fea7 100644 --- a/libraries/Ethernet/EthernetClient.h +++ b/libraries/Ethernet/EthernetClient.h @@ -15,7 +15,6 @@ public: virtual int connect(IPAddress ip, uint16_t port); virtual int connect(const char *host, uint16_t port); virtual size_t write(uint8_t); - virtual size_t write(const char *str); virtual size_t write(const uint8_t *buf, size_t size); virtual int available(); virtual int read(); @@ -27,6 +26,8 @@ public: virtual operator bool(); friend class EthernetServer; + + using Print::write; private: static uint16_t _srcport; diff --git a/libraries/Ethernet/EthernetServer.cpp b/libraries/Ethernet/EthernetServer.cpp index 9ae86f39e..3586dcb51 100644 --- a/libraries/Ethernet/EthernetServer.cpp +++ b/libraries/Ethernet/EthernetServer.cpp @@ -72,11 +72,6 @@ size_t EthernetServer::write(uint8_t b) write(&b, 1); } -size_t EthernetServer::write(const char *str) -{ - write((const uint8_t *)str, strlen(str)); -} - size_t EthernetServer::write(const uint8_t *buffer, size_t size) { size_t n = 0; diff --git a/libraries/Ethernet/EthernetServer.h b/libraries/Ethernet/EthernetServer.h index ced5ed649..86ccafe96 100644 --- a/libraries/Ethernet/EthernetServer.h +++ b/libraries/Ethernet/EthernetServer.h @@ -15,8 +15,8 @@ public: EthernetClient available(); virtual void begin(); virtual size_t write(uint8_t); - virtual size_t write(const char *str); virtual size_t write(const uint8_t *buf, size_t size); + using Print::write; }; #endif diff --git a/libraries/Ethernet/EthernetUdp.cpp b/libraries/Ethernet/EthernetUdp.cpp index 9ca650986..9c752fcb6 100644 --- a/libraries/Ethernet/EthernetUdp.cpp +++ b/libraries/Ethernet/EthernetUdp.cpp @@ -107,12 +107,6 @@ size_t EthernetUDP::write(uint8_t byte) return write(&byte, 1); } -size_t EthernetUDP::write(const char *str) -{ - size_t len = strlen(str); - return write((const uint8_t *)str, len); -} - size_t EthernetUDP::write(const uint8_t *buffer, size_t size) { uint16_t bytes_written = bufferData(_sock, _offset, buffer, size); diff --git a/libraries/Ethernet/EthernetUdp.h b/libraries/Ethernet/EthernetUdp.h index 64e30275f..9a2b653e6 100644 --- a/libraries/Ethernet/EthernetUdp.h +++ b/libraries/Ethernet/EthernetUdp.h @@ -67,10 +67,10 @@ public: virtual int endPacket(); // Write a single byte into the packet virtual size_t write(uint8_t); - // Write a string of characters into the packet - virtual size_t write(const char *str); // Write size bytes from buffer into the packet virtual size_t write(const uint8_t *buffer, size_t size); + + using Print::write; // Start processing the next available incoming packet // Returns the size of the packet in bytes, or 0 if no packets are available diff --git a/libraries/LiquidCrystal/LiquidCrystal.h b/libraries/LiquidCrystal/LiquidCrystal.h index f4352f341..24ec5afdf 100755 --- a/libraries/LiquidCrystal/LiquidCrystal.h +++ b/libraries/LiquidCrystal/LiquidCrystal.h @@ -81,6 +81,8 @@ public: void setCursor(uint8_t, uint8_t); virtual size_t write(uint8_t); void command(uint8_t); + + using Print::write; private: void send(uint8_t, uint8_t); void write4bits(uint8_t); diff --git a/libraries/SD/File.cpp b/libraries/SD/File.cpp index 21a057a38..1226f2cf4 100644 --- a/libraries/SD/File.cpp +++ b/libraries/SD/File.cpp @@ -62,10 +62,6 @@ size_t File::write(uint8_t val) { return write(&val, 1); } -size_t File::write(const char *str) { - return write((const uint8_t *) str, strlen(str)); -} - size_t File::write(const uint8_t *buf, size_t size) { size_t t; if (!_file) { diff --git a/libraries/SD/SD.h b/libraries/SD/SD.h index cd123edc6..b4e46ccce 100644 --- a/libraries/SD/SD.h +++ b/libraries/SD/SD.h @@ -33,7 +33,6 @@ public: File(void); // 'empty' constructor ~File(void); // destructor virtual size_t write(uint8_t); - virtual size_t write(const char *str); virtual size_t write(const uint8_t *buf, size_t size); virtual int read(); virtual int peek(); @@ -50,6 +49,8 @@ public: boolean isDirectory(void); File openNextFile(uint8_t mode = O_RDONLY); void rewindDirectory(void); + + using Print::write; }; class SDClass { diff --git a/libraries/SoftwareSerial/SoftwareSerial.h b/libraries/SoftwareSerial/SoftwareSerial.h index 67f76cfdc..a6a60b556 100755 --- a/libraries/SoftwareSerial/SoftwareSerial.h +++ b/libraries/SoftwareSerial/SoftwareSerial.h @@ -93,6 +93,8 @@ public: virtual int read(); virtual int available(); virtual void flush(); + + using Print::write; // public only for easy access by interrupt handlers static inline void handle_interrupt(); diff --git a/libraries/Wire/Wire.cpp b/libraries/Wire/Wire.cpp index 211d9c7ef..d83f4789e 100755 --- a/libraries/Wire/Wire.cpp +++ b/libraries/Wire/Wire.cpp @@ -164,14 +164,6 @@ size_t TwoWire::write(const uint8_t *data, size_t quantity) return quantity; } -// must be called in: -// slave tx event callback -// or after beginTransmission(address) -size_t TwoWire::write(const char *data) -{ - return write((uint8_t*)data, strlen(data)); -} - // must be called in: // slave rx event callback // or after requestFrom(address, numBytes) diff --git a/libraries/Wire/Wire.h b/libraries/Wire/Wire.h index 7f6ea67ad..23d466c19 100755 --- a/libraries/Wire/Wire.h +++ b/libraries/Wire/Wire.h @@ -53,7 +53,6 @@ class TwoWire : public Stream uint8_t requestFrom(uint8_t, uint8_t); uint8_t requestFrom(int, int); virtual size_t write(uint8_t); - virtual size_t write(const char *); virtual size_t write(const uint8_t *, size_t); virtual int available(void); virtual int read(void); @@ -61,6 +60,8 @@ class TwoWire : public Stream virtual void flush(void); void onReceive( void (*)(int) ); void onRequest( void (*)(void) ); + + using Print::write; }; extern TwoWire Wire;