VR-Forces 4.8 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Classes | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Protected Attributes | Private Types | Friends
makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType > Class Template Reference

Generate NTree (binary tree, quadtree, octree, etc.) class. More...

Inheritance diagram for makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >:
Inheritance graph
[legend]

Classes

class  Bounds
 Set of ranges, one for each dimension. More...
 
struct  Power
 Compute exponents at compile time (for array length). More...
 
struct  Power< A, 0 >
 
class  Query
 Query interface. More...
 
struct  Range
 One dimensional range (i.e. min/max). More...
 
class  Subcell
 Represents the subcell in the parent cell. More...
 

Public Member Functions

int getLevel () const
 Return level of this tree. More...
 
const BoundsgetBounds () const
 Return the bounds of this tree. More...
 
boost::shared_ptr< DtNTreegetParent () const
 Return the parent of this tree, if it exists. More...
 
T & getData ()
 Accessors for user data. More...
 
const T & getData () const
 

Static Public Member Functions

static boost::shared_ptr< DtNTreeCreate (const Bounds &bounds)
 Factory, create a top level root cell. More...
 

Static Public Attributes

static const unsigned int NumberOfIndices = Power<2, Dimensions>::value
 Number of subcells. More...
 

Protected Member Functions

 DtNTree (DtNTree &parent, const Bounds &bounds)
 Constructor for creating children trees. More...
 
 DtNTree (const Bounds &bounds, unsigned int level)
 Constructor for creating root tree. More...
 
virtual boost::shared_ptr
< DtNTree
createSubcell (Subcell &cell)
 Default implementation of query createSubcell. More...
 
virtual void visit (Query &query)
 Default implementation of query visit. More...
 

Protected Attributes

const ParentPtr myParent
 Pointer to parent node if it exists. More...
 
const int myLevel
 Level of this cell. More...
 
const Bounds myBounds
 Bounds of this cell. More...
 
Subcell mySubcells [NumberOfIndices]
 Subcells. More...
 
myData
 User data stored in this tree. More...
 

Private Types

typedef SubcellTraits< DtNTree >
::Ptr 
Ptr
 
typedef SubcellTraits< DtNTree >
::ParentPtr 
ParentPtr
 

Static Private Member Functions

template<typename Z >
static boost::shared_ptr< Z > Get (const boost::shared_ptr< Z > &p)
 These functions allow shared and weak pointers to be treated the same. More...
 
template<typename Z >
static boost::shared_ptr< Z > Get (const boost::weak_ptr< Z > &p)
 
template<typename Z >
static void Set (boost::shared_ptr< Z > &p, const boost::shared_ptr< Z > &to)
 
template<typename Z >
static void Set (boost::shared_ptr< Z > &p, const boost::weak_ptr< Z > &to)
 
template<typename Z >
static void Set (boost::weak_ptr< Z > &p, const boost::shared_ptr< Z > &to)
 
template<typename Z >
static void Set (boost::weak_ptr< Z > &p, const boost::weak_ptr< Z > &to)
 

Friends

class Query
 

Detailed Description

template<typename T, unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
class makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >

Generate NTree (binary tree, quadtree, octree, etc.) class.

This consists of the tree itself and a query class which is a general search algorithm. The tree itself is a container and has very little functionality. In the nomenclature of this class, a tree has a number of subcells, each of which has a pointer to itself own (sub)tree, although that poitner can be empty if the subtree hasn't been created yet. Trees are independent of each other, while subcells are part of a tree. Trees are always managed by shared pointers. The shared/weak pointer policies control the ownership semantics of the trees. The shared policy (default) has the subcells owning their subtrees, so they are never automatically removed. The weak pointer policy has subcells holding their subtrees with weak pointers. This means that the users must save shared pointers to the subtrees that they want to keep in existence. If this is done then when the last reference to the subcell is removed, the subcell will automatically be removed from the tree without any further work.

Member Typedef Documentation

template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
typedef SubcellTraits<DtNTree>::Ptr makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::Ptr
private
template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
typedef SubcellTraits<DtNTree>::ParentPtr makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::ParentPtr
private

Constructor & Destructor Documentation

template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::DtNTree ( DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType > &  parent,
const Bounds bounds 
)
inlineexplicitprotected
template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::DtNTree ( const Bounds bounds,
unsigned int  level 
)
inlineexplicitprotected

Member Function Documentation

template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
template<typename Z >
static boost::shared_ptr<Z> makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::Get ( const boost::shared_ptr< Z > &  p)
inlinestaticprivate

These functions allow shared and weak pointers to be treated the same.

Weak pointers cannot be directly converted into shared, lock() must be called.

Referenced by makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::getParent().

template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
template<typename Z >
static boost::shared_ptr<Z> makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::Get ( const boost::weak_ptr< Z > &  p)
inlinestaticprivate
template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
template<typename Z >
static void makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::Set ( boost::shared_ptr< Z > &  p,
const boost::shared_ptr< Z > &  to 
)
inlinestaticprivate
template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
template<typename Z >
static void makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::Set ( boost::shared_ptr< Z > &  p,
const boost::weak_ptr< Z > &  to 
)
inlinestaticprivate
template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
template<typename Z >
static void makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::Set ( boost::weak_ptr< Z > &  p,
const boost::shared_ptr< Z > &  to 
)
inlinestaticprivate
template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
template<typename Z >
static void makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::Set ( boost::weak_ptr< Z > &  p,
const boost::weak_ptr< Z > &  to 
)
inlinestaticprivate
template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
static boost::shared_ptr<DtNTree> makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::Create ( const Bounds bounds)
inlinestatic

Factory, create a top level root cell.

References makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::DtNTree().

template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
int makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::getLevel ( ) const
inline
template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
const Bounds& makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::getBounds ( ) const
inline
template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
boost::shared_ptr<DtNTree> makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::getParent ( ) const
inline
template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
T& makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::getData ( void  )
inline
template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
const T& makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::getData ( void  ) const
inline
template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
virtual boost::shared_ptr<DtNTree> makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::createSubcell ( Subcell cell)
inlineprotectedvirtual
template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
virtual void makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::visit ( Query query)
inlineprotectedvirtual

Friends And Related Function Documentation

template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
friend class Query
friend

Member Data Documentation

template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
const unsigned int makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::NumberOfIndices = Power<2, Dimensions>::value
static
template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
const ParentPtr makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::myParent
protected

Pointer to parent node if it exists.

Referenced by makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::getParent().

template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
const int makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::myLevel
protected
template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
const Bounds makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::myBounds
protected
template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
Subcell makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::mySubcells[NumberOfIndices]
protected
template<typename T , unsigned int Dimensions = 3, typename Mutex = DtNTreeNullMutexPolicy, template< typename > class SubcellTraits = DtNTreeSharedPointerTraits, typename BoundsType = double>
T makVrv::DtNTree< T, Dimensions, Mutex, SubcellTraits, BoundsType >::myData
protected

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

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)