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_FWD_HPP
14#define BOOST_INTRUSIVE_FWD_HPP
15
16#ifndef BOOST_CONFIG_HPP
17# include <boost/config.hpp>
18#endif
19#
20#ifndef BOOST_CSTDINT_HPP
21# include <boost/cstdint.hpp>
22#endif
23#
24#if defined(BOOST_HAS_PRAGMA_ONCE)
25# pragma once
26#endif
27
28//! \file
29//! This header file forward declares most Intrusive classes.
30//!
31//! It forward declares the following containers and hooks:
32//! - boost::intrusive::slist / boost::intrusive::slist_base_hook / boost::intrusive::slist_member_hook
33//! - boost::intrusive::list / boost::intrusive::list_base_hook / boost::intrusive::list_member_hook
34//! - boost::intrusive::bstree / boost::intrusive::bs_set / boost::intrusive::bs_multiset /
35//! boost::intrusive::bs_set_base_hook / boost::intrusive::bs_set_member_hook
36//! - boost::intrusive::rbtree / boost::intrusive::set / boost::intrusive::multiset /
37//! boost::intrusive::set_base_hook / boost::intrusive::set_member_hook
38//! - boost::intrusive::avltree / boost::intrusive::avl_set / boost::intrusive::avl_multiset /
39//! boost::intrusive::avl_set_base_hook / boost::intrusive::avl_set_member_hook
40//! - boost::intrusive::splaytree / boost::intrusive::splay_set / boost::intrusive::splay_multiset
41//! - boost::intrusive::sgtree / boost::intrusive::sg_set / boost::intrusive::sg_multiset
42//! - boost::intrusive::treap / boost::intrusive::treap_set / boost::intrusive::treap_multiset
43//! - boost::intrusive::hashtable / boost::intrusive::unordered_set / boost::intrusive::unordered_multiset /
44//! boost::intrusive::unordered_set_base_hook / boost::intrusive::unordered_set_member_hook /
45//! - boost::intrusive::any_base_hook / boost::intrusive::any_member_hook
46//!
47//! It forward declares the following container or hook options:
48//! - boost::intrusive::constant_time_size / boost::intrusive::size_type / boost::intrusive::compare / boost::intrusive::equal
49//! - boost::intrusive::floating_point / boost::intrusive::priority / boost::intrusive::hash
50//! - boost::intrusive::value_traits / boost::intrusive::member_hook / boost::intrusive::function_hook / boost::intrusive::base_hook
51//! - boost::intrusive::void_pointer / boost::intrusive::tag / boost::intrusive::link_mode
52//! - boost::intrusive::optimize_size / boost::intrusive::linear / boost::intrusive::cache_last
53//! - boost::intrusive::bucket_traits / boost::intrusive::store_hash / boost::intrusive::optimize_multikey
54//! - boost::intrusive::power_2_buckets / boost::intrusive::cache_begin / boost::intrusive::compare_hash / boost::intrusive::incremental
55//!
56//! It forward declares the following value traits utilities:
57//! - boost::intrusive::value_traits / boost::intrusive::derivation_value_traits /
58//! boost::intrusive::trivial_value_traits
59//!
60//! Finally it forward declares the following general purpose utilities:
61//! - boost::intrusive::pointer_plus_bits / boost::intrusive::priority_compare.
62
63#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
64
65#include <cstddef>
66#include <boost/intrusive/link_mode.hpp>
67#include <boost/intrusive/detail/workaround.hpp>
68
69namespace boost {
70namespace intrusive {
71
72#if !defined(BOOST_INTERPROCESS_DOXYGEN_INVOKED)
73# ifdef BOOST_HAS_INTPTR_T
74 using ::boost::uintptr_t;
75# else
76 typedef std::size_t uintptr_t;
77# endif
78#endif
79
80////////////////////////////
81// Node algorithms
82////////////////////////////
83
84//Algorithms predeclarations
85template<class NodeTraits>
86class circular_list_algorithms;
87
88template<class NodeTraits>
89class circular_slist_algorithms;
90
91template<class NodeTraits>
92class linear_slist_algorithms;
93
94template<class NodeTraits>
95class bstree_algorithms;
96
97template<class NodeTraits>
98class rbtree_algorithms;
99
100template<class NodeTraits>
101class avltree_algorithms;
102
103template<class NodeTraits>
104class sgtree_algorithms;
105
106template<class NodeTraits>
107class splaytree_algorithms;
108
109template<class NodeTraits>
110class treap_algorithms;
111
112////////////////////////////
113// Containers
114////////////////////////////
115
116//slist
117#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
118template
119 < class T
120 , class O1 = void
121 , class O2 = void
122 , class O3 = void
123 , class O4 = void
124 , class O5 = void
125 , class O6 = void
126 >
127#else
128template<class T, class ...Options>
129#endif
130class slist;
131
132#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
133template
134 < class O1 = void
135 , class O2 = void
136 , class O3 = void
137 >
138#else
139template<class ...Options>
140#endif
141class slist_base_hook;
142
143#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
144template
145 < class O1 = void
146 , class O2 = void
147 , class O3 = void
148 >
149#else
150template<class ...Options>
151#endif
152class slist_member_hook;
153
154//list
155#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
156template
157 < class T
158 , class O1 = void
159 , class O2 = void
160 , class O3 = void
161 , class O4 = void
162 >
163#else
164template<class T, class ...Options>
165#endif
166class list;
167
168#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
169template
170 < class O1 = void
171 , class O2 = void
172 , class O3 = void
173 >
174#else
175template<class ...Options>
176#endif
177class list_base_hook;
178
179#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
180template
181 < class O1 = void
182 , class O2 = void
183 , class O3 = void
184 >
185#else
186template<class ...Options>
187#endif
188class list_member_hook;
189
190//rbtree/set/multiset
191#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
192template
193 < class T
194 , class O1 = void
195 , class O2 = void
196 , class O3 = void
197 , class O4 = void
198 , class O5 = void
199 , class O6 = void
200 >
201#else
202template<class T, class ...Options>
203#endif
204class rbtree;
205
206#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
207template
208 < class T
209 , class O1 = void
210 , class O2 = void
211 , class O3 = void
212 , class O4 = void
213 , class O5 = void
214 , class O6 = void
215 >
216#else
217template<class T, class ...Options>
218#endif
219class set;
220
221#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
222template
223 < class T
224 , class O1 = void
225 , class O2 = void
226 , class O3 = void
227 , class O4 = void
228 , class O5 = void
229 , class O6 = void
230 >
231#else
232template<class T, class ...Options>
233#endif
234class multiset;
235
236#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
237template
238 < class O1 = void
239 , class O2 = void
240 , class O3 = void
241 , class O4 = void
242 >
243#else
244template<class ...Options>
245#endif
246class set_base_hook;
247
248#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
249template
250 < class O1 = void
251 , class O2 = void
252 , class O3 = void
253 , class O4 = void
254 >
255#else
256template<class ...Options>
257#endif
258class set_member_hook;
259
260//splaytree/splay_set/splay_multiset
261#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
262template
263 < class T
264 , class O1 = void
265 , class O2 = void
266 , class O3 = void
267 , class O4 = void
268 , class O5 = void
269 , class O6 = void
270 >
271#else
272template<class T, class ...Options>
273#endif
274class splaytree;
275
276#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
277template
278 < class T
279 , class O1 = void
280 , class O2 = void
281 , class O3 = void
282 , class O4 = void
283 , class O5 = void
284 , class O6 = void
285 >
286#else
287template<class T, class ...Options>
288#endif
289class splay_set;
290
291#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
292template
293 < class T
294 , class O1 = void
295 , class O2 = void
296 , class O3 = void
297 , class O4 = void
298 , class O5 = void
299 , class O6 = void
300 >
301#else
302template<class T, class ...Options>
303#endif
304class splay_multiset;
305
306//avltree/avl_set/avl_multiset
307#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
308template
309 < class T
310 , class O1 = void
311 , class O2 = void
312 , class O3 = void
313 , class O4 = void
314 , class O5 = void
315 , class O6 = void
316 >
317#else
318template<class T, class ...Options>
319#endif
320class avltree;
321
322#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
323template
324 < class T
325 , class O1 = void
326 , class O2 = void
327 , class O3 = void
328 , class O4 = void
329 , class O5 = void
330 , class O6 = void
331 >
332#else
333template<class T, class ...Options>
334#endif
335class avl_set;
336
337#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
338template
339 < class T
340 , class O1 = void
341 , class O2 = void
342 , class O3 = void
343 , class O4 = void
344 , class O5 = void
345 , class O6 = void
346 >
347#else
348template<class T, class ...Options>
349#endif
350class avl_multiset;
351
352#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
353template
354 < class O1 = void
355 , class O2 = void
356 , class O3 = void
357 , class O4 = void
358 >
359#else
360template<class ...Options>
361#endif
362class avl_set_base_hook;
363
364#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
365template
366 < class O1 = void
367 , class O2 = void
368 , class O3 = void
369 , class O4 = void
370 >
371#else
372template<class ...Options>
373#endif
374class avl_set_member_hook;
375
376
377//treap/treap_set/treap_multiset
378#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
379template
380 < class T
381 , class O1 = void
382 , class O2 = void
383 , class O3 = void
384 , class O4 = void
385 , class O5 = void
386 , class O6 = void
387 , class O7 = void
388 >
389#else
390template<class T, class ...Options>
391#endif
392class treap;
393
394#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
395template
396 < class T
397 , class O1 = void
398 , class O2 = void
399 , class O3 = void
400 , class O4 = void
401 , class O5 = void
402 , class O6 = void
403 , class O7 = void
404 >
405#else
406template<class T, class ...Options>
407#endif
408class treap_set;
409
410#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
411template
412 < class T
413 , class O1 = void
414 , class O2 = void
415 , class O3 = void
416 , class O4 = void
417 , class O5 = void
418 , class O6 = void
419 , class O7 = void
420 >
421#else
422template<class T, class ...Options>
423#endif
424class treap_multiset;
425
426//sgtree/sg_set/sg_multiset
427#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
428template
429 < class T
430 , class O1 = void
431 , class O2 = void
432 , class O3 = void
433 , class O4 = void
434 , class O5 = void
435 , class O6 = void
436 >
437#else
438template<class T, class ...Options>
439#endif
440class sgtree;
441
442#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
443template
444 < class T
445 , class O1 = void
446 , class O2 = void
447 , class O3 = void
448 , class O4 = void
449 , class O5 = void
450 , class O6 = void
451 >
452#else
453template<class T, class ...Options>
454#endif
455class sg_set;
456
457#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
458template
459 < class T
460 , class O1 = void
461 , class O2 = void
462 , class O3 = void
463 , class O4 = void
464 , class O5 = void
465 , class O6 = void
466 >
467#else
468template<class T, class ...Options>
469#endif
470class sg_multiset;
471
472#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
473template
474 < class T
475 , class O1 = void
476 , class O2 = void
477 , class O3 = void
478 , class O4 = void
479 , class O5 = void
480 , class O6 = void
481 >
482#else
483template<class T, class ...Options>
484#endif
485class bstree;
486
487#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
488template
489 < class T
490 , class O1 = void
491 , class O2 = void
492 , class O3 = void
493 , class O4 = void
494 , class O5 = void
495 , class O6 = void
496 >
497#else
498template<class T, class ...Options>
499#endif
500class bs_set;
501
502#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
503template
504 < class T
505 , class O1 = void
506 , class O2 = void
507 , class O3 = void
508 , class O4 = void
509 , class O5 = void
510 , class O6 = void
511 >
512#else
513template<class T, class ...Options>
514#endif
515class bs_multiset;
516
517#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
518template
519 < class O1 = void
520 , class O2 = void
521 , class O3 = void
522 >
523#else
524template<class ...Options>
525#endif
526class bs_set_base_hook;
527
528#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
529template
530 < class O1 = void
531 , class O2 = void
532 , class O3 = void
533 >
534#else
535template<class ...Options>
536#endif
537class bs_set_member_hook;
538
539//hashtable/unordered_set/unordered_multiset
540
541#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
542template
543 < class T
544 , class O1 = void
545 , class O2 = void
546 , class O3 = void
547 , class O4 = void
548 , class O5 = void
549 , class O6 = void
550 , class O7 = void
551 , class O8 = void
552 , class O9 = void
553 , class O10 = void
554 >
555#else
556template<class T, class ...Options>
557#endif
558class hashtable;
559
560#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
561template
562 < class T
563 , class O1 = void
564 , class O2 = void
565 , class O3 = void
566 , class O4 = void
567 , class O5 = void
568 , class O6 = void
569 , class O7 = void
570 , class O8 = void
571 , class O9 = void
572 , class O10 = void
573 , class O11 = void
574 >
575#else
576template<class T, class ...Options>
577#endif
578class unordered_set;
579
580#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
581template
582 < class T
583 , class O1 = void
584 , class O2 = void
585 , class O3 = void
586 , class O4 = void
587 , class O5 = void
588 , class O6 = void
589 , class O7 = void
590 , class O8 = void
591 , class O9 = void
592 , class O10 = void
593 , class O11 = void
594 >
595#else
596template<class T, class ...Options>
597#endif
598class unordered_multiset;
599
600#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
601template
602 < class O1 = void
603 , class O2 = void
604 , class O3 = void
605 , class O4 = void
606 >
607#else
608template<class ...Options>
609#endif
610class unordered_set_base_hook;
611
612#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
613template
614 < class O1 = void
615 , class O2 = void
616 , class O3 = void
617 , class O4 = void
618 >
619#else
620template<class ...Options>
621#endif
622class unordered_set_member_hook;
623
624#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
625template
626 < class O1 = void
627 , class O2 = void
628 , class O3 = void
629 >
630#else
631template<class ...Options>
632#endif
633class any_base_hook;
634
635#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
636template
637 < class O1 = void
638 , class O2 = void
639 , class O3 = void
640 >
641#else
642template<class ...Options>
643#endif
644class any_member_hook;
645
646//Options
647
648template<bool Enabled>
649struct constant_time_size;
650
651template<typename SizeType>
652struct size_type;
653
654template<typename Compare>
655struct compare;
656
657template<bool Enabled>
658struct floating_point;
659
660template<typename Equal>
661struct equal;
662
663template<typename Priority>
664struct priority;
665
666template<typename Hash>
667struct hash;
668
669template<typename ValueTraits> struct value_traits;
670
671template< typename Parent
672 , typename MemberHook
673 , MemberHook Parent::* PtrToMember>
674struct member_hook;
675
676template<typename Functor>
677struct function_hook;
678
679template<typename BaseHook>
680struct base_hook;
681
682template<typename VoidPointer>
683struct void_pointer;
684
685template<typename Tag>
686struct tag;
687
688template<link_mode_type LinkType>
689struct link_mode;
690
691template<bool Enabled> struct
692optimize_size;
693
694template<bool Enabled>
695struct linear;
696
697template<bool Enabled>
698struct cache_last;
699
700template<typename BucketTraits>
701struct bucket_traits;
702
703template<bool Enabled>
704struct store_hash;
705
706template<bool Enabled>
707struct optimize_multikey;
708
709template<bool Enabled>
710struct power_2_buckets;
711
712template<bool Enabled>
713struct cache_begin;
714
715template<bool Enabled>
716struct compare_hash;
717
718template<bool Enabled>
719struct incremental;
720
721//Value traits
722
723template<typename ValueTraits>
724struct value_traits;
725
726template< typename Parent
727 , typename MemberHook
728 , MemberHook Parent::* PtrToMember>
729struct member_hook;
730
731template< typename Functor>
732struct function_hook;
733
734template<typename BaseHook>
735struct base_hook;
736
737template<class T, class NodeTraits, link_mode_type LinkMode = safe_link>
738struct derivation_value_traits;
739
740template<class NodeTraits, link_mode_type LinkMode = normal_link>
741struct trivial_value_traits;
742
743//Additional utilities
744
745template<typename VoidPointer, std::size_t Alignment>
746struct max_pointer_plus_bits;
747
748template<std::size_t Alignment>
749struct max_pointer_plus_bits<void *, Alignment>;
750
751template<typename Pointer, std::size_t NumBits>
752struct pointer_plus_bits;
753
754template<typename T, std::size_t NumBits>
755struct pointer_plus_bits<T *, NumBits>;
756
757template<typename Ptr>
758struct pointer_traits;
759
760template<typename T>
761struct pointer_traits<T *>;
762
763} //namespace intrusive {
764} //namespace boost {
765
766#endif //#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
767
768#endif //#ifndef BOOST_INTRUSIVE_FWD_HPP
769

source code of boost/libs/intrusive/include/boost/intrusive/intrusive_fwd.hpp