std::string PatternString::str() const{ std::string str; for(ModuleList::const_iterator _it = const_begin(); _it != const_end(); _it++) str += _it->str(); return str; }
std::string ObjectMap::Dump() const { std::ostringstream dump_stream; dump_stream << "ObjectMap contains UniverseObjects: " << std::endl; for (const_iterator<> it = const_begin(); it != const_end(); ++it) dump_stream << it->Dump() << std::endl; dump_stream << std::endl; return dump_stream.str(); }
std::vector<int> ObjectMap::FindObjectIDs(const UniverseObjectVisitor& visitor) const { std::vector<int> result; for (const_iterator<> it = const_begin(); it != const_end(); ++it) { if (it->Accept(visitor)) result.push_back(it->ID()); } return result; }
std::vector<TemporaryPtr<const UniverseObject> > ObjectMap::FindObjects(const UniverseObjectVisitor& visitor) const { std::vector<TemporaryPtr<const UniverseObject> > result; for (const_iterator<> it = const_begin(); it != const_end(); ++it) { if (TemporaryPtr<UniverseObject> obj = it->Accept(visitor)) result.push_back(Object(obj->ID())); } return result; }
std::string PatternString::repr() const{ std::string str = "PatternString("; for(ModuleList::const_iterator _it = const_begin(); _it != const_end(); _it++) str += _it->repr(); str +=')'; return str; }
double RuleList::highestPosition() const { double result = 0; for (ConstIterator iter = const_begin(); iter != const_end(); ++iter) { CPRule rule = CONST_COMMITABLE_CAST(Rule, *iter); if (rule->isActive()) { result = max(rule->getPosition(), result); } } return result; }
bool RuleList::hasActiveRule() const { bool result = false; for (ConstIterator iter = const_begin(); iter != const_end(); ++iter) { if (CONST_COMMITABLE_CAST(Rule, *iter)->isActive()) { result = true; break; } } return result; }
void ObjectMap::AuditContainment(const std::set<int>& destroyed_object_ids) { // determine all objects that some other object thinks contains them std::map<int, std::set<int> > contained_objs; std::map<int, std::set<int> > contained_planets; std::map<int, std::set<int> > contained_buildings; std::map<int, std::set<int> > contained_fleets; std::map<int, std::set<int> > contained_ships; std::map<int, std::set<int> > contained_fields; for (const_iterator<> it = const_begin (); it != const_end(); ++it) { TemporaryPtr<const UniverseObject> contained = *it; if (destroyed_object_ids.find(contained->ID()) != destroyed_object_ids.end()) continue; int contained_id = contained->ID(); int sys_id = contained->SystemID(); int alt_id = contained->ContainerObjectID(); // planet or fleet id for a building or ship, or system id again for a fleet, field, or planet UniverseObjectType type = contained->ObjectType(); if (type == OBJ_SYSTEM) continue; // store systems' contained objects if (this->Object(sys_id)) { // although this is expected to be a system, can't use Object<System> here due to CopyForSerialize not copying the type-specific objects info contained_objs[sys_id].insert(contained_id); if (type == OBJ_PLANET) contained_planets[sys_id].insert(contained_id); else if (type == OBJ_BUILDING) contained_buildings[sys_id].insert(contained_id); else if (type == OBJ_FLEET) contained_fleets[sys_id].insert(contained_id); else if (type == OBJ_SHIP) contained_ships[sys_id].insert(contained_id); else if (type == OBJ_FIELD) contained_fields[sys_id].insert(contained_id); } // store planets' contained buildings if (type == OBJ_BUILDING && this->Object(alt_id)) contained_buildings[alt_id].insert(contained_id); // store fleets' contained ships if (type == OBJ_SHIP && this->Object(alt_id)) contained_ships[alt_id].insert(contained_id); } // set contained objects of all possible containers for (iterator<> it = begin(); it != end(); ++it) { TemporaryPtr<UniverseObject> obj = *it; if (obj->ObjectType() == OBJ_SYSTEM) { TemporaryPtr<System> sys = boost::dynamic_pointer_cast<System>(obj); if (!sys) continue; sys->m_objects = contained_objs[sys->ID()]; sys->m_planets = contained_planets[sys->ID()]; sys->m_buildings = contained_buildings[sys->ID()]; sys->m_fleets = contained_fleets[sys->ID()]; sys->m_ships = contained_ships[sys->ID()]; sys->m_fields = contained_fields[sys->ID()]; } else if (obj->ObjectType() == OBJ_PLANET) { TemporaryPtr<Planet> plt = boost::dynamic_pointer_cast<Planet>(obj); if (!plt) continue; plt->m_buildings = contained_buildings[plt->ID()]; } else if (obj->ObjectType() == OBJ_FLEET) { TemporaryPtr<Fleet> flt = boost::dynamic_pointer_cast<Fleet>(obj); if (!flt) continue; flt->m_ships = contained_ships[flt->ID()]; } } }