unit_map::unit_iterator unit_map::find(const size_t &id) { umap::iterator iter = map_.find(id); if (iter == map_.end() || !iter->second.first) { return unit_iterator(map_.end(), this); } return unit_iterator(iter, this); }
unit_map::unit_iterator unit_map::find(const std::string& id) { WRN_NG << "Finding using id is slow operation\n"; umap::iterator iter = std::find_if(map_.begin(), map_.end(), match_unit_id(id)); if (iter == map_.end() || !iter->second.first) { return unit_iterator(map_.end(), this); } return unit_iterator(iter, this); }
unit_map::unit_iterator unit_map::find(const map_location &loc) { lmap::const_iterator i = lmap_.find(loc); if (i == lmap_.end()) { return unit_iterator(map_.end(), this); } umap::iterator iter = map_.find(i->second); assert(iter->second.first); return unit_iterator(iter , this); }
unit_map::unit_iterator unit_map::unit_iterator::operator++(int){ assert(i_ != map_->map_.end()); umap::iterator iter(i_); ++i_; while (i_ != map_->map_.end() && !valid()) { ++i_; } return unit_iterator(iter, map_); }
unit_map::unit_iterator unit_map::begin() { // This call just needs to go somewhere that is likely to be // called when num_iters_ == 0. This seems as good a place as any. clean_invalid(); umap::iterator i = map_.begin(); while (i != map_.end() && !is_valid(i)) { ++i; } return unit_iterator(i, this); }
unit_map::unit_iterator unit_map::begin() { // clean if there are more invalid than valid, this block just needs to go somewhere that is likely to be // called when num_iters_ == 0. This seems as good a place as any. if (num_invalid_ > lmap_.size() && num_iters_ == 0) { clean_invalid(); } umap::iterator i = map_.begin(); while (i != map_.end() && !i->second.first) { ++i; } return unit_iterator(i, this); }
unit_map::unit_iterator unit_map::find(const size_t &id) { umap::iterator iter = map_.find(id); iter = is_valid(iter) ? iter : map_.end(); return unit_iterator(iter, this); }