25 class VSG_DECLSPEC DeleteQueue :
public Inherit<Object, DeleteQueue>
32 uint64_t frameCount = 0;
36 using ObjectsToDelete = std::list<ObjectToDelete>;
38 std::atomic_uint64_t frameCount = 0;
39 uint64_t retainForFrameCount = 3;
44 void advance(ref_ptr<FrameStamp> frameStamp);
46 void add(ref_ptr<Object>
object)
48 std::scoped_lock lock(_mutex);
49 _objectsToDelete.push_back(ObjectToDelete{frameCount + retainForFrameCount,
object});
56 std::scoped_lock lock(_mutex);
59 for (
auto&
object : objects)
61 _objectsToDelete.emplace_back(ObjectToDelete{frameCount + retainForFrameCount,
object});
67 void prune(ref_ptr<SharedObjects> sharedObjects)
69 std::scoped_lock lock(_mutex);
72 if (std::find(_sharedObjectsToPrune.begin(), _sharedObjectsToPrune.end(), sharedObjects) == _sharedObjectsToPrune.end())
74 _sharedObjectsToPrune.push_back(sharedObjects);
81 void prune(T& sharedObjectsList)
83 std::scoped_lock lock(_mutex);
86 for (
auto& sharedObjects : sharedObjectsList)
88 if (std::find(_sharedObjectsToPrune.begin(), _sharedObjectsToPrune.end(), sharedObjects) == _sharedObjectsToPrune.end())
89 _sharedObjectsToPrune.push_back(sharedObjects);
95 template<
typename T,
typename R>
96 void add_prune(T& objects, R& sharedObjectsList)
98 std::scoped_lock lock(_mutex);
101 for (
auto&
object : objects)
103 _objectsToDelete.emplace_back(ObjectToDelete{frameCount + retainForFrameCount,
object});
107 for (
auto& sharedObjects : sharedObjectsList)
109 if (std::find(_sharedObjectsToPrune.begin(), _sharedObjectsToPrune.end(), sharedObjects) == _sharedObjectsToPrune.end())
110 _sharedObjectsToPrune.push_back(sharedObjects);
115 void wait_then_clear();
120 virtual ~DeleteQueue();
123 std::condition_variable _cv;
124 ObjectsToDelete _objectsToDelete;
125 std::list<ref_ptr<SharedObjects>> _sharedObjectsToPrune;
127 ref_ptr<ActivityStatus> _status;