fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <functional>
  4. #include <unordered_map>
  5.  
  6. namespace app {
  7. using model = std::vector<int>;
  8.  
  9. namespace controller {
  10. void push(app::model &model, model::value_type val) {
  11. model.emplace_back(val);
  12. }
  13.  
  14. bool pop(app::model &model) {
  15. if(model.size()) {
  16. model.pop_back();
  17. return true;
  18. }
  19. return false;
  20. }
  21. }
  22.  
  23. namespace view {
  24. void all(app::model const &model) {
  25. std::cout << "[ ";
  26. for(auto el: model) {
  27. std::cout << el << " ";
  28. }
  29. std::cout << "]" << std::endl;
  30. }
  31.  
  32. void push(app::model &m) {
  33. model::value_type val;
  34. std::cin >> val;
  35. controller::push(m, val);
  36. }
  37.  
  38. void pop(model &m) {
  39. if(!controller::pop(m)) {
  40. std::cout << "cannot pop from empty collection." << std::endl;
  41. }
  42. }
  43. }
  44. }
  45.  
  46. namespace routes {
  47. using route = std::string;
  48. using handler = std::function<void()>;
  49. using router = std::unordered_map<route, handler>;
  50. }
  51.  
  52. int main() {
  53. app::model model;
  54.  
  55. routes::router const router = {
  56. {"all", [&]{ app::view::all(model); }},
  57. {"push", [&]{ app::view::push(model); }},
  58. {"pop", [&]{ app::view::pop(model); }}
  59. };
  60.  
  61. routes::route route;
  62. while(std::cin >> route) {
  63. if(router.count(route)) {
  64. router.at(route)();
  65. }
  66. else {
  67. std::cout << "invalid route!" << std::endl;
  68. }
  69. }
  70. return 0;
  71. }
Success #stdin #stdout 0s 3468KB
stdin
all
push 1
all
pop
all
push 1
push 2
push 3
gruszka
all
pop
pop
pop
pop
stdout
[ ]
[ 1 ]
[ ]
invalid route!
[ 1 2 3 ]
cannot pop from empty collection.