17 NOTHING, PASS, SWAP_OUT, SPIN_OUT, SWAP_RIICHI, SPIN_RIICHI,
18 CHII_AS_LEFT, CHII_AS_MIDDLE, CHII_AS_RIGHT,
19 PON, DAIMINKAN, ANKAN, KAKAN, TSUMO, RON,
20 RYUUKYOKU, END_TABLE, NEXT_ROUND, DICE,
31 : mAct(ActCode::NOTHING)
35 explicit Action(ActCode act)
41 && mAct != ActCode::ANKAN
42 && mAct != ActCode::KAKAN
43 && mAct != ActCode::IRS_CHECK);
46 explicit Action(ActCode act,
int arg)
50 assert(mAct == ActCode::KAKAN);
53 explicit Action(ActCode act,
unsigned mask)
57 assert(mAct == ActCode::IRS_CHECK);
60 explicit Action(ActCode act,
const T37 &t)
64 assert(argIsOneT37());
71 assert(mAct == ActCode::ANKAN);
74 explicit Action(ActCode act,
int showAka5,
const T37 &t)
86 bool argIsOneT37()
const 88 return mAct == ActCode::SWAP_OUT || mAct == ActCode::SWAP_RIICHI;
91 bool argIsOneIntegral()
const 93 return mAct == ActCode::KAKAN || mAct == ActCode::IRS_CHECK;
101 const T37 &t37()
const 103 assert(argIsOneT37() || isCp());
109 assert(mAct == ActCode::ANKAN);
121 assert(mAct == ActCode::KAKAN);
125 unsigned mask()
const 127 assert(mAct == ActCode::IRS_CHECK);
131 bool isDiscard()
const 133 return mAct == ActCode::SWAP_OUT || mAct == ActCode::SPIN_OUT;
136 bool isRiichi()
const 138 return mAct == ActCode::SWAP_RIICHI || mAct == ActCode::SPIN_RIICHI;
143 return mAct == ActCode::CHII_AS_LEFT
144 || mAct == ActCode::CHII_AS_MIDDLE
145 || mAct == ActCode::CHII_AS_RIGHT;
150 return mAct == ActCode::CHII_AS_LEFT
151 || mAct == ActCode::CHII_AS_MIDDLE
152 || mAct == ActCode::CHII_AS_RIGHT
153 || mAct == ActCode::PON;
158 return isCp() || mAct == ActCode::DAIMINKAN;
163 return mAct == ActCode::IRS_CHECK || mAct == ActCode::IRS_CLICK;
166 bool operator==(
const Action &that)
const 168 if (mAct != that.mAct)
172 return mT37 == that.mT37;
175 return mArg == that.mArg && mT37 == that.mT37;
177 if (argIsOneIntegral())
178 return mArg == that.mArg;
189 return mAct == ActCode::SPIN_OUT ?
Action(ActCode::SPIN_RIICHI)
190 : Action(ActCode::SWAP_RIICHI, mT37);
199 return mAct == ActCode::SPIN_RIICHI ?
Action(ActCode::SPIN_OUT)
200 : Action(ActCode::SWAP_OUT, mT37);
216 static_assert(
sizeof(
int) ==
sizeof(
unsigned),
"mArg representing ability");
225 #endif // SAKI_ACTION_H