STL Memory Versioning
Public Types | Public Member Functions | Public Attributes | List of all members
vs::_vs_tree_node< _Key, _Comp > Struct Template Reference

Manages all balancing logic and correlating allocations;. More...

#include <vs_tree.h>

Collaboration diagram for vs::_vs_tree_node< _Key, _Comp >:
Collaboration graph
[legend]

Public Types

typedef _vs_tree_node< _Key, _Comp > * _Ptr_type
 
typedef int size_type
 

Public Member Functions

 _vs_tree_node (const _Key &_value)
 
 _vs_tree_node (const _vs_tree_node &_node)
 
void refresh_node_height ()
 
size_type node_delta_height ()
 
_Ptr_type rebalance ()
 
_Ptr_type turnleft ()
 
_Ptr_type turnright ()
 
_Ptr_type node_insert (const _Key &_value, _Comp comp=_Comp{})
 Fall down recursively, insert and rebalance on the way up. More...
 

Public Attributes

_Key value
 
size_type height = 0
 
_Ptr_type left = nullptr
 
_Ptr_type right = nullptr
 

Detailed Description

template<typename _Key, typename _Comp = std::less<_Key>>
struct vs::_vs_tree_node< _Key, _Comp >

Manages all balancing logic and correlating allocations;.

Definition at line 26 of file vs_tree.h.

Member Typedef Documentation

◆ _Ptr_type

template<typename _Key , typename _Comp = std::less<_Key>>
typedef _vs_tree_node<_Key, _Comp>* vs::_vs_tree_node< _Key, _Comp >::_Ptr_type

Definition at line 30 of file vs_tree.h.

◆ size_type

template<typename _Key , typename _Comp = std::less<_Key>>
typedef int vs::_vs_tree_node< _Key, _Comp >::size_type

Definition at line 31 of file vs_tree.h.

Constructor & Destructor Documentation

◆ _vs_tree_node() [1/2]

template<typename _Key , typename _Comp = std::less<_Key>>
vs::_vs_tree_node< _Key, _Comp >::_vs_tree_node ( const _Key &  _value)
inline

Definition at line 40 of file vs_tree.h.

41  : value(_value){ }

◆ _vs_tree_node() [2/2]

template<typename _Key , typename _Comp = std::less<_Key>>
vs::_vs_tree_node< _Key, _Comp >::_vs_tree_node ( const _vs_tree_node< _Key, _Comp > &  _node)
inline

Definition at line 43 of file vs_tree.h.

44  : value(_node.value), height(_node.height) { }
size_type height
Definition: vs_tree.h:34

Member Function Documentation

◆ node_delta_height()

template<typename _Key , typename _Comp = std::less<_Key>>
size_type vs::_vs_tree_node< _Key, _Comp >::node_delta_height ( )
inline

Definition at line 57 of file vs_tree.h.

58  {
59  size_type lh = (left ? left->height + 1 : 0);
60  size_type rh = (right ? right->height + 1 : 0);
61 
62  return lh - rh;
63  }
_Ptr_type right
Definition: vs_tree.h:36
_Ptr_type left
Definition: vs_tree.h:35

◆ node_insert()

template<typename _Key , typename _Comp = std::less<_Key>>
_Ptr_type vs::_vs_tree_node< _Key, _Comp >::node_insert ( const _Key &  _value,
_Comp  comp = _Comp{} 
)
inline

Fall down recursively, insert and rebalance on the way up.

Definition at line 112 of file vs_tree.h.

112  {})
113  {
114  if (comp(_value, this->value))
115  {
116  if (left)
117  {
118  left = left->node_insert(_value);
119  }
120  else
121  {
122  left = new _vs_tree_node(_value);
123  }
124  }
125  else
126  {
127  if (right)
128  {
129  right = right->node_insert(_value);
130  }
131  else
132  {
133  right = new _vs_tree_node(_value);
134  }
135  }
136 
137  return rebalance();
138  }
_Ptr_type node_insert(const _Key &_value, _Comp comp=_Comp{})
Fall down recursively, insert and rebalance on the way up.
Definition: vs_tree.h:112
_Ptr_type rebalance()
Definition: vs_tree.h:66
_vs_tree_node(const _Key &_value)
Definition: vs_tree.h:40

◆ rebalance()

template<typename _Key , typename _Comp = std::less<_Key>>
_Ptr_type vs::_vs_tree_node< _Key, _Comp >::rebalance ( )
inline

Definition at line 66 of file vs_tree.h.

67  {
69 
70  switch (node_delta_height())
71  {
72  case 2:
73  if (left->node_delta_height() < 0)
74  left = left->turnleft();
75 
76  return turnright();
77 
78  case -2:
79  if (right->node_delta_height() > 0)
80  right = right->turnright();
81  return turnleft();
82 
83  default:
84  return this;
85  }
86  }
void refresh_node_height()
Definition: vs_tree.h:48
size_type node_delta_height()
Definition: vs_tree.h:57
_Ptr_type turnleft()
Definition: vs_tree.h:89
_Ptr_type turnright()
Definition: vs_tree.h:99

◆ refresh_node_height()

template<typename _Key , typename _Comp = std::less<_Key>>
void vs::_vs_tree_node< _Key, _Comp >::refresh_node_height ( )
inline

Definition at line 48 of file vs_tree.h.

49  {
50  size_type lh = (left ? left->height + 1 : 0);
51  size_type rh = (right ? right->height + 1 : 0);
52 
53  height = (lh > rh ? lh : rh);
54  }

◆ turnleft()

template<typename _Key , typename _Comp = std::less<_Key>>
_Ptr_type vs::_vs_tree_node< _Key, _Comp >::turnleft ( )
inline

Definition at line 89 of file vs_tree.h.

89  {
90  _Ptr_type child = right;
91  right = child->left;
92  child->left = this;
94  child->refresh_node_height();
95  return child;
96  }
_vs_tree_node< _Key, _Comp > * _Ptr_type
Definition: vs_tree.h:30

◆ turnright()

template<typename _Key , typename _Comp = std::less<_Key>>
_Ptr_type vs::_vs_tree_node< _Key, _Comp >::turnright ( )
inline

Definition at line 99 of file vs_tree.h.

99  {
100  _Ptr_type child = left;
101  left = child->right;
102  child->right = this;
104  child->refresh_node_height();
105  return child;
106  }

Member Data Documentation

◆ height

template<typename _Key , typename _Comp = std::less<_Key>>
size_type vs::_vs_tree_node< _Key, _Comp >::height = 0

Definition at line 34 of file vs_tree.h.

◆ left

template<typename _Key , typename _Comp = std::less<_Key>>
_Ptr_type vs::_vs_tree_node< _Key, _Comp >::left = nullptr

Definition at line 35 of file vs_tree.h.

◆ right

template<typename _Key , typename _Comp = std::less<_Key>>
_Ptr_type vs::_vs_tree_node< _Key, _Comp >::right = nullptr

Definition at line 36 of file vs_tree.h.

◆ value

template<typename _Key , typename _Comp = std::less<_Key>>
_Key vs::_vs_tree_node< _Key, _Comp >::value

Definition at line 33 of file vs_tree.h.


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