VR-Forces 5.0.1 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions | Public Attributes | Protected Member Functions | Protected Attributes | Private Member Functions
DtSubordinateManager Class Reference

Objects may contain a collection of other objects, such as overlays or pseudo-aggregate entities. This class defines an interface for maintaining a collection of these subObjects. What's actually stored is a DtSimObjectReferenceList of the object DtUUIDs.

This class accesses Next Frame State only and is not thread safe. Use only from within the DtLocalObject tick or other sections where multiple threads are not running on this data.

Public Member Functions

 DtSubordinateManager (const DtSimulationServices *, DtLocalObject *owner)
 
virtual ~DtSubordinateManager ()
 
virtual bool addSubordinate (const DtUUID &subordinate, int designator=0)
 
virtual bool addSubordinateBefore (const DtUUID &subordinate, const DtUUID &beforeObject, int designator=0)
 
virtual bool addSubordinateAfter (const DtUUID &subordinate, const DtUUID &afterObject, int designator=0)
 
virtual bool removeSubordinate (const DtUUID &subordinate)
 
virtual void removeAllSubordinates ()
 
virtual int numSubordinates () const
 
virtual void resetDesignatorsToSubordinateOrder ()
 
virtual DtSimObjectReference firstSubordinate () const
 
virtual DtSimObjectReference lastSubordinate () const
 
virtual DtSimObjectReference firstHealthySubordinate () const
 
virtual bool isSubordinate (const DtUUID &id) const
 
virtual int designatorForSubordinate (const DtUUID &id) const
 
virtual DtSimObjectReference subordinateForDesignator (int designator) const
 
virtual bool setDesignator (const DtUUID &id, int designator)
 
virtual int maxUsedDesignator () const
 
virtual void reorderToDesignatorOrder ()
 
virtual void designatorOrderedList (std::vector< DtUUID > &designatorOrderedList) const
 
virtual void setSubordinateOrder (const std::vector< DtUUID > &orderedList)
 
virtual int nextAvailableDesignator (int cur=0) const
 
bool needsReorderToDesignatorOrder () const
 
const DtSimObjectReferenceListsubordinates () const
 
DtSimObjectReferenceListnextFrameSubordinates ()
 
virtual void invalidate ()
 

Public Attributes

boost::signals2::signal< void(const
DtUUID &)> 
signal_subordinateRemoved
 
boost::signals2::signal< void(const
DtUUID &)> 
signal_subordinateAdded
 
boost::signals2::signal< void()> signal_designatorOrderChanged
 

Protected Member Functions

virtual bool findSubordinateItem (const DtUUID &id) const
 
virtual void subordinateDeleted (const DtUUID &)
 

Protected Attributes

const DtSimulationServicesmySimulationServices
 
std::map< DtUUID, intmyDesignatorsByUUID
 
std::map< int, DtUUIDmyUnitsByDesignator
 
std::set< intmyAvailableDesignators
 
tbb::spin_rw_mutex myMutex
 
bool myNeedsReorderToDesignatorOrder
 
DtSimObjectReferenceList mySubordinates
 
DtLocalObjectmyOwner
 
boost::signals2::scoped_connection myLocalObjectDeletedConnection
 
boost::signals2::scoped_connection mySubordinateDeletedConnection
 

Private Member Functions

 DtSubordinateManager (const DtSubordinateManager &orig)
 
const DtSubordinateManageroperator= (const DtSubordinateManager &orig)
 

Constructor & Destructor Documentation

DtSubordinateManager::DtSubordinateManager ( const DtSubordinateManager orig)
private

Copy Constructor.

DtSubordinateManager::DtSubordinateManager ( const DtSimulationServices ,
DtLocalObject owner 
)

Constructor.

virtual DtSubordinateManager::~DtSubordinateManager ( )
virtual

Destructor.

Member Function Documentation

const DtSubordinateManager& DtSubordinateManager::operator= ( const DtSubordinateManager orig)
private

Assignment Operator.

virtual bool DtSubordinateManager::addSubordinate ( const DtUUID subordinate,
int  designator = 0 
)
virtual

All adding subordinate calls will fail if the specified designator is already in use. 0 is the only designator which is allowed for multiple subordinates. (0 implies no designator).

Adds an object as a subordinate.

virtual bool DtSubordinateManager::addSubordinateBefore ( const DtUUID subordinate,
const DtUUID beforeObject,
int  designator = 0 
)
virtual

If designator is 0 will call resetDesignatorsToSubordinateOrder as a side effect.

virtual bool DtSubordinateManager::addSubordinateAfter ( const DtUUID subordinate,
const DtUUID afterObject,
int  designator = 0 
)
virtual

note that if the afterObject is not found, the object is added to the end of the list. If designator is 0 will call resetDesignatorsToSubordinateOrder as a side effect

