ACloudViewer  3.9.4
A Modern Library for 3D Data Processing
Garbage.h
Go to the documentation of this file.
1 // ----------------------------------------------------------------------------
2 // - CloudViewer: www.cloudViewer.org -
3 // ----------------------------------------------------------------------------
4 // Copyright (c) 2018-2024 www.cloudViewer.org
5 // SPDX-License-Identifier: MIT
6 // ----------------------------------------------------------------------------
7 
8 #pragma once
9 
10 // STL
11 #include <unordered_set>
12 
14 template <typename C>
15 class Garbage {
16 public:
18  inline void add(C* item) {
19  try {
20  m_items.insert(item);
21  } catch (const std::bad_alloc&) {
22  // what can we do?!
23  }
24  }
25 
27 
29  inline void remove(C* item) { m_items.erase(item); }
30 
32  inline void destroy(C* item) {
33  m_items.erase(item);
34  delete item;
35  }
36 
38 
41  // dispose of left over
42  for (auto it = m_items.begin(); it != m_items.end(); ++it) delete *it;
43  m_items.clear();
44  }
45 
47  std::unordered_set<C*> m_items;
48 };
Garbage container (automatically deletes pointers when destroyed)
Definition: Garbage.h:15
~Garbage()
Destructor.
Definition: Garbage.h:40
void add(C *item)
Puts an item in the trash.
Definition: Garbage.h:18
void destroy(C *item)
To manually delete an item already in the trash.
Definition: Garbage.h:32
void remove(C *item)
Removes an item from the trash.
Definition: Garbage.h:29
std::unordered_set< C * > m_items
Items to delete.
Definition: Garbage.h:47