3 #include "object/tval-types.h"
8 enum class StoreSaleType;
13 * @brief アイテムの絞り込み条件をテストする基底クラス
17 virtual ~ItemTester() = default;
18 bool okay(const ItemEntity *o_ptr) const;
19 virtual std::unique_ptr<ItemTester> clone() const = 0;
22 ItemTester() = default;
25 virtual bool okay_impl(const ItemEntity *o_ptr) const = 0;
29 * @brief ItemTesterの派生クラスのオブジェクトを複製するメンバ関数 clone() を実装するクラス
31 * @tparam T ItemTesterの派生クラスのオブジェクトの型
33 template <typename DerivedItemTester>
34 class CloneableItemTester : public ItemTester {
36 virtual std::unique_ptr<ItemTester> clone() const final
38 return std::make_unique<DerivedItemTester>(static_cast<const DerivedItemTester &>(*this));
43 * @brief 全てのアイテムがOKとなるアイテムテストクラス
45 class AllMatchItemTester : public CloneableItemTester<AllMatchItemTester> {
47 AllMatchItemTester() = default;
50 virtual bool okay_impl(const ItemEntity *) const
57 * @brief 指定した tval のアイテムならばOKとなるアイテムテストクラス
59 class TvalItemTester : public CloneableItemTester<TvalItemTester> {
61 explicit TvalItemTester(ItemKindType tval);
64 virtual bool okay_impl(const ItemEntity *o_ptr) const;
70 * @brief 指定した関数を呼び出した結果戻り値が true であればOKとなるアイテムテストクラス
72 class FuncItemTester : public CloneableItemTester<FuncItemTester> {
74 using TestMemberFunctionPtr = bool (ItemEntity::*)() const;
75 explicit FuncItemTester(TestMemberFunctionPtr test_func);
76 explicit FuncItemTester(std::function<bool(const ItemEntity *)> test_func);
77 explicit FuncItemTester(std::function<bool(PlayerType *, const ItemEntity *)> test_func, PlayerType *player_ptr);
78 explicit FuncItemTester(std::function<bool(PlayerType *, const ItemEntity *, StoreSaleType)> test_func, PlayerType *player_ptr, StoreSaleType store_num);
81 virtual bool okay_impl(const ItemEntity *o_ptr) const;
83 std::function<bool(PlayerType *, const ItemEntity *)> test_func;
84 PlayerType *player_ptr = nullptr;