From 3c58bd3948ed053c2707e5a4bc7a0295b099a51d Mon Sep 17 00:00:00 2001 From: Eric Wald Date: Sun, 7 Sep 2014 14:03:51 -0600 Subject: [PATCH] Switching autotrade to use StockpileIterator. This should speed it up a bit, and prevents it from marking a stream of empty bins. --- plugins/autotrade.cpp | 20 ++++++++++---------- plugins/uicommon.h | 5 +++++ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/plugins/autotrade.cpp b/plugins/autotrade.cpp index ccc42f0e8..4cfd2913e 100644 --- a/plugins/autotrade.cpp +++ b/plugins/autotrade.cpp @@ -8,6 +8,7 @@ #include "df/viewscreen_dwarfmodest.h" #include "df/viewscreen_tradegoodsst.h" #include "df/building_stockpilest.h" +#include "modules/Buildings.h" #include "modules/Items.h" #include "df/building_tradedepotst.h" #include "df/general_ref_building_holderst.h" @@ -202,8 +203,6 @@ static void mark_all_in_stockpiles(vector &stockpiles) if (!depot_info.findDepot()) return; - std::vector &items = world->items.other[items_other_id::IN_PLAY]; - // Precompute a bitmask with the bad flags df::item_flags bad_flags; @@ -218,18 +217,19 @@ static void mark_all_in_stockpiles(vector &stockpiles) size_t marked_count = 0; size_t error_count = 0; - for (size_t i = 0; i < items.size(); i++) + for (auto it = stockpiles.begin(); it != stockpiles.end(); it++) { - df::item *item = items[i]; - if (item->flags.whole & bad_flags.whole) - continue; - - if (!is_valid_item(item)) + if (!it->isValid()) continue; - for (auto it = stockpiles.begin(); it != stockpiles.end(); it++) + Buildings::StockpileIterator stored; + for (stored.begin(it->getStockpile()); !stored.done(); ++stored) { - if (!it->inStockpile(item)) + df::item *item = *stored; + if (item->flags.whole & bad_flags.whole) + continue; + + if (!is_valid_item(item)) continue; // In case of container, check contained items for mandates diff --git a/plugins/uicommon.h b/plugins/uicommon.h index 1daabf4c7..c900a585e 100644 --- a/plugins/uicommon.h +++ b/plugins/uicommon.h @@ -346,6 +346,11 @@ public: return this->sp == sp; } + df::building_stockpilest* getStockpile() + { + return sp; + } + protected: int32_t id; df::building_stockpilest* sp;