http://mbed.org/users/shintamainjp/notebook/starboard_expbrd-one_ex1_en/
Dependencies: mbed RemoteIR SuperTweet ConfigFile EthernetNetIf
mylib/StreamFilter/StreamFilter.cpp@0:db299c5a18ba, 2010-10-29 (annotated)
- Committer:
- shintamainjp
- Date:
- Fri Oct 29 23:17:01 2010 +0000
- Revision:
- 0:db299c5a18ba
- Child:
- 1:c4cfd136f9c7
Initial version.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
shintamainjp | 0:db299c5a18ba | 1 | |
shintamainjp | 0:db299c5a18ba | 2 | #include "StreamFilter.h" |
shintamainjp | 0:db299c5a18ba | 3 | |
shintamainjp | 0:db299c5a18ba | 4 | /** |
shintamainjp | 0:db299c5a18ba | 5 | * Create. |
shintamainjp | 0:db299c5a18ba | 6 | * |
shintamainjp | 0:db299c5a18ba | 7 | * @param headtxt Head of a target. |
shintamainjp | 0:db299c5a18ba | 8 | * @param tailtxt Tail of a target. |
shintamainjp | 0:db299c5a18ba | 9 | */ |
shintamainjp | 0:db299c5a18ba | 10 | StreamFilter::StreamFilter(const char *headtxt, const char *tailtxt) |
shintamainjp | 0:db299c5a18ba | 11 | : headcnt(0), tailcnt(0), head(headtxt), tail(tailtxt), content("") { |
shintamainjp | 0:db299c5a18ba | 12 | } |
shintamainjp | 0:db299c5a18ba | 13 | |
shintamainjp | 0:db299c5a18ba | 14 | /** |
shintamainjp | 0:db299c5a18ba | 15 | * Dispose. |
shintamainjp | 0:db299c5a18ba | 16 | */ |
shintamainjp | 0:db299c5a18ba | 17 | StreamFilter::~StreamFilter() { |
shintamainjp | 0:db299c5a18ba | 18 | } |
shintamainjp | 0:db299c5a18ba | 19 | |
shintamainjp | 0:db299c5a18ba | 20 | /** |
shintamainjp | 0:db299c5a18ba | 21 | * Check state of done. |
shintamainjp | 0:db299c5a18ba | 22 | * |
shintamainjp | 0:db299c5a18ba | 23 | * @return Return true if it done. |
shintamainjp | 0:db299c5a18ba | 24 | */ |
shintamainjp | 0:db299c5a18ba | 25 | bool StreamFilter::done() { |
shintamainjp | 0:db299c5a18ba | 26 | if ((headcnt == strlen(head)) && (tailcnt == strlen(tail))) { |
shintamainjp | 0:db299c5a18ba | 27 | return true; |
shintamainjp | 0:db299c5a18ba | 28 | } |
shintamainjp | 0:db299c5a18ba | 29 | return false; |
shintamainjp | 0:db299c5a18ba | 30 | } |
shintamainjp | 0:db299c5a18ba | 31 | |
shintamainjp | 0:db299c5a18ba | 32 | /** |
shintamainjp | 0:db299c5a18ba | 33 | * Reset state. |
shintamainjp | 0:db299c5a18ba | 34 | */ |
shintamainjp | 0:db299c5a18ba | 35 | void StreamFilter::reset() { |
shintamainjp | 0:db299c5a18ba | 36 | headcnt = 0; |
shintamainjp | 0:db299c5a18ba | 37 | tailcnt = 0; |
shintamainjp | 0:db299c5a18ba | 38 | memset(content, 0, sizeof(content)); |
shintamainjp | 0:db299c5a18ba | 39 | } |
shintamainjp | 0:db299c5a18ba | 40 | |
shintamainjp | 0:db299c5a18ba | 41 | /** |
shintamainjp | 0:db299c5a18ba | 42 | * Push a data to a internal buffer. |
shintamainjp | 0:db299c5a18ba | 43 | * |
shintamainjp | 0:db299c5a18ba | 44 | * @param c character. |
shintamainjp | 0:db299c5a18ba | 45 | */ |
shintamainjp | 0:db299c5a18ba | 46 | void StreamFilter::push(char c) { |
shintamainjp | 0:db299c5a18ba | 47 | if (done()) { |
shintamainjp | 0:db299c5a18ba | 48 | return; |
shintamainjp | 0:db299c5a18ba | 49 | } |
shintamainjp | 0:db299c5a18ba | 50 | |
shintamainjp | 0:db299c5a18ba | 51 | /* |
shintamainjp | 0:db299c5a18ba | 52 | * Check a text for the header. |
shintamainjp | 0:db299c5a18ba | 53 | */ |
shintamainjp | 0:db299c5a18ba | 54 | if (headcnt < strlen(head)) { |
shintamainjp | 0:db299c5a18ba | 55 | if (c == head[headcnt]) { |
shintamainjp | 0:db299c5a18ba | 56 | headcnt++; |
shintamainjp | 0:db299c5a18ba | 57 | } else { |
shintamainjp | 0:db299c5a18ba | 58 | headcnt = 0; |
shintamainjp | 0:db299c5a18ba | 59 | } |
shintamainjp | 0:db299c5a18ba | 60 | return; |
shintamainjp | 0:db299c5a18ba | 61 | } |
shintamainjp | 0:db299c5a18ba | 62 | /* |
shintamainjp | 0:db299c5a18ba | 63 | * Check a text for the tailer. |
shintamainjp | 0:db299c5a18ba | 64 | */ |
shintamainjp | 0:db299c5a18ba | 65 | if (tailcnt < strlen(tail)) { |
shintamainjp | 0:db299c5a18ba | 66 | if (c == tail[tailcnt]) { |
shintamainjp | 0:db299c5a18ba | 67 | tailcnt++; |
shintamainjp | 0:db299c5a18ba | 68 | return; |
shintamainjp | 0:db299c5a18ba | 69 | } else { |
shintamainjp | 0:db299c5a18ba | 70 | tailcnt = 0; |
shintamainjp | 0:db299c5a18ba | 71 | } |
shintamainjp | 0:db299c5a18ba | 72 | } |
shintamainjp | 0:db299c5a18ba | 73 | /* |
shintamainjp | 0:db299c5a18ba | 74 | * It's a content. |
shintamainjp | 0:db299c5a18ba | 75 | */ |
shintamainjp | 0:db299c5a18ba | 76 | const int n = strlen(content); |
shintamainjp | 0:db299c5a18ba | 77 | if (n < sizeof(content) - 1) { |
shintamainjp | 0:db299c5a18ba | 78 | content[n + 0] = c; |
shintamainjp | 0:db299c5a18ba | 79 | content[n + 1] = '\0'; |
shintamainjp | 0:db299c5a18ba | 80 | } |
shintamainjp | 0:db299c5a18ba | 81 | } |
shintamainjp | 0:db299c5a18ba | 82 | |
shintamainjp | 0:db299c5a18ba | 83 | /** |
shintamainjp | 0:db299c5a18ba | 84 | * Get a content text. |
shintamainjp | 0:db299c5a18ba | 85 | * |
shintamainjp | 0:db299c5a18ba | 86 | * @param buf A pointer to a buffer. |
shintamainjp | 0:db299c5a18ba | 87 | * @param bufsiz Size of the buffer. |
shintamainjp | 0:db299c5a18ba | 88 | * |
shintamainjp | 0:db299c5a18ba | 89 | * @return true if it succeed. |
shintamainjp | 0:db299c5a18ba | 90 | */ |
shintamainjp | 0:db299c5a18ba | 91 | bool StreamFilter::getContent(char *buf, size_t bufsiz) { |
shintamainjp | 0:db299c5a18ba | 92 | if (strlen(content) < bufsiz) { |
shintamainjp | 0:db299c5a18ba | 93 | strcpy(buf, content); |
shintamainjp | 0:db299c5a18ba | 94 | return true; |
shintamainjp | 0:db299c5a18ba | 95 | } |
shintamainjp | 0:db299c5a18ba | 96 | return false; |
shintamainjp | 0:db299c5a18ba | 97 | } |