ord_index_node.hpp
Go to the documentation of this file.
1 /* Copyright 2003-2015 Joaquin M Lopez Munoz.
2  * Distributed under the Boost Software License, Version 1.0.
3  * (See accompanying file LICENSE_1_0.txt or copy at
4  * http://www.boost.org/LICENSE_1_0.txt)
5  *
6  * See http://www.boost.org/libs/multi_index for library home page.
7  *
8  * The internal implementation of red-black trees is based on that of SGI STL
9  * stl_tree.h file:
10  *
11  * Copyright (c) 1996,1997
12  * Silicon Graphics Computer Systems, Inc.
13  *
14  * Permission to use, copy, modify, distribute and sell this software
15  * and its documentation for any purpose is hereby granted without fee,
16  * provided that the above copyright notice appear in all copies and
17  * that both that copyright notice and this permission notice appear
18  * in supporting documentation. Silicon Graphics makes no
19  * representations about the suitability of this software for any
20  * purpose. It is provided "as is" without express or implied warranty.
21  *
22  *
23  * Copyright (c) 1994
24  * Hewlett-Packard Company
25  *
26  * Permission to use, copy, modify, distribute and sell this software
27  * and its documentation for any purpose is hereby granted without fee,
28  * provided that the above copyright notice appear in all copies and
29  * that both that copyright notice and this permission notice appear
30  * in supporting documentation. Hewlett-Packard Company makes no
31  * representations about the suitability of this software for any
32  * purpose. It is provided "as is" without express or implied warranty.
33  *
34  */
35 
36 #ifndef BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_NODE_HPP
37 #define BOOST_MULTI_INDEX_DETAIL_ORD_INDEX_NODE_HPP
38 
39 #if defined(_MSC_VER)
40 #pragma once
41 #endif
42 
43 #include <boost/config.hpp> /* keep it first to prevent nasty warns in MSVC */
44 #include <cstddef>
47 
48 #if !defined(BOOST_MULTI_INDEX_DISABLE_COMPRESSED_ORDERED_INDEX_NODES)
49 #include <boost/mpl/and.hpp>
50 #include <boost/mpl/if.hpp>
54 #endif
55 
56 namespace boost{
57 
58 namespace multi_index{
59 
60 namespace detail{
61 
62 /* definition of red-black nodes for ordered_index */
63 
64 enum ordered_index_color{red=false,black=true};
66 
67 template<typename AugmentPolicy,typename Allocator>
68 struct ordered_index_node_impl; /* fwd decl. */
69 
70 template<typename AugmentPolicy,typename Allocator>
72 {
73  typedef typename
75  Allocator,
77  >::type::pointer pointer;
78  typedef typename
80  Allocator,
82  >::type::const_pointer const_pointer;
84  typedef pointer& parent_ref;
85 
88  pointer& parent(){return parent_;}
89  pointer parent()const{return parent_;}
90  pointer& left(){return left_;}
91  pointer left()const{return left_;}
92  pointer& right(){return right_;}
93  pointer right()const{return right_;}
94 
95 private:
100 };
101 
102 #if !defined(BOOST_MULTI_INDEX_DISABLE_COMPRESSED_ORDERED_INDEX_NODES)
103 /* If ordered_index_node_impl has even alignment, we can use the least
104  * significant bit of one of the ordered_index_node_impl pointers to
105  * store color information. This typically reduces the size of
106  * ordered_index_node_impl by 25%.
107  */
108 
109 #if defined(BOOST_MSVC)
110 /* This code casts pointers to an integer type that has been computed
111  * to be large enough to hold the pointer, however the metaprogramming
112  * logic is not always spotted by the VC++ code analyser that issues a
113  * long list of warnings.
114  */
115 
116 #pragma warning(push)
117 #pragma warning(disable:4312 4311)
118 #endif
119 
120 template<typename AugmentPolicy,typename Allocator>
122 {
123  typedef ordered_index_node_impl<
124  AugmentPolicy,Allocator>* pointer;
125  typedef const ordered_index_node_impl<
126  AugmentPolicy,Allocator>* const_pointer;
127 
128  struct color_ref
129  {
131 
132  operator ordered_index_color()const
133  {
134  return ordered_index_color(*r&uintptr_type(1));
135  }
136 
138  {
139  *r&=~uintptr_type(1);
140  *r|=uintptr_type(c);
141  return *this;
142  }
143 
145  {
146  return operator=(x.operator ordered_index_color());
147  }
148 
149  private:
151  };
152 
153  struct parent_ref
154  {
156 
157  operator pointer()const
158  {
159  return (pointer)(void*)(*r&~uintptr_type(1));
160  }
161 
163  {
164  *r=((uintptr_type)(void*)p)|(*r&uintptr_type(1));
165  return *this;
166  }
167 
169  {
170  return operator=(x.operator pointer());
171  }
172 
174  {
175  return operator pointer();
176  }
177 
178  private:
180  };
181 
184  {
186  }
187 
190  {
191  return (pointer)(void*)(parentcolor_&~uintptr_type(1));
192  }
193 
194  pointer& left(){return left_;}
195  pointer left()const{return left_;}
196  pointer& right(){return right_;}
197  pointer right()const{return right_;}
198 
199 private:
203 };
204 #if defined(BOOST_MSVC)
205 #pragma warning(pop)
206 #endif
207 #endif
208 
209 template<typename AugmentPolicy,typename Allocator>
211 
212 #if !defined(BOOST_MULTI_INDEX_DISABLE_COMPRESSED_ORDERED_INDEX_NODES)
213  AugmentPolicy::template augmented_node<
214  typename mpl::if_c<
215  !(has_uintptr_type::value)||
216  (alignment_of<
217  ordered_index_node_compressed_base<AugmentPolicy,Allocator>
218  >::value%2)||
219  !(is_same<
220  typename boost::detail::allocator::rebind_to<
221  Allocator,
222  ordered_index_node_impl<AugmentPolicy,Allocator>
223  >::type::pointer,
224  ordered_index_node_impl<AugmentPolicy,Allocator>*>::value),
225  ordered_index_node_std_base<AugmentPolicy,Allocator>,
226  ordered_index_node_compressed_base<AugmentPolicy,Allocator>
227  >::type
228  >::type
229 #else
230  AugmentPolicy::template augmented_node<
231  ordered_index_node_std_base<AugmentPolicy,Allocator>
232  >::type
233 #endif
234 
235 {};
236 
237 template<typename AugmentPolicy,typename Allocator>
239  ordered_index_node_impl_base<AugmentPolicy,Allocator>
240 {
241 private:
243 
244 public:
245  typedef typename super::color_ref color_ref;
246  typedef typename super::parent_ref parent_ref;
247  typedef typename super::pointer pointer;
248  typedef typename super::const_pointer const_pointer;
249 
250  /* interoperability with bidir_node_iterator */
251 
252  static void increment(pointer& x)
253  {
254  if(x->right()!=pointer(0)){
255  x=x->right();
256  while(x->left()!=pointer(0))x=x->left();
257  }
258  else{
259  pointer y=x->parent();
260  while(x==y->right()){
261  x=y;
262  y=y->parent();
263  }
264  if(x->right()!=y)x=y;
265  }
266  }
267 
268  static void decrement(pointer& x)
269  {
270  if(x->color()==red&&x->parent()->parent()==x){
271  x=x->right();
272  }
273  else if(x->left()!=pointer(0)){
274  pointer y=x->left();
275  while(y->right()!=pointer(0))y=y->right();
276  x=y;
277  }else{
278  pointer y=x->parent();
279  while(x==y->left()){
280  x=y;
281  y=y->parent();
282  }
283  x=y;
284  }
285  }
286 
287  /* algorithmic stuff */
288 
289  static void rotate_left(pointer x,parent_ref root)
290  {
291  pointer y=x->right();
292  x->right()=y->left();
293  if(y->left()!=pointer(0))y->left()->parent()=x;
294  y->parent()=x->parent();
295 
296  if(x==root) root=y;
297  else if(x==x->parent()->left())x->parent()->left()=y;
298  else x->parent()->right()=y;
299  y->left()=x;
300  x->parent()=y;
301  AugmentPolicy::rotate_left(x,y);
302  }
303 
305  {
306  while(x->left()!=pointer(0))x=x->left();
307  return x;
308  }
309 
311  {
312  while(x->right()!=pointer(0))x=x->right();
313  return x;
314  }
315 
316  static void rotate_right(pointer x,parent_ref root)
317  {
318  pointer y=x->left();
319  x->left()=y->right();
320  if(y->right()!=pointer(0))y->right()->parent()=x;
321  y->parent()=x->parent();
322 
323  if(x==root) root=y;
324  else if(x==x->parent()->right())x->parent()->right()=y;
325  else x->parent()->left()=y;
326  y->right()=x;
327  x->parent()=y;
328  AugmentPolicy::rotate_right(x,y);
329  }
330 
331  static void rebalance(pointer x,parent_ref root)
332  {
333  x->color()=red;
334  while(x!=root&&x->parent()->color()==red){
335  if(x->parent()==x->parent()->parent()->left()){
336  pointer y=x->parent()->parent()->right();
337  if(y!=pointer(0)&&y->color()==red){
338  x->parent()->color()=black;
339  y->color()=black;
340  x->parent()->parent()->color()=red;
341  x=x->parent()->parent();
342  }
343  else{
344  if(x==x->parent()->right()){
345  x=x->parent();
346  rotate_left(x,root);
347  }
348  x->parent()->color()=black;
349  x->parent()->parent()->color()=red;
350  rotate_right(x->parent()->parent(),root);
351  }
352  }
353  else{
354  pointer y=x->parent()->parent()->left();
355  if(y!=pointer(0)&&y->color()==red){
356  x->parent()->color()=black;
357  y->color()=black;
358  x->parent()->parent()->color()=red;
359  x=x->parent()->parent();
360  }
361  else{
362  if(x==x->parent()->left()){
363  x=x->parent();
364  rotate_right(x,root);
365  }
366  x->parent()->color()=black;
367  x->parent()->parent()->color()=red;
368  rotate_left(x->parent()->parent(),root);
369  }
370  }
371  }
372  root->color()=black;
373  }
374 
375  static void link(
376  pointer x,ordered_index_side side,pointer position,pointer header)
377  {
378  if(side==to_left){
379  position->left()=x; /* also makes leftmost=x when parent==header */
380  if(position==header){
381  header->parent()=x;
382  header->right()=x;
383  }
384  else if(position==header->left()){
385  header->left()=x; /* maintain leftmost pointing to min node */
386  }
387  }
388  else{
389  position->right()=x;
390  if(position==header->right()){
391  header->right()=x; /* maintain rightmost pointing to max node */
392  }
393  }
394  x->parent()=position;
395  x->left()=pointer(0);
396  x->right()=pointer(0);
397  AugmentPolicy::add(x,pointer(header->parent()));
399  }
400 
402  pointer z,parent_ref root,pointer& leftmost,pointer& rightmost)
403  {
404  pointer y=z;
405  pointer x=pointer(0);
406  pointer x_parent=pointer(0);
407  if(y->left()==pointer(0)){ /* z has at most one non-null child. y==z. */
408  x=y->right(); /* x might be null */
409  }
410  else{
411  if(y->right()==pointer(0)){ /* z has exactly one non-null child. y==z. */
412  x=y->left(); /* x is not null */
413  }
414  else{ /* z has two non-null children. Set y to */
415  y=y->right(); /* z's successor. x might be null. */
416  while(y->left()!=pointer(0))y=y->left();
417  x=y->right();
418  }
419  }
420  AugmentPolicy::remove(y,pointer(root));
421  if(y!=z){
422  AugmentPolicy::copy(z,y);
423  z->left()->parent()=y; /* relink y in place of z. y is z's successor */
424  y->left()=z->left();
425  if(y!=z->right()){
426  x_parent=y->parent();
427  if(x!=pointer(0))x->parent()=y->parent();
428  y->parent()->left()=x; /* y must be a child of left */
429  y->right()=z->right();
430  z->right()->parent()=y;
431  }
432  else{
433  x_parent=y;
434  }
435 
436  if(root==z) root=y;
437  else if(z->parent()->left()==z)z->parent()->left()=y;
438  else z->parent()->right()=y;
439  y->parent()=z->parent();
440  ordered_index_color c=y->color();
441  y->color()=z->color();
442  z->color()=c;
443  y=z; /* y now points to node to be actually deleted */
444  }
445  else{ /* y==z */
446  x_parent=y->parent();
447  if(x!=pointer(0))x->parent()=y->parent();
448  if(root==z){
449  root=x;
450  }
451  else{
452  if(z->parent()->left()==z)z->parent()->left()=x;
453  else z->parent()->right()=x;
454  }
455  if(leftmost==z){
456  if(z->right()==pointer(0)){ /* z->left() must be null also */
457  leftmost=z->parent();
458  }
459  else{
460  leftmost=minimum(x); /* makes leftmost==header if z==root */
461  }
462  }
463  if(rightmost==z){
464  if(z->left()==pointer(0)){ /* z->right() must be null also */
465  rightmost=z->parent();
466  }
467  else{ /* x==z->left() */
468  rightmost=maximum(x); /* makes rightmost==header if z==root */
469  }
470  }
471  }
472  if(y->color()!=red){
473  while(x!=root&&(x==pointer(0)|| x->color()==black)){
474  if(x==x_parent->left()){
475  pointer w=x_parent->right();
476  if(w->color()==red){
477  w->color()=black;
478  x_parent->color()=red;
479  rotate_left(x_parent,root);
480  w=x_parent->right();
481  }
482  if((w->left()==pointer(0)||w->left()->color()==black) &&
483  (w->right()==pointer(0)||w->right()->color()==black)){
484  w->color()=red;
485  x=x_parent;
486  x_parent=x_parent->parent();
487  }
488  else{
489  if(w->right()==pointer(0 )
490  || w->right()->color()==black){
491  if(w->left()!=pointer(0)) w->left()->color()=black;
492  w->color()=red;
493  rotate_right(w,root);
494  w=x_parent->right();
495  }
496  w->color()=x_parent->color();
497  x_parent->color()=black;
498  if(w->right()!=pointer(0))w->right()->color()=black;
499  rotate_left(x_parent,root);
500  break;
501  }
502  }
503  else{ /* same as above,with right <-> left */
504  pointer w=x_parent->left();
505  if(w->color()==red){
506  w->color()=black;
507  x_parent->color()=red;
508  rotate_right(x_parent,root);
509  w=x_parent->left();
510  }
511  if((w->right()==pointer(0)||w->right()->color()==black) &&
512  (w->left()==pointer(0)||w->left()->color()==black)){
513  w->color()=red;
514  x=x_parent;
515  x_parent=x_parent->parent();
516  }
517  else{
518  if(w->left()==pointer(0)||w->left()->color()==black){
519  if(w->right()!=pointer(0))w->right()->color()=black;
520  w->color()=red;
521  rotate_left(w,root);
522  w=x_parent->left();
523  }
524  w->color()=x_parent->color();
525  x_parent->color()=black;
526  if(w->left()!=pointer(0))w->left()->color()=black;
527  rotate_right(x_parent,root);
528  break;
529  }
530  }
531  }
532  if(x!=pointer(0))x->color()=black;
533  }
534  return y;
535  }
536 
537  static void restore(pointer x,pointer position,pointer header)
538  {
539  if(position->left()==pointer(0)||position->left()==header){
540  link(x,to_left,position,header);
541  }
542  else{
543  decrement(position);
544  link(x,to_right,position,header);
545  }
546  }
547 
548 #if defined(BOOST_MULTI_INDEX_ENABLE_INVARIANT_CHECKING)
549  /* invariant stuff */
550 
551  static std::size_t black_count(pointer node,pointer root)
552  {
553  if(node==pointer(0))return 0;
554  std::size_t sum=0;
555  for(;;){
556  if(node->color()==black)++sum;
557  if(node==root)break;
558  node=node->parent();
559  }
560  return sum;
561  }
562 #endif
563 };
564 
565 template<typename AugmentPolicy,typename Super>
568  AugmentPolicy,
569  typename boost::detail::allocator::rebind_to<
570  typename Super::allocator_type,
571  char
572  >::type
573  >
574 {
575  typedef ordered_index_node_impl<
576  AugmentPolicy,
578  typename Super::allocator_type,
579  char
580  >::type
582 };
583 
584 template<typename AugmentPolicy,typename Super>
586  Super,ordered_index_node_trampoline<AugmentPolicy,Super>
587 {
588 private:
590 
591 public:
597 
598  impl_color_ref color(){return trampoline::color();}
599  ordered_index_color color()const{return trampoline::color();}
600  impl_parent_ref parent(){return trampoline::parent();}
601  impl_pointer parent()const{return trampoline::parent();}
602  impl_pointer& left(){return trampoline::left();}
603  impl_pointer left()const{return trampoline::left();}
604  impl_pointer& right(){return trampoline::right();}
605  impl_pointer right()const{return trampoline::right();}
606 
608  {
609  return static_cast<impl_pointer>(
610  static_cast<impl_type*>(static_cast<trampoline*>(this)));
611  }
612 
614  {
615  return static_cast<const_impl_pointer>(
616  static_cast<const impl_type*>(static_cast<const trampoline*>(this)));
617  }
618 
620  {
621  return
622  static_cast<ordered_index_node*>(
623  static_cast<trampoline*>(
624  raw_ptr<impl_type*>(x)));
625  }
626 
628  {
629  return
630  static_cast<const ordered_index_node*>(
631  static_cast<const trampoline*>(
632  raw_ptr<const impl_type*>(x)));
633  }
634 
635  /* interoperability with bidir_node_iterator */
636 
637  static void increment(ordered_index_node*& x)
638  {
639  impl_pointer xi=x->impl();
641  x=from_impl(xi);
642  }
643 
644  static void decrement(ordered_index_node*& x)
645  {
646  impl_pointer xi=x->impl();
648  x=from_impl(xi);
649  }
650 };
651 
652 } /* namespace multi_index::detail */
653 
654 } /* namespace multi_index */
655 
656 } /* namespace boost */
657 
658 #endif
boost::multi_index::detail::ordered_index_node_std_base::left_
pointer left_
Definition: ord_index_node.hpp:98
boost::multi_index::detail::ordered_index_node_std_base::left
pointer & left()
Definition: ord_index_node.hpp:90
boost::multi_index::detail::ordered_index_node::impl_color_ref
trampoline::color_ref impl_color_ref
Definition: ord_index_node.hpp:593
boost::multi_index::detail::ordered_index_node_impl::rotate_right
static void rotate_right(pointer x, parent_ref root)
Definition: ord_index_node.hpp:316
boost::multi_index::detail::ordered_index_node::trampoline
ordered_index_node_trampoline< AugmentPolicy, Super > trampoline
Definition: ord_index_node.hpp:589
boost::multi_index::detail::ordered_index_node_std_base::right
pointer right() const
Definition: ord_index_node.hpp:93
boost::multi_index::detail::ordered_index_node_compressed_base::color_ref::color_ref
color_ref(uintptr_type *r_)
Definition: ord_index_node.hpp:130
boost::multi_index::detail::ordered_index_node_std_base::parent_ref
pointer & parent_ref
Definition: ord_index_node.hpp:84
boost::multi_index::detail::ordered_index_node
Definition: ord_index_node.hpp:585
boost::multi_index::detail::ordered_index_node_impl
Definition: ord_index_node.hpp:68
boost::multi_index::detail::ordered_index_node_std_base::right_
pointer right_
Definition: ord_index_node.hpp:99
boost::multi_index::detail::black
@ black
Definition: ord_index_node.hpp:64
boost::multi_index::detail::ordered_index_node::right
impl_pointer & right()
Definition: ord_index_node.hpp:604
boost::multi_index::detail::ordered_index_node_impl::parent_ref
super::parent_ref parent_ref
Definition: ord_index_node.hpp:246
config.hpp
boost::multi_index::detail::ordered_index_node_compressed_base::parent_ref::operator=
parent_ref & operator=(const parent_ref &x)
Definition: ord_index_node.hpp:168
boost::multi_index::detail::ordered_index_node_impl::color_ref
super::color_ref color_ref
Definition: ord_index_node.hpp:245
boost::multi_index::detail::ordered_index_node_std_base::color
ordered_index_color color() const
Definition: ord_index_node.hpp:87
boost::multi_index::detail::red
@ red
Definition: ord_index_node.hpp:64
boost::multi_index::detail::ordered_index_node_impl::maximum
static pointer maximum(pointer x)
Definition: ord_index_node.hpp:310
boost::multi_index::detail::ordered_index_node::left
impl_pointer left() const
Definition: ord_index_node.hpp:603
boost::multi_index::detail::ordered_index_node_std_base::left
pointer left() const
Definition: ord_index_node.hpp:91
boost::multi_index::detail::ordered_index_node::color
impl_color_ref color()
Definition: ord_index_node.hpp:598
boost::type
Definition: type.hpp:14
boost::multi_index::detail::ordered_index_node_compressed_base::parent_ref::operator->
pointer operator->() const
Definition: ord_index_node.hpp:173
boost::multi_index::detail::ordered_index_node_std_base::color
ordered_index_color & color()
Definition: ord_index_node.hpp:86
boost::multi_index::detail::ordered_index_node_std_base::pointer
boost::detail::allocator::rebind_to< Allocator, ordered_index_node_impl< AugmentPolicy, Allocator > >::type::pointer pointer
Definition: ord_index_node.hpp:77
boost::multi_index::detail::ordered_index_node_std_base::const_pointer
boost::detail::allocator::rebind_to< Allocator, ordered_index_node_impl< AugmentPolicy, Allocator > >::type::const_pointer const_pointer
Definition: ord_index_node.hpp:82
alignment_of.hpp
boost::multi_index::detail::ordered_index_node_compressed_base::color_ref::operator=
color_ref & operator=(ordered_index_color c)
Definition: ord_index_node.hpp:137
boost::multi_index::detail::ordered_index_node::impl_pointer
trampoline::pointer impl_pointer
Definition: ord_index_node.hpp:595
boost::multi_index::detail::ordered_index_node_impl::const_pointer
super::const_pointer const_pointer
Definition: ord_index_node.hpp:248
boost::multi_index::detail::ordered_index_node_std_base::right
pointer & right()
Definition: ord_index_node.hpp:92
boost
BOOST_MOVE_USE_STANDARD_LIBRARY_MOVE.
boost::multi_index::detail::ordered_index_node_std_base::parent_
pointer parent_
Definition: ord_index_node.hpp:97
boost::multi_index::detail::ordered_index_node_impl::restore
static void restore(pointer x, pointer position, pointer header)
Definition: ord_index_node.hpp:537
boost::multi_index::detail::ordered_index_node_compressed_base::left
pointer left() const
Definition: ord_index_node.hpp:195
boost::multi_index::detail::ordered_index_node::impl
impl_pointer impl()
Definition: ord_index_node.hpp:607
boost::multi_index::detail::ordered_index_node_compressed_base::color
ordered_index_color color() const
Definition: ord_index_node.hpp:183
boost::multi_index::detail::ordered_index_node::parent
impl_parent_ref parent()
Definition: ord_index_node.hpp:600
boost::multi_index::detail::ordered_index_node_compressed_base::parent
parent_ref parent()
Definition: ord_index_node.hpp:188
boost::multi_index::detail::ordered_index_node_compressed_base::parent_ref::r
uintptr_type * r
Definition: ord_index_node.hpp:179
boost::multi_index::detail::ordered_index_node_impl::link
static void link(pointer x, ordered_index_side side, pointer position, pointer header)
Definition: ord_index_node.hpp:375
boost::multi_index::detail::ordered_index_node_impl::minimum
static pointer minimum(pointer x)
Definition: ord_index_node.hpp:304
and.hpp
boost::multi_index::detail::ordered_index_node_compressed_base::const_pointer
const typedef ordered_index_node_impl< AugmentPolicy, Allocator > * const_pointer
Definition: ord_index_node.hpp:126
boost::multi_index::detail::ordered_index_node_compressed_base::parentcolor_
uintptr_type parentcolor_
Definition: ord_index_node.hpp:200
boost::multi_index::detail::ordered_index_node_impl::rebalance_for_erase
static pointer rebalance_for_erase(pointer z, parent_ref root, pointer &leftmost, pointer &rightmost)
Definition: ord_index_node.hpp:401
boost::detail::allocator::rebind_to
Definition: allocator_utilities.hpp:139
boost::multi_index::detail::ordered_index_node_impl::rebalance
static void rebalance(pointer x, parent_ref root)
Definition: ord_index_node.hpp:331
boost::multi_index::detail::ordered_index_node::parent
impl_pointer parent() const
Definition: ord_index_node.hpp:601
boost::multi_index::detail::ordered_index_node_trampoline
Definition: ord_index_node.hpp:566
boost::multi_index::detail::ordered_index_node_std_base::color_ref
ordered_index_color & color_ref
Definition: ord_index_node.hpp:83
boost::multi_index::detail::ordered_index_node::impl_type
trampoline::impl_type impl_type
Definition: ord_index_node.hpp:592
boost::multi_index::detail::ordered_index_node_compressed_base::parent_ref::parent_ref
parent_ref(uintptr_type *r_)
Definition: ord_index_node.hpp:155
boost::multi_index::detail::ordered_index_node_compressed_base::left_
pointer left_
Definition: ord_index_node.hpp:201
boost::multi_index::detail::ordered_index_node_compressed_base::color_ref
Definition: ord_index_node.hpp:128
boost::multi_index::detail::ordered_index_node_compressed_base::left
pointer & left()
Definition: ord_index_node.hpp:194
boost::multi_index::detail::ordered_index_node::increment
static void increment(ordered_index_node *&x)
Definition: ord_index_node.hpp:637
boost::multi_index::detail::ordered_index_node::from_impl
static ordered_index_node * from_impl(impl_pointer x)
Definition: ord_index_node.hpp:619
boost::multi_index::detail::ordered_index_node_compressed_base::parent_ref
Definition: ord_index_node.hpp:153
boost::multi_index::detail::ordered_index_node_std_base::color_
ordered_index_color color_
Definition: ord_index_node.hpp:96
boost::multi_index::detail::ordered_index_node_compressed_base::right_
pointer right_
Definition: ord_index_node.hpp:202
is_same.hpp
boost::multi_index::detail::ordered_index_node_impl::decrement
static void decrement(pointer &x)
Definition: ord_index_node.hpp:268
boost::multi_index::detail::ordered_index_node_compressed_base::pointer
ordered_index_node_impl< AugmentPolicy, Allocator > * pointer
Definition: ord_index_node.hpp:124
allocator_utilities.hpp
boost::multi_index::detail::ordered_index_node::left
impl_pointer & left()
Definition: ord_index_node.hpp:602
boost::multi_index::detail::ordered_index_color
ordered_index_color
Definition: ord_index_node.hpp:64
boost::multi_index::detail::ordered_index_node_std_base
Definition: ord_index_node.hpp:71
boost::multi_index::detail::ordered_index_node_compressed_base::color
color_ref color()
Definition: ord_index_node.hpp:182
boost::multi_index::detail::ordered_index_node_compressed_base
Definition: ord_index_node.hpp:121
uintptr_type.hpp
boost::multi_index::detail::ordered_index_node_compressed_base::right
pointer & right()
Definition: ord_index_node.hpp:196
boost::multi_index::detail::ordered_index_side
ordered_index_side
Definition: ord_index_node.hpp:65
boost::multi_index::detail::ordered_index_node::from_impl
static const ordered_index_node * from_impl(const_impl_pointer x)
Definition: ord_index_node.hpp:627
boost::multi_index::detail::to_left
@ to_left
Definition: ord_index_node.hpp:65
boost::multi_index::detail::ordered_index_node::decrement
static void decrement(ordered_index_node *&x)
Definition: ord_index_node.hpp:644
boost::multi_index::detail::ordered_index_node_compressed_base::parent_ref::operator=
parent_ref & operator=(pointer p)
Definition: ord_index_node.hpp:162
raw_ptr.hpp
boost::multi_index::detail::ordered_index_node_trampoline::impl_type
ordered_index_node_impl< AugmentPolicy, typename boost::detail::allocator::rebind_to< typename Super::allocator_type, char >::type > impl_type
Definition: ord_index_node.hpp:581
boost::multi_index::detail::to_right
@ to_right
Definition: ord_index_node.hpp:65
boost::multi_index::detail::ordered_index_node_impl::increment
static void increment(pointer &x)
Definition: ord_index_node.hpp:252
boost::multi_index::detail::ordered_index_node::impl
const_impl_pointer impl() const
Definition: ord_index_node.hpp:613
boost::multi_index::detail::ordered_index_node_impl_base
Definition: ord_index_node.hpp:210
boost::multi_index::detail::ordered_index_node_impl::pointer
super::pointer pointer
Definition: ord_index_node.hpp:247
boost::multi_index::detail::ordered_index_node::color
ordered_index_color color() const
Definition: ord_index_node.hpp:599
boost::multi_index::detail::ordered_index_node_compressed_base::color_ref::operator=
color_ref & operator=(const color_ref &x)
Definition: ord_index_node.hpp:144
header
const std::string header
boost::multi_index::detail::ordered_index_node_impl::rotate_left
static void rotate_left(pointer x, parent_ref root)
Definition: ord_index_node.hpp:289
boost::multi_index::detail::ordered_index_node_std_base::parent
pointer & parent()
Definition: ord_index_node.hpp:88
boost::multi_index::detail::ordered_index_node::const_impl_pointer
trampoline::const_pointer const_impl_pointer
Definition: ord_index_node.hpp:596
boost::multi_index::detail::uintptr_type
uintptr_aux::type uintptr_type
Definition: uintptr_type.hpp:68
boost::multi_index::detail::ordered_index_node::impl_parent_ref
trampoline::parent_ref impl_parent_ref
Definition: ord_index_node.hpp:594
if.hpp
boost::multi_index::detail::ordered_index_node_compressed_base::color_ref::r
uintptr_type * r
Definition: ord_index_node.hpp:150
boost::multi_index::detail::ordered_index_node_compressed_base::right
pointer right() const
Definition: ord_index_node.hpp:197
boost::multi_index::detail::ordered_index_node_std_base::parent
pointer parent() const
Definition: ord_index_node.hpp:89
boost::multi_index::detail::ordered_index_node_compressed_base::parent
pointer parent() const
Definition: ord_index_node.hpp:189
boost::multi_index::detail::ordered_index_node::right
impl_pointer right() const
Definition: ord_index_node.hpp:605
boost::multi_index::detail::ordered_index_node_impl::super
ordered_index_node_impl_base< AugmentPolicy, Allocator > super
Definition: ord_index_node.hpp:242


sick_visionary_ros
Author(s): SICK AG TechSupport 3D Snapshot
autogenerated on Thu Feb 8 2024 03:45:36