A very simple class that facilitates running things like plugins without locking, by collecting unwanted objects and deleting them after a delay so as to be sure nobody's in the middle of using them. More...

#include <Scavenger.h>

Public Member Functions

 Scavenger (int sec=2, int defaultObjectListSize=200)
 
 ~Scavenger ()
 
void claim (T *t)
 Call from an RT thread etc., to pass ownership of t to us. More...
 
void scavenge (bool clearNow=false)
 Call from a non-RT thread. More...
 

Protected Types

typedef std::pair< T *, time_t > ObjectTimePair
 
typedef std::vector< ObjectTimePairObjectTimeList
 
typedef std::list< T * > ObjectList
 

Protected Member Functions

void pushExcess (T *)
 
void clearExcess (time_t)
 

Protected Attributes

ObjectTimeList m_objects
 
time_t m_sec
 
ObjectList m_excess
 
time_t m_lastExcess
 
QMutex m_excessMutex
 
unsigned int m_claimed
 
unsigned int m_scavenged
 

Detailed Description

template<typename T>
class Scavenger< T >

A very simple class that facilitates running things like plugins without locking, by collecting unwanted objects and deleting them after a delay so as to be sure nobody's in the middle of using them.

Requires scavenge() to be called regularly from a non-RT thread.

This is currently not at all suitable for large numbers of objects – it's just a quick hack for use with things like plugins.

Definition at line 44 of file Scavenger.h.

Member Typedef Documentation

template<typename T>
typedef std::pair<T *, time_t> Scavenger< T >::ObjectTimePair
protected

Definition at line 63 of file Scavenger.h.

template<typename T>
typedef std::vector<ObjectTimePair> Scavenger< T >::ObjectTimeList
protected

Definition at line 64 of file Scavenger.h.

template<typename T>
typedef std::list<T *> Scavenger< T >::ObjectList
protected

Definition at line 68 of file Scavenger.h.

Constructor & Destructor Documentation

template<typename T >
Scavenger< T >::Scavenger ( int  sec = 2,
int  defaultObjectListSize = 200 
)

Definition at line 96 of file Scavenger.h.

Member Function Documentation

template<typename T>
void Scavenger< T >::claim ( T *  t)

Call from an RT thread etc., to pass ownership of t to us.

Only one thread should be calling this on any given scavenger.

Definition at line 125 of file Scavenger.h.

References Scavenger< T >::m_claimed, Scavenger< T >::m_objects, and Scavenger< T >::pushExcess().

Referenced by DSSIPluginInstance::initialiseGroupMembership().

template<typename T >
void Scavenger< T >::scavenge ( bool  clearNow = false)

Call from a non-RT thread.

Only one thread should be calling this on any given scavenger.

Definition at line 150 of file Scavenger.h.

References Scavenger< T >::clearExcess(), Scavenger< T >::m_claimed, Scavenger< T >::m_lastExcess, Scavenger< T >::m_objects, Scavenger< T >::m_scavenged, and Scavenger< T >::m_sec.

Referenced by DSSIPluginInstance::deactivate().

template<typename T>
void Scavenger< T >::pushExcess ( T *  t)
protected
template<typename T >
void Scavenger< T >::clearExcess ( time_t  sec)
protected

Member Data Documentation

template<typename T>
ObjectTimeList Scavenger< T >::m_objects
protected
template<typename T>
time_t Scavenger< T >::m_sec
protected

Definition at line 66 of file Scavenger.h.

Referenced by Scavenger< T >::scavenge().

template<typename T>
ObjectList Scavenger< T >::m_excess
protected

Definition at line 69 of file Scavenger.h.

Referenced by Scavenger< T >::clearExcess(), and Scavenger< T >::pushExcess().

template<typename T>
time_t Scavenger< T >::m_lastExcess
protected
template<typename T>
QMutex Scavenger< T >::m_excessMutex
protected

Definition at line 71 of file Scavenger.h.

Referenced by Scavenger< T >::clearExcess(), and Scavenger< T >::pushExcess().

template<typename T>
unsigned int Scavenger< T >::m_claimed
protected
template<typename T>
unsigned int Scavenger< T >::m_scavenged
protected

Definition at line 76 of file Scavenger.h.

Referenced by Scavenger< T >::scavenge(), and Scavenger< T >::~Scavenger().


The documentation for this class was generated from the following file: