Guest User

Code

a guest
Feb 27th, 2023
169
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.47 KB | None | 0 0
  1. #include "MessageImitator.h"
  2. #include "TokenList.h"
  3. #include <iostream>
  4. using namespace std;
  5.  
  6. namespace {
  7. void ProcessLine(TokenList& line) {
  8. cout << "SN " << line.SequenceNumber() << " - ";
  9.  
  10. for (auto& token : line.Tokens()) {
  11. cout << token << " ";
  12. }
  13. cout << endl;
  14. line.Clear();
  15. }
  16. }
  17.  
  18. int main()
  19. {
  20. auto line = TokenList();
  21. for (int i = 0; i < 200; i++) {
  22. line.Add(ReadByte());
  23. if (line.Completed()) {
  24. ProcessLine(line);
  25. }
  26. }
  27. }
  28.  
  29.  
  30. // New file
  31.  
  32. #include "MessageImitator.h"
  33. #include <string>
  34. #include <vector>
  35. using namespace std;
  36.  
  37. namespace {
  38. string GenerateMessage() {
  39. const vector<string> messages = {
  40. "BAD COMMAND LINE\n",
  41. "PING 23\n",
  42. "MOVE 24 X 100\n",
  43. " COMMAND 25 X 10 Y 10 Z 10\n"
  44. };
  45. static int i = 0;
  46. i++;
  47.  
  48. return messages[i % messages.size()];
  49. }
  50. }
  51.  
  52. char ReadByte() {
  53. static int i = -1;
  54. static string message = GenerateMessage();
  55. if (i == message.size() - 1) {
  56. message = GenerateMessage();
  57. i = -1;
  58. }
  59. i++;
  60. return message[i];
  61. }
  62.  
  63. // New File
  64.  
  65. #include "TokenList.h"
  66. using namespace std;
  67.  
  68. TokenList::TokenList() {
  69. _sequenceNumber = -1;
  70. _tokens = vector<string>();
  71. _completed = false;
  72. _token = "";
  73. _lastByte = ' ';
  74. }
  75.  
  76. unsigned int TokenList::SequenceNumber() {
  77. if (_tokens.size() > 1) {
  78. try {
  79. _sequenceNumber = stoi(_tokens[1]);
  80. }
  81. catch (exception) {
  82. //Do nothing
  83. }
  84. }
  85. return _sequenceNumber;
  86. }
  87.  
  88. vector<string> TokenList::Tokens() {
  89. if (_tokens.size() > 1)
  90. _tokens.erase(_tokens.begin() + 1);
  91. return _tokens;
  92. }
  93.  
  94. bool TokenList::Completed() {
  95. return _completed;
  96. }
  97.  
  98. void TokenList::Add(char c) {
  99. if (c == '\n') {
  100. _completed = true;
  101. _tokens.push_back(_token);
  102. _token.clear();
  103. }
  104. else if (!(c == ' ' && _lastByte == ' ')) {
  105. if (c == ' ') {
  106. _tokens.push_back(_token);
  107. _token.clear();
  108. }
  109. else {
  110. _token.push_back(c);
  111. }
  112. }
  113. _lastByte = c;
  114. }
  115.  
  116. void TokenList::Clear() {
  117. _sequenceNumber = -1;
  118. _tokens.clear();
  119. _completed = false;
  120. _token.clear();
  121. _lastByte = ' ';
  122. }
  123.  
  124. // New file
  125.  
  126. #pragma once
  127.  
  128. char ReadByte();
  129.  
  130.  
  131. // New file
  132.  
  133. #pragma once
  134. #include <vector>
  135. #include <string>
  136.  
  137. class TokenList {
  138. private:
  139. unsigned int _sequenceNumber;
  140. std::vector<std::string> _tokens;
  141. bool _completed;
  142. std::string _token;
  143. char _lastByte;
  144. public:
  145. TokenList();
  146. unsigned int SequenceNumber();
  147. std::vector<std::string> Tokens();
  148. bool Completed();
  149. void Add(char);
  150. void Clear();
  151. };
Advertisement
Add Comment
Please, Sign In to add comment