Printable interface

feature/UrlUtils
Kenneth Barbour 2018-03-09 20:30:28 -05:00 committed by Kenneth Barbour
parent 31513b6310
commit 9196e4c40a
3 changed files with 91 additions and 0 deletions

View File

@ -9,3 +9,70 @@ size_t Print::write(const uint8_t *buffer, size_t size)
}
return n;
}
size_t Print::print(int i)
{
size_t len = 0;
if (i < 0) len += print('-');
i = (unsigned int) i << 1;
i = (unsigned int) i >> 1;
len += printNumber(i, 10);
}
size_t Print::print(const Printable& x)
{
return x.printTo(*this);
}
size_t Print::println(void)
{
return write("\r\n");
}
size_t Print::println(const char* str)
{
size_t n = print(str);
n += println();
return n;
}
size_t Print::println(char c)
{
size_t n = print(c);
n += println();
return n;
}
size_t Print::println(int i)
{
size_t n = print(i);
n += println();
return n;
}
size_t Print::println(const Printable& x)
{
size_t n = x.printTo(*this);
n += println();
return n;
}
size_t Print::printNumber(unsigned long n, uint8_t base)
{
char buf[8 * sizeof(long) + 1]; // Assumes 8-bit chars plus zero byte.
char *str = &buf[sizeof(buf) - 1];
*str = '\0';
// prevent crash if called with base == 1
if (base < 2) base = 10;
do {
char c = n % base;
n /= base;
*--str = c < 10 ? c + '0' : c + 'A' - 10;
} while(n);
return write(str);
}

View File

@ -2,6 +2,7 @@
#include "stdlib.h"
#include "stdint.h"
#include "string.h"
#include "Printable.h"
class Print
{
@ -19,4 +20,17 @@ class Print
virtual int availableForWrite() { return 0; }
virtual void flush() {}
size_t print(const char* str) { return write(str); }
size_t print(char c ) { return write(c); }
size_t print(int);
size_t print(const Printable&);
size_t println(void);
size_t println(const char* );
size_t println(char);
size_t println(int);
size_t println(const Printable&);
size_t printNumber(unsigned long n, uint8_t base);
};

10
test/Printable.h 100644
View File

@ -0,0 +1,10 @@
#pragma once
#include <stdlib.h>
class Print;
class Printable {
public:
virtual size_t printTo(Print& p) const = 0;
};