Libsaki
Core library of Pancake Mahjong
table_observer.h
1 #ifndef SAKI_TABLE_OBSERVER_H
2 #define SAKI_TABLE_OBSERVER_H
3 
4 #include "table_event.h"
5 
6 #include <vector>
7 #include <array>
8 
9 
10 
11 namespace saki
12 {
13 
14 
15 
16 // 24 is the theoritical maximum
17 using River = util::Stactor<T37, 24>;
18 
19 class Table;
20 
21 
22 
24 {
25 public:
26  virtual ~TableObserver() = default;
27 
28  virtual void onTableEvent(const Table &table, const TableEvent &event)
29  {
30  (void) table; (void) event;
31  }
32 };
33 
34 
35 
36 #define BLANK_DEF { (void) t; (void) e; }
37 
39 {
40 public:
41  virtual ~TableObserverDispatched() = default;
42 
43  using TE = TableEvent;
44 
45  void onTableEvent(const Table &table, const TE &event) final
46  {
47  using T = TE::Type;
48  switch (event.type()) {
49  case T::TABLE_STARTED:
50  onTableEvent(table, event.as<TE::TableStarted>());
51  break;
52  case T::FIRST_DEALER_CHOSEN:
53  onTableEvent(table, event.as<TE::FirstDealerChosen>());
54  break;
55  case T::ROUND_STARTED:
56  onTableEvent(table, event.as<TE::RoundStarted>());
57  break;
58  case T::CLEANED:
59  onTableEvent(table, event.as<TE::Cleaned>());
60  break;
61  case T::DICED:
62  onTableEvent(table, event.as<TE::Diced>());
63  break;
64  case T::DEALT:
65  onTableEvent(table, event.as<TE::Dealt>());
66  break;
67  case T::FLIPPED:
68  onTableEvent(table, event.as<TE::Flipped>());
69  break;
70  case T::DRAWN:
71  onTableEvent(table, event.as<TE::Drawn>());
72  break;
73  case T::DISCARDED:
74  onTableEvent(table, event.as<TE::Discarded>());
75  break;
76  case T::RIICHI_CALLED:
77  onTableEvent(table, event.as<TE::RiichiCalled>());
78  break;
79  case T::RIICHI_ESTABLISHED:
80  onTableEvent(table, event.as<TE::RiichiEstablished>());
81  break;
82  case T::BARKED:
83  onTableEvent(table, event.as<TE::Barked>());
84  break;
85  case T::ROUND_ENDED:
86  onTableEvent(table, event.as<TE::RoundEnded>());
87  break;
88  case T::POINTS_CHANGED:
89  onTableEvent(table, event.as<TE::PointsChanged>());
90  break;
91  case T::TABLE_ENDED:
92  onTableEvent(table, event.as<TE::TableEnded>());
93  break;
94  case T::POPPED_UP:
95  onTableEvent(table, event.as<TE::PoppedUp>());
96  break;
97  }
98  }
99 
100  virtual void onTableEvent(const Table &t, const TE::TableStarted &e) BLANK_DEF
101  virtual void onTableEvent(const Table &t, const TE::FirstDealerChosen &e) BLANK_DEF
102  virtual void onTableEvent(const Table &t, const TE::RoundStarted &e) BLANK_DEF
103  virtual void onTableEvent(const Table &t, const TE::Cleaned &e) BLANK_DEF
104  virtual void onTableEvent(const Table &t, const TE::Diced &e) BLANK_DEF
105  virtual void onTableEvent(const Table &t, const TE::Dealt &e) BLANK_DEF
106  virtual void onTableEvent(const Table &t, const TE::Flipped &e) BLANK_DEF
107  virtual void onTableEvent(const Table &t, const TE::Drawn &e) BLANK_DEF
108  virtual void onTableEvent(const Table &t, const TE::Discarded &e) BLANK_DEF
109  virtual void onTableEvent(const Table &t, const TE::RiichiCalled &e) BLANK_DEF
110  virtual void onTableEvent(const Table &t, const TE::RiichiEstablished &e) BLANK_DEF
111  virtual void onTableEvent(const Table &t, const TE::Barked &e) BLANK_DEF
112  virtual void onTableEvent(const Table &t, const TE::RoundEnded &e) BLANK_DEF
113  virtual void onTableEvent(const Table &t, const TE::PointsChanged &e) BLANK_DEF
114  virtual void onTableEvent(const Table &t, const TE::TableEnded &e) BLANK_DEF
115  virtual void onTableEvent(const Table &t, const TE::PoppedUp &e) BLANK_DEF
116 };
117 
118 
119 
120 } // namespace saki
121 
122 
123 
124 #endif // SAKI_TABLE_OBSERVER_H
Definition: lobject.h:497
Definition: table_event.h:60
Definition: table_event.h:23
Definition: table_event.h:82
Definition: table_observer.h:38
Definition: table.h:87
Definition: table_event.h:77
Definition: table_event.h:131
Definition: table_event.h:140
Definition: table_event.h:94
Definition: table_event.h:145
Definition: table_observer.h:23
Definition: ai.cpp:18
Definition: table_event.h:66
Definition: table_event.h:105
Definition: table_event.h:99
Definition: table_event.h:89
Definition: table_event.h:123
Definition: table_event.h:117
Definition: table_event.h:152
Definition: table_event.h:54
Definition: table_event.h:111