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 >
388#else
389template<class T, class ...Options>
390#endif
391class treap;
392
393#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
394template
395 < class T
396 , class O1 = void
397 , class O2 = void
398 , class O3 = void
399 , class O4 = void
400 , class O5 = void
401 , class O6 = void
402 >
403#else
404template<class T, class ...Options>
405#endif
406class treap_set;
407
408#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
409template
410 < class T
411 , class O1 = void
412 , class O2 = void
413 , class O3 = void
414 , class O4 = void
415 , class O5 = void
416 , class O6 = void
417 >
418#else
419template<class T, class ...Options>
420#endif
421class treap_multiset;
422
423//sgtree/sg_set/sg_multiset
424#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
425template
426 < class T
427 , class O1 = void
428 , class O2 = void
429 , class O3 = void
430 , class O4 = void
431 , class O5 = void
432 , class O6 = void
433 >
434#else
435template<class T, class ...Options>
436#endif
437class sgtree;
438
439#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
440template
441 < class T
442 , class O1 = void
443 , class O2 = void
444 , class O3 = void
445 , class O4 = void
446 , class O5 = void
447 , class O6 = void
448 >
449#else
450template<class T, class ...Options>
451#endif
452class sg_set;
453
454#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
455template
456 < class T
457 , class O1 = void
458 , class O2 = void
459 , class O3 = void
460 , class O4 = void
461 , class O5 = void
462 , class O6 = void
463 >
464#else
465template<class T, class ...Options>
466#endif
467class sg_multiset;
468
469#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
470template
471 < class T
472 , class O1 = void
473 , class O2 = void
474 , class O3 = void
475 , class O4 = void
476 , class O5 = void
477 , class O6 = void
478 >
479#else
480template<class T, class ...Options>
481#endif
482class bstree;
483
484#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
485template
486 < class T
487 , class O1 = void
488 , class O2 = void
489 , class O3 = void
490 , class O4 = void
491 , class O5 = void
492 , class O6 = void
493 >
494#else
495template<class T, class ...Options>
496#endif
497class bs_set;
498
499#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
500template
501 < class T
502 , class O1 = void
503 , class O2 = void
504 , class O3 = void
505 , class O4 = void
506 , class O5 = void
507 , class O6 = void
508 >
509#else
510template<class T, class ...Options>
511#endif
512class bs_multiset;
513
514#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
515template
516 < class O1 = void
517 , class O2 = void
518 , class O3 = void
519 >
520#else
521template<class ...Options>
522#endif
523class bs_set_base_hook;
524
525#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
526template
527 < class O1 = void
528 , class O2 = void
529 , class O3 = void
530 >
531#else
532template<class ...Options>
533#endif
534class bs_set_member_hook;
535
536//hashtable/unordered_set/unordered_multiset
537
538#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
539template
540 < class T
541 , class O1 = void
542 , class O2 = void
543 , class O3 = void
544 , class O4 = void
545 , class O5 = void
546 , class O6 = void
547 , class O7 = void
548 , class O8 = void
549 , class O9 = void
550 , class O10 = void
551 >
552#else
553template<class T, class ...Options>
554#endif
555class hashtable;
556
557#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
558template
559 < class T
560 , class O1 = void
561 , class O2 = void
562 , class O3 = void
563 , class O4 = void
564 , class O5 = void
565 , class O6 = void
566 , class O7 = void
567 , class O8 = void
568 , class O9 = void
569 , class O10 = void
570 >
571#else
572template<class T, class ...Options>
573#endif
574class unordered_set;
575
576#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
577template
578 < class T
579 , class O1 = void
580 , class O2 = void
581 , class O3 = void
582 , class O4 = void
583 , class O5 = void
584 , class O6 = void
585 , class O7 = void
586 , class O8 = void
587 , class O9 = void
588 , class O10 = void
589 >
590#else
591template<class T, class ...Options>
592#endif
593class unordered_multiset;
594
595#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
596template
597 < class O1 = void
598 , class O2 = void
599 , class O3 = void
600 , class O4 = void
601 >
602#else
603template<class ...Options>
604#endif
605class unordered_set_base_hook;
606
607#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
608template
609 < class O1 = void
610 , class O2 = void
611 , class O3 = void
612 , class O4 = void
613 >
614#else
615template<class ...Options>
616#endif
617class unordered_set_member_hook;
618
619#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
620template
621 < class O1 = void
622 , class O2 = void
623 , class O3 = void
624 >
625#else
626template<class ...Options>
627#endif
628class any_base_hook;
629
630#if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
631template
632 < class O1 = void
633 , class O2 = void
634 , class O3 = void
635 >
636#else
637template<class ...Options>
638#endif
639class any_member_hook;
640
641//Options
642
643template<bool Enabled>
644struct constant_time_size;
645
646template<typename SizeType>
647struct size_type;
648
649template<typename Compare>
650struct compare;
651
652template<bool Enabled>
653struct floating_point;
654
655template<typename Equal>
656struct equal;
657
658template<typename Priority>
659struct priority;
660
661template<typename Hash>
662struct hash;
663
664template<typename ValueTraits> struct value_traits;
665
666template< typename Parent
667 , typename MemberHook
668 , MemberHook Parent::* PtrToMember>
669struct member_hook;
670
671template<typename Functor>
672struct function_hook;
673
674template<typename BaseHook>
675struct base_hook;
676
677template<typename VoidPointer>
678struct void_pointer;
679
680template<typename Tag>
681struct tag;
682
683template<link_mode_type LinkType>
684struct link_mode;
685
686template<bool Enabled> struct
687optimize_size;
688
689template<bool Enabled>
690struct linear;
691
692template<bool Enabled>
693struct cache_last;
694
695template<typename BucketTraits>
696struct bucket_traits;
697
698template<bool Enabled>
699struct store_hash;
700
701template<bool Enabled>
702struct optimize_multikey;
703
704template<bool Enabled>
705struct power_2_buckets;
706
707template<bool Enabled>
708struct cache_begin;
709
710template<bool Enabled>
711struct compare_hash;
712
713template<bool Enabled>
714struct incremental;
715
716//Value traits
717
718template<typename ValueTraits>
719struct value_traits;
720
721template< typename Parent
722 , typename MemberHook
723 , MemberHook Parent::* PtrToMember>
724struct member_hook;
725
726template< typename Functor>
727struct function_hook;
728
729template<typename BaseHook>
730struct base_hook;
731
732template<class T, class NodeTraits, link_mode_type LinkMode = safe_link>
733struct derivation_value_traits;
734
735template<class NodeTraits, link_mode_type LinkMode = normal_link>
736struct trivial_value_traits;
737
738//Additional utilities
739
740template<typename VoidPointer, std::size_t Alignment>
741struct max_pointer_plus_bits;
742
743template<std::size_t Alignment>
744struct max_pointer_plus_bits<void *, Alignment>;
745
746template<typename Pointer, std::size_t NumBits>
747struct pointer_plus_bits;
748
749template<typename T, std::size_t NumBits>
750struct pointer_plus_bits<T *, NumBits>;
751
752template<typename Ptr>
753struct pointer_traits;
754
755template<typename T>
756struct pointer_traits<T *>;
757
758} //namespace intrusive {
759} //namespace boost {
760
761#endif //#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
762
763#endif //#ifndef BOOST_INTRUSIVE_FWD_HPP
764

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