/
StringBuffer.h
87 lines (76 loc) · 1.86 KB
/
StringBuffer.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#ifndef StringBuffer_H
#define StringBuffer_H
#include "Arduino.h"
#define MAXSTRINGBUFFERCHARS 50
class StringBuffer
{
public:
StringBuffer () {
head = 0;
}
static char intToHex (int hex ) {
char ch;
if ((hex >=0) && (hex <= 9)) {
ch = hex + '0';
} else {
ch = hex + 'a' - 10;
}
return ch;
}
void clearBuffer () {
head = 0;
for (int i=0; i<MAXSTRINGBUFFERCHARS; i++ ) {
buf[i] = 0;
}
}
void update (char ch) {
if (ch) {
buf[head] = ch;
head = head + 1;
if (head == MAXSTRINGBUFFERCHARS) {
head = 0; // rollover
}
}
}
bool match (char * word) {
bool matched = false;
int start;
int charAt = strlen (word) - 1;
char ch;
bool debug = false;
if (head == 0) {
start = MAXSTRINGBUFFERCHARS - 1;
} else {
start = head -1;
}
while (!matched) {
if (buf[start] == word[charAt]) {
if (debug) {
Serial.print ( "Matching " );
Serial.print ( word );
Serial.print ( " got match at: " );
Serial.println ( charAt );
}
if (charAt == 0) {
matched = true;
clearBuffer();
break;
}
charAt = charAt - 1;
} else { // nomatch
break;
}
if (start == 0) {
start = MAXSTRINGBUFFERCHARS - 1;
} else {
start = start - 1;
}
}
return matched;
}
private:
int head;
char buf[MAXSTRINGBUFFERCHARS];
byte numStrings;
};
#endif