13 #ifndef SPATIAL_BIDIRECTIONAL_HPP
14 #define SPATIAL_BIDIRECTIONAL_HPP
16 #include "spatial_node.hpp"
32 template <
typename Link,
typename Rank>
42 typedef typename Link::value_type*
pointer;
107 const rank_type&
rank()
const {
return static_cast<const Rank&
>(*this); }
113 {
return static_cast<const Rank&
>(*this)(); }
144 template <
typename Link,
typename Rank>
154 typedef const typename Link::value_type*
pointer;
212 rank_type
rank()
const {
return static_cast<const Rank
>(*this); }
219 {
return static_cast<const Rank&
>(*this)(); }
243 #endif // SPATIAL_BIDIRECTIONAL_HPP
Bidirectional_iterator(const Rank &rank_, node_ptr node_, dimension_type node_dim_)
Initialize the node at construction time.
reference operator*()
Returns the reference to the value pointed to by the iterator.
A bidirectional iterator traversing all node in the tree in inorder traversal.
A bidirectional iterator traversing all node in the tree in inorder traversal.
dimension_type dimension() const
Return the current number of dimensions given by the Rank of the iterator.
Link::const_node_ptr node_ptr
The type for the node pointed to by the iterator.
bool operator!=(const Const_node_iterator< Link > &x) const
A bidirectional iterator can be compared for inequality with a node iterator if they work on identica...
node_ptr node
The node pointed to by the iterator.
const Link::value_type * pointer
The pointer type of the object pointed to by the iterator.
rank_type rank() const
Return the current Rank type used by the iterator.
const rank_type & rank() const
Return the current Rank type used by the iterator.
Bidirectional_iterator()
Build an uninitialized iterator.
node_ptr node
The pointer to the current node.
Link::value_type * pointer
The pointer type of the object pointed to by the iterator.
dimension_type dimension() const
Return the number of dimensions stored by the Rank of the iterator.
std::ptrdiff_t difference_type
The difference_type returned by the distance between 2 iterators.
node_ptr node
The pointer to the current node.
Link::invariant_category invariant_category
The invariant category of the the iterator.
Rank rank_type
The type of rank used by the iterator.
const Kdtree_link< Key, Value >::value_type & const_value(const Node< Kdtree_link< Key, Value > > *node)
This function converts a pointer on a node into a value for a Kdtree_link type.
reference operator*()
Returns the reference to the value pointed to by the iterator.
dimension_type node_dim
The dimension of the current node.
const Link::value_type & reference
The reference type of the object pointed to by the iterator.
Rank rank_type
The type of rank used by the iterator.
mutate< typename Link::value_type >::type value_type
The value_type can receive a copy of the reference pointed to be the iterator.
Link::value_type & reference
The reference type of the object pointed to by the iterator.
Link::node_ptr node_ptr
The type for the node pointed to by the iterator.
std::size_t dimension_type
Defines the type for the dimension as being a size.
mutate< typename Link::value_type >::type value_type
The value_type can receive a copy of the reference pointed to be the iterator.
bool operator==(const Const_node_iterator< Link > &x) const
A bidirectional iterator can be compared with a node iterator if they work on identical linking modes...
Link::invariant_category invariant_category
The invariant category of the the iterator.
Const_bidirectional_iterator()
Build an uninitialized iterator.
Const_bidirectional_iterator(const Rank &rank_, node_ptr node_, dimension_type node_dim_)
Initialize the node at construction time.
The main namespace used in the library.
A common template for constant bidirectional iterators that work on identical modes of linking...
std::ptrdiff_t difference_type
The difference_type returned by the distance between 2 iterators.
A common template for bidirectional iterators that work on identical modes of linking.
bool operator==(const Const_node_iterator< Link > &x) const
A bidirectional iterator can be compared with a node iterator if they work on identical linking modes...
std::bidirectional_iterator_tag iterator_category
The iterator category that is always Bidirectional_iterator_tag.
bool operator!=(const Const_node_iterator< Link > &x) const
A bidirectional iterator can be compared for inequality with a node iterator if they work on identica...
Kdtree_link< Key, Value >::value_type & value(Node< Kdtree_link< Key, Value > > *node)
This function converts a pointer on a node into a value for a Kdtree_link type.
dimension_type node_dim
The dimension of the current node.
pointer operator->()
Returns a pointer to the value pointed to by the iterator.
std::bidirectional_iterator_tag iterator_category
The iterator category that is always Bidirectional_iterator_tag.
pointer operator->()
Returns a pointer to the value pointed to by the iterator.