AGirs
Tokenizer.cpp
Go to the documentation of this file.
1 #include <Arduino.h>
2 #include "Tokenizer.h"
3 
4 #ifdef ARDUINO
5 #define TOKEN2INT(tok) tok.toInt()
6 #else
7 #include <stdexcept>
8 
9 // Emulate Arduino moron-ness (returning 0 in the case of parse error...),
10 // although it hurts...
11 int TOKEN2INT(const String& tok) {
12  try {
13  return std::stoi(tok);
14  } catch (std::invalid_argument& ex) {
15  //std::cout << "Exception caugth!" << std::endl;
16  return 0;
17  }
18 }
19 #endif
20 
21 Tokenizer::Tokenizer(const String& str) : index(0), payload(str) {
22  trim();
23 }
24 
25 //Tokenizer::Tokenizer(const char *str) : index(0),payload(String(str)) {
26 // trim();
27 //}
28 
29 void Tokenizer::trim() {
30 #if 0
31 #ifdef ARDUINO
32  payload.trim();
33 #else
34  payload.erase(0, payload.find_first_not_of(" \t\n\r"));
35  payload.erase(payload.find_last_not_of(" \t\n\r")+1, payload.length() - payload.find_last_not_of(" \t\n\r"));
36 #endif
37 #endif
38 };
39 
41 }
42 
44  String result = index == invalidIndex ? String("") :
45 #ifdef ARDUINO
46  payload.substring(index);
47 #else
48  payload.substr(index);
49 #endif
50  index = invalidIndex;
51  return result;
52 }
53 
55  if (index == invalidIndex)
56  return String("");
57 
58  int i = payload.indexOf('\n', index);
59  String s = (i > 0) ?
60 #ifdef ARDUINO
61  payload.substring(index, i) : payload.substring(index);
62 #else
63  payload.substr(index, i - index) : payload.substr(index);
64 #endif
65  index = (i > 0) ? i+1 : invalidIndex;
66  return s;
67 }
68 
70  if (index < 0)
71  return String("");
72 
73  int i = payload.indexOf(' ', index);
74  String s = (i > 0) ?
75 #ifdef ARDUINO
76  payload.substring(index, i) : payload.substring(index);
77 #else
78  payload.substr(index, i-index) : payload.substr(index);
79 #endif
80  index = (i > 0) ? i : invalidIndex;
81  if (index != invalidIndex)
82  while (payload.charAt(index) == ' ')
83  index++;
84  return s;
85 }
86 
88  String token = getToken();
89  return token == "" ? (long) invalid : TOKEN2INT(token);
90 }
91 
92 microseconds_t Tokenizer::getMicroseconds() {
93  long t = TOKEN2INT(getToken());
94  return (microseconds_t) ((t < MICROSECONDS_T_MAX) ? t : MICROSECONDS_T_MAX);
95 }
96 
97 frequency_t Tokenizer::getFrequency() {
98  long t = TOKEN2INT(getToken());
99  return (frequency_t) t;
100 }
microseconds_t getMicroseconds()
Definition: Tokenizer.cpp:92
Tokenizer(const String &str)
Definition: Tokenizer.cpp:21
String getRest()
Definition: Tokenizer.cpp:43
static const int invalid
Definition: Tokenizer.h:26
#define TOKEN2INT(tok)
Definition: Tokenizer.cpp:5
frequency_t getFrequency()
Definition: Tokenizer.cpp:97
String getToken()
Definition: Tokenizer.cpp:69
long getInt()
Definition: Tokenizer.cpp:87
String getLine()
Definition: Tokenizer.cpp:54
virtual ~Tokenizer()
Definition: Tokenizer.cpp:40