virtual bool DtSubordinateManager::removeSubordinate ( const DtUUID subordinate)
virtual

Removes given object as a subordinate.

virtual void DtSubordinateManager::removeAllSubordinates ( )
virtual

note that if the beforeObject is not found, the object is added to the end of the list

virtual int DtSubordinateManager::numSubordinates ( ) const
virtual

Returns the number of subrodinates managed by this object.

virtual void DtSubordinateManager::resetDesignatorsToSubordinateOrder ( )
virtual

Given the current subordinate order, reset all designators given the order.

virtual DtSimObjectReference DtSubordinateManager::firstSubordinate ( ) const
virtual

useful to be able to get the first or last in the list without needed to spawn an iterator.

virtual DtSimObjectReference DtSubordinateManager::lastSubordinate ( ) const
virtual
virtual DtSimObjectReference DtSubordinateManager::firstHealthySubordinate ( ) const
virtual
virtual bool DtSubordinateManager::isSubordinate ( const DtUUID id) const
virtual

Returns true if this object is listed in this subordinate manager.

virtual int DtSubordinateManager::designatorForSubordinate ( const DtUUID id) const
virtual

Returns the designator number for a subordinate in the list. Note that 0 is the only designator more than one entity can have.

virtual DtSimObjectReference DtSubordinateManager::subordinateForDesignator ( int  designator) const
virtual

Returns the subordinate with a particular designator. Does not work for designator = 0.

virtual bool DtSubordinateManager::setDesignator ( const DtUUID id,
int  designator 
)
virtual

Sets the designator of a subordinate to the specified value. This call will fail (and return false) if the specified designator is already in use. 0 is the only designator that can be used by more that one subordinate.

virtual int DtSubordinateManager::maxUsedDesignator ( ) const
virtual

Returns the highest used designator. (there may be holes in the sequence)

virtual void DtSubordinateManager::reorderToDesignatorOrder ( )
virtual

Causes the order of the subordinate list to be in ascending designator order. Any with no designator (designator = 0) will appear in an undefined order at the end of the list.

virtual void DtSubordinateManager::designatorOrderedList ( std::vector< DtUUID > &  designatorOrderedList) const
virtual

Returns list of DtUUIDs, ordered from lowest to highest designator.

virtual void DtSubordinateManager::setSubordinateOrder ( const std::vector< DtUUID > &  orderedList)
virtual

Removes all subordinates from the subordinate manager and then adds new subordinates in the order given by orderedList.

virtual int DtSubordinateManager::nextAvailableDesignator ( int  cur = 0) const
virtual

Returns the highest next designator based on the designator table and the current designator assigned.

bool DtSubordinateManager::needsReorderToDesignatorOrder ( ) const
inline
const DtSimObjectReferenceList& DtSubordinateManager::subordinates ( ) const

Provides a list of subordinates. Note that this list is not necessarily in designator order; for that, use designatorOrderedList().

DtSimObjectReferenceList& DtSubordinateManager::nextFrameSubordinates ( )
virtual void DtSubordinateManager::invalidate ( )
virtual
virtual bool DtSubordinateManager::findSubordinateItem ( const DtUUID id) const
protectedvirtual
virtual void DtSubordinateManager::subordinateDeleted ( const DtUUID )
protectedvirtual

Member Data Documentation

boost::signals2::signal<void (const DtUUID&)> DtSubordinateManager::signal_subordinateRemoved
mutable
boost::signals2::signal<void (const DtUUID&)> DtSubordinateManager::signal_subordinateAdded
mutable
boost::signals2::signal<void ()> DtSubordinateManager::signal_designatorOrderChanged
const DtSimulationServices* DtSubordinateManager::mySimulationServices
protected
std::map<DtUUID, int> DtSubordinateManager::myDesignatorsByUUID
protected

The table of entity id's and designators is used to associate a designator with each entity. Mutator functions in this class ensure that an entity appears in both lists.

std::map<int, DtUUID> DtSubordinateManager::myUnitsByDesignator
protected
std::set<int> DtSubordinateManager::myAvailableDesignators
mutableprotected
tbb::spin_rw_mutex DtSubordinateManager::myMutex
protected
bool DtSubordinateManager::myNeedsReorderToDesignatorOrder
protected
DtSimObjectReferenceList DtSubordinateManager::mySubordinates
protected

This is a list of the subordinates in order that they were added to the manager – which may not be the designator order.

DtLocalObject* DtSubordinateManager::myOwner
protected
boost::signals2::scoped_connection DtSubordinateManager::myLocalObjectDeletedConnection
protected
boost::signals2::scoped_connection DtSubordinateManager::mySubordinateDeletedConnection
protected

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

Document ID: Generated on Mon Jun 20 00:38:30 EDT 2022 from SVN revision 244029
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)