void CNodeDefManager::removeNode(const std::string &name) { // Pre-condition assert(name != ""); // Erase name from name ID mapping content_t id = CONTENT_IGNORE; if (m_name_id_mapping.getId(name, id)) { m_name_id_mapping.eraseName(name); m_name_id_mapping_with_aliases.erase(name); } // Erase node content from all groups it belongs to for (std::unordered_map<std::string, std::vector<content_t>>::iterator iter_groups = m_group_to_items.begin(); iter_groups != m_group_to_items.end();) { std::vector<content_t> &items = iter_groups->second; items.erase(std::remove(items.begin(), items.end(), id), items.end()); // Check if group is empty if (items.empty()) m_group_to_items.erase(iter_groups++); else ++iter_groups; } }
void CNodeDefManager::removeNode(const std::string &name) { // Pre-condition assert(name != ""); // Erase name from name ID mapping content_t id = CONTENT_IGNORE; if (m_name_id_mapping.getId(name, id)) { m_name_id_mapping.eraseName(name); m_name_id_mapping_with_aliases.erase(name); } // Erase node content from all groups it belongs to for (UNORDERED_MAP<std::string, GroupItems>::iterator iter_groups = m_group_to_items.begin(); iter_groups != m_group_to_items.end();) { GroupItems &items = iter_groups->second; for (GroupItems::iterator iter_groupitems = items.begin(); iter_groupitems != items.end();) { if (iter_groupitems->first == id) items.erase(iter_groupitems++); else iter_groupitems++; } // Check if group is empty if (items.size() == 0) m_group_to_items.erase(iter_groups++); else iter_groups++; } }