63 auto nl_pos = find(m_buff.begin(), m_buff.end(),
'\n');
64 if (nl_pos == m_buff.end()) {
65 return vector<uint8_t>();
67 auto line = vector<uint8_t>(m_buff.begin(), nl_pos);
68 m_buff = vector<uint8_t>(nl_pos + 1, m_buff.end());
83 case State::PrefixWait:
85 if (ch ==
'$' || ch ==
'!') {
88 m_state = State::Data;
94 if (std::isprint(ch)) {
96 if (ch ==
'*') m_state = State::CsDigit1;
98 if (ch == 0x0d || ch == 0x0a) {
100 m_lines.emplace_back(m_line.begin(), m_line.end());
101 m_state = State::PrefixWait;
105 m_state = State::PrefixWait;
108 case State::CsDigit1:
110 if (std::isxdigit(ch)) {
111 m_line.push_back(ch);
112 m_state = State::CsDigit2;
114 m_state = State::PrefixWait;
117 case State::CsDigit2:
119 if (std::isxdigit(ch)) {
120 m_line.push_back(ch);
121 m_lines.emplace_back(m_line.begin(), m_line.end());
123 m_state = State::PrefixWait;