Remove the use of lambdas in buildingplan.

develop
Alexander Gavrilov 2013-10-02 19:55:48 +04:00
parent 33469f5bb2
commit f3be0ee187
1 changed files with 22 additions and 18 deletions

@ -92,6 +92,8 @@ static void debug(const string &msg)
* Material Choice Screen
*/
static string material_to_string_fn(MaterialInfo m) { return m.toString(); }
struct ItemFilter
{
df::dfhack_material_category mat_mask;
@ -114,8 +116,10 @@ struct ItemFilter
bool matches(MaterialInfo &material) const
{
return any_of(materials.begin(), materials.end(),
[&] (const MaterialInfo &m) { return material.matches(m); });
for (auto it = materials.begin(); it != materials.end(); ++it)
if (material.matches(*it))
return true;
return false;
}
bool matches(df::item *item)
@ -137,8 +141,7 @@ struct ItemFilter
{
vector<string> descriptions;
transform_(materials, descriptions,
[] (MaterialInfo m) { return m.toString(); });
transform_(materials, descriptions, material_to_string_fn);
if (descriptions.size() == 0)
bitfield_to_string(&descriptions, mat_mask);
@ -157,8 +160,8 @@ struct ItemFilter
str.append("/");
if (materials.size() > 0)
{
for_each_(materials,
[&] (MaterialInfo &m) { str.append(m.getToken() + ","); });
for (size_t i = 0; i < materials.size(); i++)
str.append(materials[i].getToken() + ",");
if (str[str.size()-1] == ',')
str.resize(str.size () - 1);
@ -217,6 +220,7 @@ private:
bool valid;
};
static MaterialInfo &material_info_identity_fn(MaterialInfo &m) { return m; }
class ViewscreenChooseMaterial : public dfhack_viewscreen
{
@ -284,13 +288,12 @@ public:
// Category masks
auto masks = masks_column.getSelectedElems();
for_each_(masks,
[&] (df::dfhack_material_category &m) { filter->mat_mask.whole |= m.whole; });
for (auto it = masks.begin(); it != masks.end(); ++it)
filter->mat_mask.whole |= it->whole;
// Specific materials
auto materials = materials_column.getSelectedElems();
transform_(materials, filter->materials,
[] (MaterialInfo &m) { return m; });
transform_(materials, filter->materials, material_info_identity_fn);
Screen::dismiss(this);
}
@ -465,6 +468,7 @@ private:
}
};
static void delete_item_fn(df::job_item *x) { delete x; }
// START Planning
class PlannedBuilding
@ -555,7 +559,7 @@ public:
auto job = building->jobs[0];
for_each_(job->job_items, [] (df::job_item *x) { delete x; });
for_each_(job->job_items, delete_item_fn);
job->job_items.clear();
job->flags.bits.suspend = false;
@ -613,9 +617,10 @@ private:
ItemFilter filter;
};
static map<df::building_type, bool> planmode_enabled, saved_planmodes;
static void enable_quickfort_fn(pair<const df::building_type, bool>& pair) { pair.second = true; }
class Planner
{
public:
@ -804,8 +809,7 @@ public:
void enableQuickfortMode()
{
saved_planmodes = planmode_enabled;
for_each_(planmode_enabled,
[] (pair<const df::building_type, bool>& pair) { pair.second = true; } );
for_each_(planmode_enabled, enable_quickfort_fn);
quickfort_mode = true;
}
@ -1093,8 +1097,8 @@ struct buildingplan_hook : public df::viewscreen_dwarfmodest
OutputHotkeyString(x, y, "Material Filter:", "m", true, left_margin);
auto filter_descriptions = filter->getMaterialFilterAsVector();
for_each_(filter_descriptions,
[&](string d) { OutputString(COLOR_BROWN, x, y, " *" + d, true, left_margin); });
for (auto it = filter_descriptions.begin(); it != filter_descriptions.end(); ++it)
OutputString(COLOR_BROWN, x, y, " *" + *it, true, left_margin);
}
else
{
@ -1121,8 +1125,8 @@ struct buildingplan_hook : public df::viewscreen_dwarfmodest
OutputString(COLOR_BROWN, x, y, "Materials:", true, left_margin);
auto filters = filter->getMaterialFilterAsVector();
for_each_(filters,
[&](string d) { OutputString(COLOR_BLUE, x, y, "*" + d, true, left_margin); });
for (auto it = filters.begin(); it != filters.end(); ++it)
OutputString(COLOR_BLUE, x, y, "*" + *it, true, left_margin);
}
else
{