Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "MessageImitator.h"
- #include "TokenList.h"
- #include <iostream>
- using namespace std;
- namespace {
- void ProcessLine(TokenList& line) {
- cout << "SN " << line.SequenceNumber() << " - ";
- for (auto& token : line.Tokens()) {
- cout << token << " ";
- }
- cout << endl;
- line.Clear();
- }
- }
- int main()
- {
- auto line = TokenList();
- for (int i = 0; i < 200; i++) {
- line.Add(ReadByte());
- if (line.Completed()) {
- ProcessLine(line);
- }
- }
- }
- // New file
- #include "MessageImitator.h"
- #include <string>
- #include <vector>
- using namespace std;
- namespace {
- string GenerateMessage() {
- const vector<string> messages = {
- "BAD COMMAND LINE\n",
- "PING 23\n",
- "MOVE 24 X 100\n",
- " COMMAND 25 X 10 Y 10 Z 10\n"
- };
- static int i = 0;
- i++;
- return messages[i % messages.size()];
- }
- }
- char ReadByte() {
- static int i = -1;
- static string message = GenerateMessage();
- if (i == message.size() - 1) {
- message = GenerateMessage();
- i = -1;
- }
- i++;
- return message[i];
- }
- // New File
- #include "TokenList.h"
- using namespace std;
- TokenList::TokenList() {
- _sequenceNumber = -1;
- _tokens = vector<string>();
- _completed = false;
- _token = "";
- _lastByte = ' ';
- }
- unsigned int TokenList::SequenceNumber() {
- if (_tokens.size() > 1) {
- try {
- _sequenceNumber = stoi(_tokens[1]);
- }
- catch (exception) {
- //Do nothing
- }
- }
- return _sequenceNumber;
- }
- vector<string> TokenList::Tokens() {
- if (_tokens.size() > 1)
- _tokens.erase(_tokens.begin() + 1);
- return _tokens;
- }
- bool TokenList::Completed() {
- return _completed;
- }
- void TokenList::Add(char c) {
- if (c == '\n') {
- _completed = true;
- _tokens.push_back(_token);
- _token.clear();
- }
- else if (!(c == ' ' && _lastByte == ' ')) {
- if (c == ' ') {
- _tokens.push_back(_token);
- _token.clear();
- }
- else {
- _token.push_back(c);
- }
- }
- _lastByte = c;
- }
- void TokenList::Clear() {
- _sequenceNumber = -1;
- _tokens.clear();
- _completed = false;
- _token.clear();
- _lastByte = ' ';
- }
- // New file
- #pragma once
- char ReadByte();
- // New file
- #pragma once
- #include <vector>
- #include <string>
- class TokenList {
- private:
- unsigned int _sequenceNumber;
- std::vector<std::string> _tokens;
- bool _completed;
- std::string _token;
- char _lastByte;
- public:
- TokenList();
- unsigned int SequenceNumber();
- std::vector<std::string> Tokens();
- bool Completed();
- void Add(char);
- void Clear();
- };
Advertisement
Add Comment
Please, Sign In to add comment