A programming language for manipulation of streams.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

83 lignes
1.4 KiB

il y a 5 ans
  1. #include "tool.h"
  2. #include <deque>
  3. #include <iostream>
  4. #include <fstream>
  5. class identity : public tool
  6. {
  7. std::optional<std::shared_ptr<tool>> n;
  8. tool_env me;
  9. std::deque<std::string> queue;
  10. public:
  11. identity(tool_env t)
  12. : me{t}
  13. {}
  14. virtual void init(std::optional<std::shared_ptr<tool>> next)
  15. {
  16. n = next;
  17. }
  18. virtual void execute()
  19. {
  20. if(has_queue())
  21. {
  22. if(n.has_value())
  23. n.value()->enqueue(queue.front());
  24. queue.pop_front();
  25. }
  26. }
  27. virtual void enqueue(std::string v)
  28. {
  29. queue.push_back(v);
  30. }
  31. virtual bool has_queue()
  32. {
  33. return queue.size()!=0;
  34. }
  35. };
  36. class echo : public tool
  37. {
  38. std::optional<std::shared_ptr<tool>> n;
  39. tool_env me;
  40. std::deque<std::string> queue;
  41. std::optional<std::unique_ptr<std::ofstream> > outlet = std::nullopt;
  42. public:
  43. echo(tool_env t)
  44. : me{t}
  45. {}
  46. virtual void init(std::optional<std::shared_ptr<tool>> next)
  47. {
  48. n = next;
  49. if(me.find("file")!=me.end())
  50. {
  51. outlet = std::make_unique<std::ofstream>(me["file"]);
  52. }
  53. }
  54. virtual void execute()
  55. {
  56. if(has_queue())
  57. {
  58. if(outlet.has_value())
  59. {
  60. (*outlet.value())<<escape(queue.front()) << std::endl;
  61. }
  62. else
  63. {
  64. std::cout << escape(queue.front()) << std::endl;
  65. }
  66. if(n.has_value())
  67. n.value()->enqueue(queue.front());
  68. queue.pop_front();
  69. }
  70. }
  71. virtual void enqueue(std::string v)
  72. {
  73. queue.push_back(v);
  74. }
  75. virtual bool has_queue()
  76. {
  77. return queue.size()!=0;
  78. }
  79. };