3 #include "system/angband.h"
10 * @brief アイテムリスト(床上スタック/モンスター所持)を管理するクラス
12 * @details object_type 自体を保持するのではなく、フロア全体の object_type 配列上のアイテムの要素番号を保持する
14 class ObjectIndexList {
19 ObjectIndexList() = default;
22 * @brief アイテムリストにフロア全体のアイテム配列上の指定した要素番号のアイテムを追加する
25 * stack_idx が非負数の場合、アイテムリストの stack_idx で指定した位置に追加する。
26 * (リストに含まれるアイテムの stack_idx は降順で並んでいるものと想定し、その順序を崩さない位置に追加する)
28 * stack_idx が0または負数の場合、アイテムリストの先頭に追加する。
29 * また、追加したアイテムの stack_idx を追加前のアイテムリストの先頭のアイテムの stack_idx + 1 にする。
31 * @param floor_ptr 追加するアイテムが存在するフロアへのポインタ
32 * @param o_idx 追加するアイテムのフロア全体のアイテム配列上の要素番号
33 * @param stack_idx アイテムリストに追加する位置(デフォルト:0)
35 void add(floor_type *floor_ptr, OBJECT_IDX o_idx, IDX stack_idx = 0);
38 * @brief アイテムリストからフロア全体のアイテム配列上の指定した要素番号のアイテムを削除する
40 * @param o_idx 削除するアイテムのフロア全体のアイテム配列上の要素番号
42 void remove(OBJECT_IDX o_idx);
45 * @brief アイテムリストの先頭のアイテムを最後尾に移動させる
48 * アイテムリストに含まれる各アイテムの stack_idx の降順を崩さないようにするため、
49 * 先頭のアイテムを最後尾に移動した後各アイテムの stack_idx は1ずつインクリメントされ、
50 * 最後尾に移動したアイテムの stack_idx は 1 になる。
52 void rotate(floor_type *floor_ptr);
55 // 以下のメソッドは内部で保持している std::list オブジェクトに対して使用できる同名のメソッド
57 auto empty() const noexcept
59 return o_idx_list_.empty();
61 auto size() const noexcept
63 return o_idx_list_.size();
69 auto &front() noexcept
71 return o_idx_list_.front();
73 void pop_front() noexcept
75 return o_idx_list_.pop_front();
79 return o_idx_list_.begin();
83 return o_idx_list_.end();
85 auto begin() const noexcept
87 return o_idx_list_.begin();
89 auto end() const noexcept
91 return o_idx_list_.end();
95 std::list<OBJECT_IDX> o_idx_list_;