OpenWalnut
1.5.0dev
|
Class to wrap around the osg Group node and providing a thread safe add/removal mechanism. More...
#include <WGEGroupNode.h>
Classes | |
struct | ChildOperation |
A struct denoting an operation on this group. More... | |
class | SafeUpdaterCallback |
Update callback which inserts and removes nodes from m_childRemovalQueue and m_childInsertionQueue to the group node. More... | |
Public Types | |
typedef WPredicateHelper::ArbitraryPredicateBase< osg::ref_ptr< osg::Node > const > | NodePredicate |
The base type of predicate. More... | |
Public Member Functions | |
WGEGroupNode () | |
Default constructor. More... | |
void | insert (osg::ref_ptr< osg::Node > node) |
Adds the specified node to the child list of this node in a safe manner. More... | |
void | remove (osg::ref_ptr< osg::Node > node) |
Removes the specified node from this group in a thread safe manner. More... | |
void | remove_if (std::shared_ptr< WGEGroupNode::NodePredicate > predicate) |
Removes a node if the specified predicate evaluates to true. More... | |
void | clear () |
Removes all children from this node. More... | |
Protected Types | |
enum | ChildOperationType { INSERT = 0 , REMOVE , REMOVE_IF , CLEAR } |
The type of operation to perform. More... | |
Protected Member Functions | |
virtual | ~WGEGroupNode () |
Destructor. More... | |
Protected Attributes | |
osg::ref_ptr< SafeUpdaterCallback > | m_nodeUpdater |
Node callback used to update this root node. More... | |
std::queue< std::shared_ptr< ChildOperation > > | m_childOperationQueue |
Queue of childs that need to be added/removed during the next update cycle. More... | |
std::shared_mutex | m_childOperationQueueLock |
Lock used for inserting and removing childs into the child insertion/removal queue. More... | |
bool | m_childOperationQueueDirty |
Flag denoting whether the m_childOperationQueue should be considered during the next update of the node. More... | |
bool | m_removeAll |
True whenever all child nodes should be removed. More... | |
Class to wrap around the osg Group node and providing a thread safe add/removal mechanism.
Please be sure to use addUpdateCallback() to set your own update callbacks instead of setUpdateCallback, as this class already has set a callback, which would be overwritten by a subsequent call to setUpdateCallback(). It is derived from osg::MatrixTransform to allow easy transformations of a whole bunch of nodes.
Definition at line 47 of file WGEGroupNode.h.
typedef WPredicateHelper::ArbitraryPredicateBase< osg::ref_ptr< osg::Node > const > WGEGroupNode::NodePredicate |
The base type of predicate.
Use a specific WPredicateHelper::ArbitraryPredicate instance. For details, see WPredicateHelper::ArbitraryPredicateBase.
Definition at line 76 of file WGEGroupNode.h.
|
protected |
The type of operation to perform.
Enumerator | |
---|---|
REMOVE | insert the specified node |
REMOVE_IF | remove the specified node |
CLEAR | remove all items where the predicate evaluates to true clear group node completely |
Definition at line 123 of file WGEGroupNode.h.
WGEGroupNode::WGEGroupNode | ( | ) |
|
protectedvirtual |
Destructor.
Definition at line 50 of file WGEGroupNode.cpp.
void WGEGroupNode::clear | ( | ) |
Removes all children from this node.
Definition at line 79 of file WGEGroupNode.cpp.
References CLEAR, m_childOperationQueue, m_childOperationQueueDirty, and m_childOperationQueueLock.
void WGEGroupNode::insert | ( | osg::ref_ptr< osg::Node > | node | ) |
Adds the specified node to the child list of this node in a safe manner.
OSG officially requires nodes to be added exclusively during update callbacks. Using this method it is ensured to be added during update cycle.
node | the node to add. |
Definition at line 55 of file WGEGroupNode.cpp.
References m_childOperationQueue, m_childOperationQueueDirty, and m_childOperationQueueLock.
Referenced by WGEOffscreenRenderNode::addGeometryRenderPass(), WGEOffscreenRenderNode::addRenderPass(), WGEBorderLayout::WGEBorderLayout(), and WGEOffscreenRenderNode::WGEOffscreenRenderNode().
void WGEGroupNode::remove | ( | osg::ref_ptr< osg::Node > | node | ) |
Removes the specified node from this group in a thread safe manner.
It returns if the node has been removed.
node | the node to remove |
Definition at line 63 of file WGEGroupNode.cpp.
References m_childOperationQueue, m_childOperationQueueDirty, m_childOperationQueueLock, and REMOVE.
void WGEGroupNode::remove_if | ( | std::shared_ptr< WGEGroupNode::NodePredicate > | predicate | ) |
Removes a node if the specified predicate evaluates to true.
predicate | the predicate. |
Definition at line 71 of file WGEGroupNode.cpp.
References m_childOperationQueue, m_childOperationQueueDirty, m_childOperationQueueLock, and REMOVE_IF.
|
protected |
Queue of childs that need to be added/removed during the next update cycle.
It is a pair per operation, where the bool is denoting removal or insertion.
Definition at line 172 of file WGEGroupNode.h.
Referenced by clear(), insert(), WGEGroupNode::SafeUpdaterCallback::operator()(), remove(), and remove_if().
|
protected |
Flag denoting whether the m_childOperationQueue should be considered during the next update of the node.
Definition at line 182 of file WGEGroupNode.h.
Referenced by clear(), insert(), WGEGroupNode::SafeUpdaterCallback::operator()(), remove(), and remove_if().
|
protected |
Lock used for inserting and removing childs into the child insertion/removal queue.
Definition at line 177 of file WGEGroupNode.h.
Referenced by clear(), insert(), WGEGroupNode::SafeUpdaterCallback::operator()(), remove(), and remove_if().
|
protected |
Node callback used to update this root node.
Definition at line 118 of file WGEGroupNode.h.
Referenced by WGEGroupNode().
|
protected |
True whenever all child nodes should be removed.
Definition at line 187 of file WGEGroupNode.h.
Referenced by WGEGroupNode::SafeUpdaterCallback::operator()().