//! delete all object in list, and clear self void AccessByNameID<void*>::destroy() { std::vector<uintptr_t> used_id; m_byid.get_used_id(used_id); std::vector<uintptr_t> bynamep(m_byname.size()); std::map<std::string, void*>::iterator iter = m_byname.begin(); for (long i = 0; iter != m_byname.end(); ++iter) bynamep[i++] = (uintptr_t)iter->second; for (long i = 0; i != static_cast<long>(used_id.size()); ++i) used_id[i] = m_byid.get_val(used_id[i]); std::sort(used_id.begin(), used_id.end()); std::sort(bynamep.begin(), bynamep.end()); long n = std::set_union(used_id.begin(), used_id.end(), bynamep.begin(), bynamep.end(), used_id.begin()) - used_id.begin(); assert(static_cast<long>(used_id.size()) == n); for (long i = 0; i != static_cast<long>(used_id.size()); ++i) { on_destroy((void*)used_id[i]); } m_byid.clear(); m_byname.clear(); }
//! delete all object in list, and clear self void AccessByNameID<void*>::destroy() { std::vector<uintptr_t> used_id; m_byid.get_used_id(&used_id); std::vector<uintptr_t> bynamep(m_byname->size()); NameMapForAccessByNameID::iterator iter = m_byname->begin(); for (uintptr_t i = 0; iter != m_byname->end(); ++iter) bynamep[i++] = (uintptr_t)iter->second; for (uintptr_t i = 0; i != used_id.size(); ++i) used_id[i] = m_byid.get_val(used_id[i]); std::sort(used_id.begin(), used_id.end()); std::sort(bynamep.begin(), bynamep.end()); uintptr_t n = std::set_union(used_id.begin(), used_id.end(), bynamep.begin(), bynamep.end(), used_id.begin()) - used_id.begin(); assert(used_id.size() == n); if (used_id.size() != n) { THROW_STD(runtime_error, "(used_id.size=%zd) != (n=%zd)", used_id.size(), n); } for (uintptr_t i = 0; i != n; ++i) on_destroy((void*)used_id[i]); m_byid.clear(); m_byname->clear(); }