1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-04-21 12:06:49 +02:00

- WeightedRule optimization - part 1

- comments, style
This commit is contained in:
DjWarmonger 2016-08-11 07:49:08 +02:00
parent 25fd4d85e2
commit 2410f0af61
4 changed files with 15 additions and 18 deletions

View File

@ -350,7 +350,7 @@ ui32 ObjectTemplate::getWidth() const
//TODO: Use 2D array //TODO: Use 2D array
//TODO: better precalculate and store constant value //TODO: better precalculate and store constant value
ui32 ret = 0; ui32 ret = 0;
for (auto const &row : usedTiles) //copy is expensive for (const auto &row : usedTiles) //copy is expensive
{ {
ret = std::max<ui32>(ret, row.size()); ret = std::max<ui32>(ret, row.size());
} }

View File

@ -321,16 +321,16 @@ TerrainViewPattern::TerrainViewPattern() : diffImages(false), rotationTypesCount
maxPoints = std::numeric_limits<int>::max(); maxPoints = std::numeric_limits<int>::max();
} }
TerrainViewPattern::WeightedRule::WeightedRule() : points(0) TerrainViewPattern::WeightedRule::WeightedRule(std::string &Name) : points(0), name(Name)
{ {
standardRule = (TerrainViewPattern::RULE_ANY == name || TerrainViewPattern::RULE_DIRT == name
|| TerrainViewPattern::RULE_NATIVE == name || TerrainViewPattern::RULE_SAND == name
|| TerrainViewPattern::RULE_TRANSITION == name || TerrainViewPattern::RULE_NATIVE_STRONG == name);
} }
bool TerrainViewPattern::WeightedRule::isStandardRule() const bool TerrainViewPattern::WeightedRule::isStandardRule() const
{ {
return TerrainViewPattern::RULE_ANY == name || TerrainViewPattern::RULE_DIRT == name return standardRule;
|| TerrainViewPattern::RULE_NATIVE == name || TerrainViewPattern::RULE_SAND == name
|| TerrainViewPattern::RULE_TRANSITION == name || TerrainViewPattern::RULE_NATIVE_STRONG == name;
} }
CTerrainViewPatternConfig::CTerrainViewPatternConfig() CTerrainViewPatternConfig::CTerrainViewPatternConfig()
@ -357,8 +357,7 @@ CTerrainViewPatternConfig::CTerrainViewPatternConfig()
{ {
std::vector<std::string> ruleParts; std::vector<std::string> ruleParts;
boost::split(ruleParts, ruleStr, boost::is_any_of("-")); boost::split(ruleParts, ruleStr, boost::is_any_of("-"));
TerrainViewPattern::WeightedRule rule; TerrainViewPattern::WeightedRule rule(ruleParts[0]);
rule.name = ruleParts[0];
assert(!rule.name.empty()); assert(!rule.name.empty());
if(ruleParts.size() > 1) if(ruleParts.size() > 1)
{ {

View File

@ -229,7 +229,7 @@ struct DLL_LINKAGE TerrainViewPattern
{ {
struct WeightedRule struct WeightedRule
{ {
WeightedRule(); WeightedRule(std::string &Name);
/// Gets true if this rule is a standard rule which means that it has a value of one of the RULE_* constants. /// Gets true if this rule is a standard rule which means that it has a value of one of the RULE_* constants.
bool isStandardRule() const; bool isStandardRule() const;
@ -237,6 +237,11 @@ struct DLL_LINKAGE TerrainViewPattern
std::string name; std::string name;
/// Optional. A rule can have points. Patterns may have a minimum count of points to reach to be successful. /// Optional. A rule can have points. Patterns may have a minimum count of points to reach to be successful.
int points; int points;
private:
bool standardRule;
WeightedRule(); //only allow string constructor
}; };
static const int PATTERN_DATA_SIZE = 9; static const int PATTERN_DATA_SIZE = 9;

View File

@ -1497,11 +1497,7 @@ void CRmgTemplateZone::initTerrainType (CMapGenerator* gen)
void CRmgTemplateZone::paintZoneTerrain (CMapGenerator* gen, ETerrainType terrainType) void CRmgTemplateZone::paintZoneTerrain (CMapGenerator* gen, ETerrainType terrainType)
{ {
std::vector<int3> tiles; std::vector<int3> tiles(tileinfo.begin(), tileinfo.end());
for (auto tile : tileinfo)
{
tiles.push_back (tile);
}
gen->editManager->getTerrainSelection().setSelection(tiles); gen->editManager->getTerrainSelection().setSelection(tiles);
gen->editManager->drawTerrain(terrainType, &gen->rand); gen->editManager->drawTerrain(terrainType, &gen->rand);
} }
@ -2305,7 +2301,6 @@ ObjectInfo CRmgTemplateZone::getRandomObject(CMapGenerator* gen, CTreasurePileIn
bool fitsBlockmap = true; bool fitsBlockmap = true;
std::set<int3> blockedOffsets = oi.templ.getBlockedOffsets(); std::set<int3> blockedOffsets = oi.templ.getBlockedOffsets();
blockedOffsets.insert (newVisitableOffset); blockedOffsets.insert (newVisitableOffset);
for (auto blockingTile : blockedOffsets) for (auto blockingTile : blockedOffsets)
@ -2327,13 +2322,11 @@ ObjectInfo CRmgTemplateZone::getRandomObject(CMapGenerator* gen, CTreasurePileIn
total += oi.probability; total += oi.probability;
//FIXME: apparently this is quite expensive operation //FIXME: apparently this is quite expensive operation, but "reserve" doesn't improve speed
thresholds.push_back (std::make_pair (total, oi)); thresholds.push_back (std::make_pair (total, oi));
} }
} }
//logGlobal->infoStream() << boost::format ("Number of objects visitable from bottom: %d") % objectsVisitableFromBottom;
if (thresholds.empty()) if (thresholds.empty())
{ {
ObjectInfo oi; ObjectInfo oi;