25 #ifndef ACE_SEGMENT_STRING_WRITER_H
26 #define ACE_SEGMENT_STRING_WRITER_H
29 #include <AceCommon.h>
30 #include "CharWriter.h"
32 class __FlashStringHelper;
34 namespace ace_segment {
44 template <
typename T_LED_MODULE>
53 T_LED_MODULE&
ledModule() {
return mCharWriter.ledModule(); }
57 return mCharWriter.patternWriter();
74 return writeStringInternalAt<const char*>(pos, cs, numChar);
85 const __FlashStringHelper* fs,
88 return writeStringInternalAt<ace_common::FlashString>(
89 pos, ace_common::FlashString(fs), numChar);
93 void clear() { mCharWriter.clear(); }
96 void clearToEnd(uint8_t pos) { mCharWriter.clearToEnd(pos); }
114 template <
typename T>
115 uint8_t writeStringInternalAt(uint8_t pos, T s, uint8_t numChar) {
116 const uint8_t numDigits = mCharWriter.getNumDigits();
117 const uint8_t originalPos = pos;
118 bool charWasWritten =
false;
122 if (c ==
'\0')
break;
123 if (pos >= numDigits)
break;
127 if (charWasWritten) {
128 mCharWriter.writeDecimalPointAt(pos - 1);
130 mCharWriter.writeCharAt(pos,
'.');
131 charWasWritten =
false;
135 mCharWriter.writeCharAt(pos, c);
136 charWasWritten =
true;
142 return pos - originalPos;
146 CharWriter<T_LED_MODULE>& mCharWriter;