MCPcopy Create free account
hub / github.com/InteractiveComputerGraphics/CompactNSearch / erase_empty_entries

Method erase_empty_entries

src/CompactNSearch.cpp:176–232  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

174}
175
176void
177NeighborhoodSearch::erase_empty_entries(std::vector<unsigned int> const& to_delete)
178{
179 if (to_delete.empty())
180 return;
181
182 // Indicated empty cells.
183 m_entries.erase(std::remove_if(m_entries.begin(), m_entries.end(), [](HashEntry const& entry)
184 {
185 return entry.indices.empty();
186 }), m_entries.end());
187
188 {
189 auto it = m_map.begin();
190 while (it != m_map.end())
191 {
192 auto& kvp = *it;
193
194 if (kvp.second <= to_delete.front() && kvp.second >= to_delete.back() &&
195 std::binary_search(to_delete.rbegin(), to_delete.rend(), kvp.second))
196 {
197 it = m_map.erase(it);
198 }
199 else
200 {
201 ++it;
202 }
203 }
204 }
205
206 std::vector<std::pair<HashKey const, unsigned int>*> kvps(m_map.size());
207 std::transform(m_map.begin(), m_map.end(), kvps.begin(),
208 [](std::pair<HashKey const, unsigned int>& kvp)
209 {
210 return &kvp;
211 });
212
213 // Perform neighborhood search.
214#ifdef _MSC_VER
215 concurrency::parallel_for_each
216#else
217 __gnu_parallel::for_each
218#endif
219 (kvps.begin(), kvps.end(), [&](std::pair<HashKey const, unsigned int>* kvp_)
220 {
221 auto& kvp = *kvp_;
222
223 for (unsigned int i = 0; i < to_delete.size(); ++i)
224 {
225 if (kvp.second >= to_delete[i])
226 {
227 kvp.second -= static_cast<unsigned int>(to_delete.size() - i);
228 break;
229 }
230 }
231 });
232}
233

Callers

nothing calls this directly

Calls 1

eraseMethod · 0.80

Tested by

no test coverage detected