IoAbstraction
PrintCompat.h
Go to the documentation of this file.
1 //
2 // Created by David Cherry on 24/07/2020.
3 //
4 
5 #ifndef IOA_PRINT_COMPAT_H
6 #define IOA_PRINT_COMPAT_H
7 
8 #include <cstdlib>
9 #include <TextUtilities.h>
10 #include <inttypes.h>
11 
17 #ifdef IOA_USE_ARDUINO
18 # error "Print compatibility has been included on Arduino, this will cause problems, please report."
19 #endif
20 
21 // These are definitions of the mode in which the integer print can work, either decimal, hex or binary.
22 #define DEC 10
23 #define HEX 16
24 #define BIN 2
25 
31 class Print {
32 public:
39  virtual size_t write(uint8_t ch) = 0;
40 
47  virtual size_t write(const char* sz) {
48  int written = 0;
49  while(*sz) {
50  write(*sz);
51  sz++;
52  written++;
53  }
54  return written;
55  }
56 
61  void print(char ch) {
62  write(ch);
63  }
64 
69  void println(char ch) {
70  write(ch);
71  write('\n');
72  }
73 
78  void print(const char* sz) { write(sz); }
79 
84  void println(const char* sz) {
85  write(sz);
86  write('\n');
87  }
88 
94  void print(int val, int radix = DEC) {
95  char sz[33];
96  itoa(val, sz, radix);
97  write(sz);
98  }
99 
106  void println(int val, int radix = DEC) {
107  print(val, radix);
108  write('\n');
109  }
110 
116  void print(unsigned int val, int radix = DEC) {
117  char sz[33];
118  itoa(int(val), sz, radix);
119  write(sz);
120  }
121 
128  void println(unsigned int val, int radix = DEC) {
129  print(int(val), radix);
130  write('\n');
131  }
132 
138  void print(long val, int radix = DEC) {
139  print((int)val, radix);
140  }
141 
148  void println(long val, int radix = DEC) {
149  print((int)val, radix);
150  write('\n');
151  }
152 
158  void print(unsigned long val, int radix = DEC) {
159  char sz[33];
160  itoa(int(val), sz, radix);
161  write(sz);
162  }
163 
169  void println(unsigned long val, int radix = DEC) {
170  print(val, radix);
171  write('\n');
172  }
173 
179  void print(double dbl, int dp = 3) {
180  char sz[32];
181  sz[0]=0;
182  fastftoa(sz, (float)dbl, dp, sizeof sz);
183  write(sz);
184  }
185 
192  void println(double dbl, int dp = 3) {
193  print(dbl, dp);
194  write('\n');
195  }
196 
201  void print(bool b) {
202  write(b ? "true" : "false");
203  }
204 
209  void println(bool b) {
210  write(b ? "true\n" : "false\n");
211  }
212 
216  void println() {
217  write('\n');
218  }
219 
220  //
221  // the following are to handle cases where write is called with basically an invalid type. I'd personally
222  // of liked not to port this, but too much code relies on it being there.
223  //
224 
225  inline size_t write(short t) { return write((uint8_t)t); }
226  inline size_t write(unsigned short t) { return write((uint8_t)t); }
227  inline size_t write(int t) { return write((uint8_t)t); }
228  inline size_t write(unsigned int t) { return write((uint8_t)t); }
229  inline size_t write(long t) { return write((uint8_t)t); }
230  inline size_t write(unsigned long t) { return write((uint8_t)t); }
231  // Enable write(char) to fall through to write(uint8_t)
232  inline size_t write(char c) { return write((uint8_t) c); }
233  inline size_t write(int8_t c) { return write((uint8_t) c); }
234 };
235 
236 //forward definition of yield() function
237 void yield();
238 
239 #endif //IOA_PRINT_COMPAT_H
A series of text and numeric utilities useful for many purposes.
void fastftoa(char *sz, float fl, int dp, int strSize)
Definition: TextUtilities.cpp:84
Definition: PrintCompat.h:31
void println(int val, int radix=DEC)
Definition: PrintCompat.h:106
virtual size_t write(const char *sz)
Definition: PrintCompat.h:47
void print(bool b)
Definition: PrintCompat.h:201
void print(char ch)
Definition: PrintCompat.h:61
void print(int val, int radix=DEC)
Definition: PrintCompat.h:94
void println(unsigned int val, int radix=DEC)
Definition: PrintCompat.h:128
void println()
Definition: PrintCompat.h:216
void print(unsigned int val, int radix=DEC)
Definition: PrintCompat.h:116
void print(long val, int radix=DEC)
Definition: PrintCompat.h:138
virtual size_t write(uint8_t ch)=0
void println(unsigned long val, int radix=DEC)
Definition: PrintCompat.h:169
void println(long val, int radix=DEC)
Definition: PrintCompat.h:148
void print(unsigned long val, int radix=DEC)
Definition: PrintCompat.h:158
void print(double dbl, int dp=3)
Definition: PrintCompat.h:179
void println(char ch)
Definition: PrintCompat.h:69
void println(double dbl, int dp=3)
Definition: PrintCompat.h:192
void print(const char *sz)
Definition: PrintCompat.h:78
void println(bool b)
Definition: PrintCompat.h:209
void println(const char *sz)
Definition: PrintCompat.h:84