1 #ifndef LIBPROPELLER_PRINTSTREAM_H_
2 #define LIBPROPELLER_PRINTSTREAM_H_
4 #include "libpropeller/numbers/numbers.h"
5 #include "libpropeller/streaminterface/streaminterface.h"
11 template<
class OutputType>
61 int Format(
const char * formatString, ...) {
63 va_start(list, formatString);
64 int result =
Format(formatString, list);
78 int Format(
const char * formatString, va_list list) {
79 if (formatString == NULL) {
85 for (
int stringIndex = 0; formatString[stringIndex] != 0; stringIndex++) {
87 if (formatString[stringIndex] ==
'%') {
93 if (formatString[stringIndex] ==
'0') {
97 if (formatString[stringIndex] >=
'1' and formatString[stringIndex] <=
'9') {
98 char paddingBuffer[5];
119 while (formatString[stringIndex] >=
'0' and formatString[stringIndex] <=
'9') {
120 paddingBuffer[paddingIndex++] = formatString[stringIndex];
124 paddingBuffer[paddingIndex] = 0;
136 if (formatString[stringIndex] == 0) {
140 if (formatString[stringIndex] ==
'd' || formatString[stringIndex] ==
'i') {
141 int number = va_arg(list,
int);
144 if (padZero ==
true) {
147 for (
int i = padAmount - digits; i > 0; --i) {
157 bytesWritten += digits;
158 }
else if (formatString[stringIndex] ==
'x' || formatString[stringIndex] ==
'X') {
159 int number = va_arg(list,
int);
162 for (
int i = padAmount - digits; i > 0; --i) {
172 bytesWritten += digits;
173 }
else if (formatString[stringIndex] ==
'c') {
174 char character = (
char) (va_arg(list,
int));
177 }
else if (formatString[stringIndex] ==
's') {
178 char *
string = (
char *) (va_arg(list,
int));
179 while (*
string != 0) {
183 }
else if (formatString[stringIndex] ==
'%') {
189 os->Put(formatString[stringIndex]);
200 #endif // LIBPROPELLER_PRINTSTREAM_H_