summaryrefslogtreecommitdiffstats
path: root/crawl-ref/source/feature.cc
diff options
context:
space:
mode:
authorAdam Borowski <kilobyte@angband.pl>2013-07-15 16:29:45 +0200
committerAdam Borowski <kilobyte@angband.pl>2013-07-15 16:41:41 +0200
commitbe12424dbfaea0b7a3c8fe008eccd531597bc20f (patch)
tree0276ddc029297608a5a207a601eae8242f57145b /crawl-ref/source/feature.cc
parent6981088144c79af6a1f595fbda5e12583c675e43 (diff)
downloadcrawl-ref-be12424dbfaea0b7a3c8fe008eccd531597bc20f.tar.gz
crawl-ref-be12424dbfaea0b7a3c8fe008eccd531597bc20f.zip
Fix a memory+speed leak if features are redefined over and over.
A map can recycle overwritten keys, a vector can't.
Diffstat (limited to 'crawl-ref/source/feature.cc')
-rw-r--r--crawl-ref/source/feature.cc10
1 files changed, 6 insertions, 4 deletions
diff --git a/crawl-ref/source/feature.cc b/crawl-ref/source/feature.cc
index 8c817bfead..c2ad9c021d 100644
--- a/crawl-ref/source/feature.cc
+++ b/crawl-ref/source/feature.cc
@@ -29,11 +29,13 @@ const feature_def &get_feature_def(dungeon_feature_type feat)
static void _apply_feature_overrides()
{
- for (int i = 0, size = Options.feature_overrides.size(); i < size; ++i)
+ for (map<dungeon_feature_type, feature_def>::const_iterator fo
+ = Options.feature_overrides.begin();
+ fo != Options.feature_overrides.end();
+ ++fo)
{
- const feature_override &fov = Options.feature_overrides[i];
- const feature_def &ofeat = fov.override;
- feature_def &feat = Features[fov.object];
+ const feature_def &ofeat = fo->second;
+ feature_def &feat = Features[fo->first];
ucs_t c;
if (ofeat.symbol && (c = get_glyph_override(ofeat.symbol)))