1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-08-01 03:47:23 +03:00

Making Print::write(char *) non-virtual.

http://code.google.com/p/arduino/issues/detail?id=607
This commit is contained in:
David A. Mellis
2011-09-07 18:41:05 -04:00
parent 3cbbb17e9f
commit 7d8d20894c
17 changed files with 15 additions and 48 deletions

View File

@ -10,7 +10,6 @@ public:
virtual int connect(IPAddress ip, uint16_t port) =0; virtual int connect(IPAddress ip, uint16_t port) =0;
virtual int connect(const char *host, 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(uint8_t) =0;
virtual size_t write(const char *str) =0;
virtual size_t write(const uint8_t *buf, size_t size) =0; virtual size_t write(const uint8_t *buf, size_t size) =0;
virtual int available() = 0; virtual int available() = 0;
virtual int read() = 0; virtual int read() = 0;

View File

@ -29,16 +29,6 @@
// Public Methods ////////////////////////////////////////////////////////////// // 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 */ /* default implementation: may be overridden */
size_t Print::write(const uint8_t *buffer, size_t size) size_t Print::write(const uint8_t *buffer, size_t size)
{ {

View File

@ -46,7 +46,7 @@ class Print
void clearWriteError() { setWriteError(0); } void clearWriteError() { setWriteError(0); }
virtual size_t write(uint8_t) = 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); virtual size_t write(const uint8_t *buffer, size_t size);
size_t print(const __FlashStringHelper *); size_t print(const __FlashStringHelper *);

View File

@ -1,7 +1,7 @@
#ifndef server_h #ifndef server_h
#define server_h #define server_h
class Server { class Server : public Print {
public: public:
virtual void begin() =0; virtual void begin() =0;
}; };

View File

@ -57,8 +57,6 @@ public:
virtual int endPacket() =0; virtual int endPacket() =0;
// Write a single byte into the packet // Write a single byte into the packet
virtual size_t write(uint8_t) =0; 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 // Write size bytes from buffer into the packet
virtual size_t write(const uint8_t *buffer, size_t size) =0; virtual size_t write(const uint8_t *buffer, size_t size) =0;

View File

@ -74,10 +74,6 @@ size_t EthernetClient::write(uint8_t b) {
return write(&b, 1); 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) { size_t EthernetClient::write(const uint8_t *buf, size_t size) {
if (_sock == MAX_SOCK_NUM) { if (_sock == MAX_SOCK_NUM) {
setWriteError(); setWriteError();

View File

@ -15,7 +15,6 @@ public:
virtual int connect(IPAddress ip, uint16_t port); virtual int connect(IPAddress ip, uint16_t port);
virtual int connect(const char *host, uint16_t port); virtual int connect(const char *host, uint16_t port);
virtual size_t write(uint8_t); 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 size_t write(const uint8_t *buf, size_t size);
virtual int available(); virtual int available();
virtual int read(); virtual int read();
@ -28,6 +27,8 @@ public:
friend class EthernetServer; friend class EthernetServer;
using Print::write;
private: private:
static uint16_t _srcport; static uint16_t _srcport;
uint8_t _sock; uint8_t _sock;

View File

@ -72,11 +72,6 @@ size_t EthernetServer::write(uint8_t b)
write(&b, 1); 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 EthernetServer::write(const uint8_t *buffer, size_t size)
{ {
size_t n = 0; size_t n = 0;

View File

@ -15,8 +15,8 @@ public:
EthernetClient available(); EthernetClient available();
virtual void begin(); virtual void begin();
virtual size_t write(uint8_t); 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 size_t write(const uint8_t *buf, size_t size);
using Print::write;
}; };
#endif #endif

View File

@ -107,12 +107,6 @@ size_t EthernetUDP::write(uint8_t byte)
return write(&byte, 1); 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) size_t EthernetUDP::write(const uint8_t *buffer, size_t size)
{ {
uint16_t bytes_written = bufferData(_sock, _offset, buffer, size); uint16_t bytes_written = bufferData(_sock, _offset, buffer, size);

View File

@ -67,11 +67,11 @@ public:
virtual int endPacket(); virtual int endPacket();
// Write a single byte into the packet // Write a single byte into the packet
virtual size_t write(uint8_t); 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 // Write size bytes from buffer into the packet
virtual size_t write(const uint8_t *buffer, size_t size); virtual size_t write(const uint8_t *buffer, size_t size);
using Print::write;
// Start processing the next available incoming packet // Start processing the next available incoming packet
// Returns the size of the packet in bytes, or 0 if no packets are available // Returns the size of the packet in bytes, or 0 if no packets are available
virtual int parsePacket(); virtual int parsePacket();

View File

@ -81,6 +81,8 @@ public:
void setCursor(uint8_t, uint8_t); void setCursor(uint8_t, uint8_t);
virtual size_t write(uint8_t); virtual size_t write(uint8_t);
void command(uint8_t); void command(uint8_t);
using Print::write;
private: private:
void send(uint8_t, uint8_t); void send(uint8_t, uint8_t);
void write4bits(uint8_t); void write4bits(uint8_t);

View File

@ -62,10 +62,6 @@ size_t File::write(uint8_t val) {
return write(&val, 1); 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 File::write(const uint8_t *buf, size_t size) {
size_t t; size_t t;
if (!_file) { if (!_file) {

View File

@ -33,7 +33,6 @@ public:
File(void); // 'empty' constructor File(void); // 'empty' constructor
~File(void); // destructor ~File(void); // destructor
virtual size_t write(uint8_t); 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 size_t write(const uint8_t *buf, size_t size);
virtual int read(); virtual int read();
virtual int peek(); virtual int peek();
@ -50,6 +49,8 @@ public:
boolean isDirectory(void); boolean isDirectory(void);
File openNextFile(uint8_t mode = O_RDONLY); File openNextFile(uint8_t mode = O_RDONLY);
void rewindDirectory(void); void rewindDirectory(void);
using Print::write;
}; };
class SDClass { class SDClass {

View File

@ -94,6 +94,8 @@ public:
virtual int available(); virtual int available();
virtual void flush(); virtual void flush();
using Print::write;
// public only for easy access by interrupt handlers // public only for easy access by interrupt handlers
static inline void handle_interrupt(); static inline void handle_interrupt();
}; };

View File

@ -164,14 +164,6 @@ size_t TwoWire::write(const uint8_t *data, size_t quantity)
return 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: // must be called in:
// slave rx event callback // slave rx event callback
// or after requestFrom(address, numBytes) // or after requestFrom(address, numBytes)

View File

@ -53,7 +53,6 @@ class TwoWire : public Stream
uint8_t requestFrom(uint8_t, uint8_t); uint8_t requestFrom(uint8_t, uint8_t);
uint8_t requestFrom(int, int); uint8_t requestFrom(int, int);
virtual size_t write(uint8_t); virtual size_t write(uint8_t);
virtual size_t write(const char *);
virtual size_t write(const uint8_t *, size_t); virtual size_t write(const uint8_t *, size_t);
virtual int available(void); virtual int available(void);
virtual int read(void); virtual int read(void);
@ -61,6 +60,8 @@ class TwoWire : public Stream
virtual void flush(void); virtual void flush(void);
void onReceive( void (*)(int) ); void onReceive( void (*)(int) );
void onRequest( void (*)(void) ); void onRequest( void (*)(void) );
using Print::write;
}; };
extern TwoWire Wire; extern TwoWire Wire;