• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /////////////////////////////////////////////////////////////////////////////
2 //
3 // (C) Copyright Ion Gaztanaga  2007-2013
4 //
5 // Distributed under the Boost Software License, Version 1.0.
6 //    (See accompanying file LICENSE_1_0.txt or copy at
7 //          http://www.boost.org/LICENSE_1_0.txt)
8 //
9 // See http://www.boost.org/libs/intrusive for documentation.
10 //
11 /////////////////////////////////////////////////////////////////////////////
12 
13 #ifndef BOOST_INTRUSIVE_TREE_NODE_HPP
14 #define BOOST_INTRUSIVE_TREE_NODE_HPP
15 
16 #ifndef BOOST_CONFIG_HPP
17 #  include <boost/config.hpp>
18 #endif
19 
20 #if defined(BOOST_HAS_PRAGMA_ONCE)
21 #  pragma once
22 #endif
23 
24 #include <boost/intrusive/detail/config_begin.hpp>
25 #include <boost/intrusive/detail/workaround.hpp>
26 #include <boost/intrusive/pointer_rebind.hpp>
27 
28 namespace boost {
29 namespace intrusive {
30 
31 template<class VoidPointer>
32 struct tree_node
33 {
34    typedef typename pointer_rebind<VoidPointer, tree_node>::type  node_ptr;
35 
36    node_ptr parent_, left_, right_;
37 };
38 
39 template<class VoidPointer>
40 struct tree_node_traits
41 {
42    typedef tree_node<VoidPointer> node;
43 
44    typedef typename node::node_ptr   node_ptr;
45    typedef typename pointer_rebind<VoidPointer, const node>::type const_node_ptr;
46 
get_parentboost::intrusive::tree_node_traits47    BOOST_INTRUSIVE_FORCEINLINE static node_ptr get_parent(const const_node_ptr & n)
48    {  return n->parent_;  }
49 
get_parentboost::intrusive::tree_node_traits50    BOOST_INTRUSIVE_FORCEINLINE static node_ptr get_parent(const node_ptr & n)
51    {  return n->parent_;  }
52 
set_parentboost::intrusive::tree_node_traits53    BOOST_INTRUSIVE_FORCEINLINE static void set_parent(node_ptr n, node_ptr p)
54    {  n->parent_ = p;  }
55 
get_leftboost::intrusive::tree_node_traits56    BOOST_INTRUSIVE_FORCEINLINE static node_ptr get_left(const const_node_ptr & n)
57    {  return n->left_;  }
58 
get_leftboost::intrusive::tree_node_traits59    BOOST_INTRUSIVE_FORCEINLINE static node_ptr get_left(const node_ptr & n)
60    {  return n->left_;  }
61 
set_leftboost::intrusive::tree_node_traits62    BOOST_INTRUSIVE_FORCEINLINE static void set_left(node_ptr n, node_ptr l)
63    {  n->left_ = l;  }
64 
get_rightboost::intrusive::tree_node_traits65    BOOST_INTRUSIVE_FORCEINLINE static node_ptr get_right(const const_node_ptr & n)
66    {  return n->right_;  }
67 
get_rightboost::intrusive::tree_node_traits68    BOOST_INTRUSIVE_FORCEINLINE static node_ptr get_right(const node_ptr & n)
69    {  return n->right_;  }
70 
set_rightboost::intrusive::tree_node_traits71    BOOST_INTRUSIVE_FORCEINLINE static void set_right(node_ptr n, node_ptr r)
72    {  n->right_ = r;  }
73 };
74 
75 } //namespace intrusive
76 } //namespace boost
77 
78 #include <boost/intrusive/detail/config_end.hpp>
79 
80 #endif //BOOST_INTRUSIVE_TREE_NODE_HPP
81