summaryrefslogtreecommitdiff
path: root/include/object
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2017-12-08 15:07:52 +0100
committerDaniel Friesel <derf@finalrewind.org>2017-12-08 15:07:52 +0100
commitdcf84169ae75b11c1656d45dbc6c626d93da6a10 (patch)
treed78ad84e6aba1f5f13037e40141013f3a3061d54 /include/object
parent56f2d90751f1c1b2db925da215a14721cf18d483 (diff)
Add output support (broken on esp8266)
Diffstat (limited to 'include/object')
-rw-r--r--include/object/outputstream.h65
1 files changed, 65 insertions, 0 deletions
diff --git a/include/object/outputstream.h b/include/object/outputstream.h
new file mode 100644
index 0000000..43e61f3
--- /dev/null
+++ b/include/object/outputstream.h
@@ -0,0 +1,65 @@
+#ifndef OUTPUTSTREAM_H
+#define OUTPUTSTREAM_H
+
+#include <stdint.h>
+
+class OutputStream {
+ private:
+ OutputStream(const OutputStream& copy);
+
+ char digit_buffer[sizeof(long long) * 8];
+ uint8_t base;
+
+ public:
+ OutputStream();
+
+ virtual void put(char c) = 0;
+
+ virtual void write(const char *s) {
+ while (*s) {
+ put(*s++);
+ }
+ }
+
+ virtual void flush() {}
+
+ OutputStream & operator<<(char c);
+ OutputStream & operator<<(unsigned char c);
+ OutputStream & operator<<(unsigned short number);
+ OutputStream & operator<<(short number);
+ OutputStream & operator<<(unsigned int number);
+ OutputStream & operator<<(int number);
+ OutputStream & operator<<(unsigned long number);
+ OutputStream & operator<<(long number);
+ OutputStream & operator<<(unsigned long long number);
+ OutputStream & operator<<(long long number);
+ OutputStream & operator<<(void *pointer);
+ OutputStream & operator<<(const char *text);
+ OutputStream & operator<<(OutputStream & (*fun) (OutputStream &));
+
+ void setBase(uint8_t b);
+};
+
+
+// ENDL: new line character (and flush)
+OutputStream & endl(OutputStream & os);
+
+// BIN: print numbers in binary form.
+OutputStream & bin(OutputStream & os);
+
+// OCT: print numbers in octal form.
+OutputStream & oct(OutputStream & os);
+
+// DEC: print numbers in decimal form.
+OutputStream & dec(OutputStream & os);
+
+// HEX: print numbers in hexadecimal form.
+OutputStream & hex(OutputStream & os);
+
+// FLUSH: flush OutputStream buffer
+OutputStream & flush(OutputStream & os);
+
+// TERM: zero-termination
+OutputStream & term(OutputStream & os);
+
+#endif //OUTPUTSTREAM_H