Switching automelt to the stockpile iterator.

develop
Eric Wald 2014-09-27 11:07:26 -06:00
parent b0b6a82c92
commit e46a27c8a4
1 changed files with 13 additions and 13 deletions

@ -7,6 +7,7 @@
#include "df/building_def.h" #include "df/building_def.h"
#include "df/viewscreen_dwarfmodest.h" #include "df/viewscreen_dwarfmodest.h"
#include "df/building_stockpilest.h" #include "df/building_stockpilest.h"
#include "modules/Buildings.h"
#include "modules/Items.h" #include "modules/Items.h"
#include "df/ui.h" #include "df/ui.h"
#include "modules/Maps.h" #include "modules/Maps.h"
@ -25,8 +26,6 @@ static const string PERSISTENCE_KEY = "automelt/stockpiles";
static void mark_all_in_stockpiles(vector<PersistentStockpileInfo> &stockpiles) static void mark_all_in_stockpiles(vector<PersistentStockpileInfo> &stockpiles)
{ {
std::vector<df::item*> &items = world->items.other[items_other_id::IN_PLAY];
// Precompute a bitmask with the bad flags // Precompute a bitmask with the bad flags
df::item_flags bad_flags; df::item_flags bad_flags;
bad_flags.whole = 0; bad_flags.whole = 0;
@ -39,9 +38,16 @@ static void mark_all_in_stockpiles(vector<PersistentStockpileInfo> &stockpiles)
#undef F #undef F
size_t marked_count = 0; size_t marked_count = 0;
for (size_t i = 0; i < items.size(); i++) auto &melting_items = world->items.other[items_other_id::ANY_MELT_DESIGNATED];
for (auto it = stockpiles.begin(); it != stockpiles.end(); it++)
{
if (!it->isValid())
continue;
Buildings::StockpileIterator stored;
for (stored.begin(it->getStockpile()); !stored.done(); ++stored)
{ {
df::item *item = items[i]; df::item *item = *stored;
if (item->flags.whole & bad_flags.whole) if (item->flags.whole & bad_flags.whole)
continue; continue;
@ -51,12 +57,6 @@ static void mark_all_in_stockpiles(vector<PersistentStockpileInfo> &stockpiles)
if (is_set_to_melt(item)) if (is_set_to_melt(item))
continue; continue;
auto &melting_items = world->items.other[items_other_id::ANY_MELT_DESIGNATED];
for (auto it = stockpiles.begin(); it != stockpiles.end(); it++)
{
if (!it->inStockpile(item))
continue;
++marked_count; ++marked_count;
insert_into_vector(melting_items, &df::item::id, item); insert_into_vector(melting_items, &df::item::id, item);
item->flags.bits.melt = true; item->flags.bits.melt = true;