You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
168 lines
6.9 KiB
Plaintext
168 lines
6.9 KiB
Plaintext
3 weeks ago
|
// Included by octree
|
||
|
|
||
|
/**\typedef template<typename T_,typename R_,typename P_,typename O_,typename OP_,int d_> \
|
||
|
* typedef O_ octree_path<T_,R_,P_,O_,OP_,d_>::octree_type;
|
||
|
* \brief Shorthand for an octree over which this class can iterate.
|
||
|
*/
|
||
|
|
||
|
/**\typedef template<typename T_,typename R_,typename P_,typename O_,typename OP_,int d_> \
|
||
|
* typedef OP_ octree_path<T_,R_,P_,O_,OP_,d_>::octree_pointer;
|
||
|
* \brief Shorthand for a pointer to an octree over which this class can iterate.
|
||
|
*/
|
||
|
|
||
|
/**\typedef template<typename T_,typename R_,typename P_,typename O_,typename OP_,int d_> \
|
||
|
* typedef typename O_::allocator_type
|
||
|
* octree_path<T_,R_,P_,O_,OP_,d_>::octree_allocator_type; \brief Shorthand for the allocator used
|
||
|
* by the octrees over which this class iterates.
|
||
|
*/
|
||
|
|
||
|
/**\typedef template<typename T_,typename R_,typename P_,typename O_,typename OP_,int d_> \
|
||
|
* typedef typename O_::octree_node_reference
|
||
|
* octree_path<T_,R_,P_,O_,OP_,d_>::octree_node_reference; \brief Shorthand for a reference to a
|
||
|
* node in the octree.
|
||
|
*/
|
||
|
|
||
|
/**\typedef template<typename T_,typename R_,typename P_,typename O_,typename OP_,int d_> \
|
||
|
* typedef typename O_::octree_node_pointer
|
||
|
* octree_path<T_,R_,P_,O_,OP_,d_>::octree_node_pointer; \brief Shorthand for a pointer to a node in
|
||
|
* the octree.
|
||
|
*/
|
||
|
|
||
|
/**\typedef template<typename T_,typename R_,typename P_,typename O_,typename OP_,int d_> \
|
||
|
* typedef octree_path< T_, T_&, T_*, O_, O_*, d_ > octree_path<T_,R_,P_,O_,OP_,d_>::path;
|
||
|
* \brief Shorthand for a non-const octree path (regardless of whether the current path is const or
|
||
|
* not).
|
||
|
*/
|
||
|
|
||
|
/**\typedef template<typename T_,typename R_,typename P_,typename O_,typename OP_,int d_> \
|
||
|
* typedef octree_path< T_, const T_&, const T_*, O_, const O_*, d_ >
|
||
|
* octree_path<T_,R_,P_,O_,OP_,d_>::const_path; \brief Shorthand for a const octree path (regardless
|
||
|
* of whether the current path is const or not).
|
||
|
*/
|
||
|
|
||
|
/**\typedef template<typename T_,typename R_,typename P_,typename O_,typename OP_,int d_> \
|
||
|
* typedef octree_path< T_, R_, P_, O_, OP_, d_ >
|
||
|
* octree_path<T_,R_,P_,O_,OP_,d_>::self_path; \brief Shorthand for an path of the same type as the
|
||
|
* current path (be it const or not).
|
||
|
*/
|
||
|
|
||
|
/**\var template<typename T_,typename R_,typename P_,typename O_,typename OP_,int d_> \
|
||
|
* octree_node_pointer octree_path<T_,R_,P_,O_,OP_,d_>::_M_root
|
||
|
*\brief The root of the octree we are iterating over.
|
||
|
*/
|
||
|
|
||
|
/**\var template<typename T_,typename R_,typename P_,typename O_,typename OP_,int d_> \
|
||
|
* std::vector<octree_node_pointer> octree_path<T_,R_,P_,O_,OP_,d_>::_M_parents
|
||
|
*\brief List of parent nodes
|
||
|
*/
|
||
|
|
||
|
/**\var template<typename T_,typename R_,typename P_,typename O_,typename OP_,int d_> \
|
||
|
* std::vector<int> octree_path<T_,R_,P_,O_,OP_,d_>::_M_indices
|
||
|
*\brief List of parent child indices
|
||
|
*/
|
||
|
|
||
|
/**\var template<typename T_,typename R_,typename P_,typename O_,typename OP_,int d_> \
|
||
|
* octree_node_pointer octree_path<T_,R_,P_,O_,OP_,d_>::_M_current_node
|
||
|
*\brief Current node at the head of the path
|
||
|
*/
|
||
|
|
||
|
/**\brief Default constructor.
|
||
|
*/
|
||
|
template <typename T_, typename R_, typename P_, typename O_, typename OP_, int d_>
|
||
|
octree_path<T_, R_, P_, O_, OP_, d_>::octree_path()
|
||
|
{
|
||
|
this->_M_root = nullptr;
|
||
|
this->_M_current_node = nullptr;
|
||
|
}
|
||
|
|
||
|
/**\brief Simplest valid constructor.
|
||
|
*
|
||
|
* This creates a path that points to the root node of the specified \a tree.
|
||
|
*/
|
||
|
template <typename T_, typename R_, typename P_, typename O_, typename OP_, int d_>
|
||
|
octree_path<T_, R_, P_, O_, OP_, d_>::octree_path(octree_pointer tree)
|
||
|
{
|
||
|
this->_M_root = tree->root();
|
||
|
this->_M_current_node = tree->root();
|
||
|
}
|
||
|
|
||
|
/**\brief Simplest valid constructor.
|
||
|
*
|
||
|
* This creates a path that points to the \a root node of the specified tree.
|
||
|
*/
|
||
|
template <typename T_, typename R_, typename P_, typename O_, typename OP_, int d_>
|
||
|
octree_path<T_, R_, P_, O_, OP_, d_>::octree_path(octree_node_pointer root)
|
||
|
{
|
||
|
this->_M_root = root;
|
||
|
this->_M_current_node = root;
|
||
|
}
|
||
|
|
||
|
/**\brief Flexible constructor.
|
||
|
*
|
||
|
* This creates a path that points to a particular node of the specified \a tree,
|
||
|
* given a \a path of nodes to descend from the root of the \a tree.
|
||
|
*/
|
||
|
template <typename T_, typename R_, typename P_, typename O_, typename OP_, int d_>
|
||
|
octree_path<T_, R_, P_, O_, OP_, d_>::octree_path(
|
||
|
octree_node_pointer root, std::vector<int>& children)
|
||
|
{
|
||
|
this->_M_root = root;
|
||
|
this->_M_current_node = root;
|
||
|
for (std::vector<int>::iterator cit = children.begin(); cit != children.end(); ++cit)
|
||
|
{
|
||
|
this->_M_parents.push_back(this->_M_current_node);
|
||
|
this->_M_indices.push_back(*cit);
|
||
|
this->_M_current_node = (*this->_M_current_node)[*cit];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**\fn template< typename T_, typename R_, typename P_, typename O_, typename OP_, int d_ > \
|
||
|
* octree_node_reference octree_path<T_,R_,P_,O_,OP_,d_>::operator * () const
|
||
|
*\brief Provide access to the node at the current path head.
|
||
|
*/
|
||
|
|
||
|
/**\fn template< typename T_, typename R_, typename P_, typename O_, typename OP_, int d_ > \
|
||
|
* octree_node_pointer octree_path<T_,R_,P_,O_,OP_,d_>::operator -> () const
|
||
|
*\brief Provide access to the node at the current path head.
|
||
|
*/
|
||
|
|
||
|
/**\fn template< typename T_, typename R_, typename P_, typename O_, typename OP_, int d_ > \
|
||
|
* int octree_path<T_,R_,P_,O_,OP_,d_>::level() const
|
||
|
*\brief Return the depth of the current path.
|
||
|
*
|
||
|
* The root node of the octree is at level 0. Its children are all at level 1. Their children are at
|
||
|
*level 2, and so forth.
|
||
|
*/
|
||
|
|
||
|
/**\fn template< typename T_, typename R_, typename P_, typename O_, typename OP_, int d_ > \
|
||
|
* bool octree_path<T_,R_,P_,O_,OP_,d_>::operator == ( const path& it )
|
||
|
*\brief Compare two paths for equality.
|
||
|
*
|
||
|
* Iterators are considered equal iff they have the same octree and point to the same node
|
||
|
*currently. The rest of the paths' state is ignored by the test.
|
||
|
*/
|
||
|
|
||
|
/**\fn template< typename T_, typename R_, typename P_, typename O_, typename OP_, int d_ > \
|
||
|
* bool octree_path<T_,R_,P_,O_,OP_,d_>::operator == ( const const_path& it )
|
||
|
*\brief Compare two paths for equality.
|
||
|
*
|
||
|
* Iterators are considered equal iff they have the same octree and point to the same node
|
||
|
*currently. The rest of the paths' state is ignored by the test.
|
||
|
*/
|
||
|
|
||
|
/**\fn template< typename T_, typename R_, typename P_, typename O_, typename OP_, int d_ > \
|
||
|
* bool octree_path<T_,R_,P_,O_,OP_,d_>::operator != ( const path& it )
|
||
|
*\brief Compare two paths for inequality.
|
||
|
*
|
||
|
* Iterators are considered equal iff they have the same octree and point to the same node
|
||
|
*currently. The rest of the paths' state is ignored by the test.
|
||
|
*/
|
||
|
|
||
|
/**\fn template< typename T_, typename R_, typename P_, typename O_, typename OP_, int d_ > \
|
||
|
* bool octree_path<T_,R_,P_,O_,OP_,d_>::operator != ( const const_path& it )
|
||
|
*\brief Compare two paths for inequality.
|
||
|
*
|
||
|
* Iterators are considered equal iff they have the same octree and point to the same node
|
||
|
*currently. The rest of the paths' state is ignored by the test.
|
||
|
*/
|