%module shenzhen %{ #include "board.hpp" #include "card.hpp" #include "goal.hpp" %} %include "std_array.i" %include "std_string.i" namespace solitaire { enum class CardType : int { Zhong, Bai, Fa, Hua, Red, Green, Black }; auto isNormalCardType(CardType type) -> bool; struct Card { CardType type; int value; auto toString() const noexcept -> std::string; }; class Goal { std::array, 3> goal{}; auto getEmptyId() -> std::optional; public: auto getId(CardType suit) const noexcept -> std::optional; auto get(CardType suit) const noexcept -> std::optional; void set(CardType suit, int value) noexcept; void inc(CardType suit) noexcept; }; struct BunkerField { std::optional card; bool empty{}; bool closed{}; }; inline constexpr int MAX_ROW_SIZE = 13; inline constexpr int MAX_COLUMN_SIZE = 8; class Stack { std::array, MAX_COLUMN_SIZE> values{}; }; struct Board { std::array field{}; std::array bunker{}; Goal goal{}; bool flower_gone{}; auto solved() const noexcept -> bool; auto hash() const noexcept -> std::size_t; auto correct() const noexcept -> bool; }; }