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 69 namespace boost { 70 namespace 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 85 template<class NodeTraits> 86 class circular_list_algorithms; 87 88 template<class NodeTraits> 89 class circular_slist_algorithms; 90 91 template<class NodeTraits> 92 class linear_slist_algorithms; 93 94 template<class NodeTraits> 95 class bstree_algorithms; 96 97 template<class NodeTraits> 98 class rbtree_algorithms; 99 100 template<class NodeTraits> 101 class avltree_algorithms; 102 103 template<class NodeTraits> 104 class sgtree_algorithms; 105 106 template<class NodeTraits> 107 class splaytree_algorithms; 108 109 template<class NodeTraits> 110 class treap_algorithms; 111 112 //////////////////////////// 113 // Containers 114 //////////////////////////// 115 116 //slist 117 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 118 template 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 128 template<class T, class ...Options> 129 #endif 130 class slist; 131 132 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 133 template 134 < class O1 = void 135 , class O2 = void 136 , class O3 = void 137 > 138 #else 139 template<class ...Options> 140 #endif 141 class slist_base_hook; 142 143 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 144 template 145 < class O1 = void 146 , class O2 = void 147 , class O3 = void 148 > 149 #else 150 template<class ...Options> 151 #endif 152 class slist_member_hook; 153 154 //list 155 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 156 template 157 < class T 158 , class O1 = void 159 , class O2 = void 160 , class O3 = void 161 , class O4 = void 162 > 163 #else 164 template<class T, class ...Options> 165 #endif 166 class list; 167 168 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 169 template 170 < class O1 = void 171 , class O2 = void 172 , class O3 = void 173 > 174 #else 175 template<class ...Options> 176 #endif 177 class list_base_hook; 178 179 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 180 template 181 < class O1 = void 182 , class O2 = void 183 , class O3 = void 184 > 185 #else 186 template<class ...Options> 187 #endif 188 class list_member_hook; 189 190 //rbtree/set/multiset 191 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 192 template 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 202 template<class T, class ...Options> 203 #endif 204 class rbtree; 205 206 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 207 template 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 217 template<class T, class ...Options> 218 #endif 219 class set; 220 221 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 222 template 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 232 template<class T, class ...Options> 233 #endif 234 class multiset; 235 236 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 237 template 238 < class O1 = void 239 , class O2 = void 240 , class O3 = void 241 , class O4 = void 242 > 243 #else 244 template<class ...Options> 245 #endif 246 class set_base_hook; 247 248 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 249 template 250 < class O1 = void 251 , class O2 = void 252 , class O3 = void 253 , class O4 = void 254 > 255 #else 256 template<class ...Options> 257 #endif 258 class set_member_hook; 259 260 //splaytree/splay_set/splay_multiset 261 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 262 template 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 272 template<class T, class ...Options> 273 #endif 274 class splaytree; 275 276 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 277 template 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 287 template<class T, class ...Options> 288 #endif 289 class splay_set; 290 291 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 292 template 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 302 template<class T, class ...Options> 303 #endif 304 class splay_multiset; 305 306 //avltree/avl_set/avl_multiset 307 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 308 template 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 318 template<class T, class ...Options> 319 #endif 320 class avltree; 321 322 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 323 template 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 333 template<class T, class ...Options> 334 #endif 335 class avl_set; 336 337 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 338 template 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 348 template<class T, class ...Options> 349 #endif 350 class avl_multiset; 351 352 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 353 template 354 < class O1 = void 355 , class O2 = void 356 , class O3 = void 357 , class O4 = void 358 > 359 #else 360 template<class ...Options> 361 #endif 362 class avl_set_base_hook; 363 364 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 365 template 366 < class O1 = void 367 , class O2 = void 368 , class O3 = void 369 , class O4 = void 370 > 371 #else 372 template<class ...Options> 373 #endif 374 class avl_set_member_hook; 375 376 377 //treap/treap_set/treap_multiset 378 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 379 template 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 390 template<class T, class ...Options> 391 #endif 392 class treap; 393 394 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 395 template 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 406 template<class T, class ...Options> 407 #endif 408 class treap_set; 409 410 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 411 template 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 422 template<class T, class ...Options> 423 #endif 424 class treap_multiset; 425 426 //sgtree/sg_set/sg_multiset 427 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 428 template 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 438 template<class T, class ...Options> 439 #endif 440 class sgtree; 441 442 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 443 template 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 453 template<class T, class ...Options> 454 #endif 455 class sg_set; 456 457 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 458 template 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 468 template<class T, class ...Options> 469 #endif 470 class sg_multiset; 471 472 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 473 template 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 483 template<class T, class ...Options> 484 #endif 485 class bstree; 486 487 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 488 template 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 498 template<class T, class ...Options> 499 #endif 500 class bs_set; 501 502 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 503 template 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 513 template<class T, class ...Options> 514 #endif 515 class bs_multiset; 516 517 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 518 template 519 < class O1 = void 520 , class O2 = void 521 , class O3 = void 522 > 523 #else 524 template<class ...Options> 525 #endif 526 class bs_set_base_hook; 527 528 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 529 template 530 < class O1 = void 531 , class O2 = void 532 , class O3 = void 533 > 534 #else 535 template<class ...Options> 536 #endif 537 class bs_set_member_hook; 538 539 //hashtable/unordered_set/unordered_multiset 540 541 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 542 template 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 556 template<class T, class ...Options> 557 #endif 558 class hashtable; 559 560 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 561 template 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 > 574 #else 575 template<class T, class ...Options> 576 #endif 577 class unordered_set; 578 579 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 580 template 581 < class T 582 , class O1 = void 583 , class O2 = void 584 , class O3 = void 585 , class O4 = void 586 , class O5 = void 587 , class O6 = void 588 , class O7 = void 589 , class O8 = void 590 , class O9 = void 591 , class O10 = void 592 > 593 #else 594 template<class T, class ...Options> 595 #endif 596 class unordered_multiset; 597 598 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 599 template 600 < class O1 = void 601 , class O2 = void 602 , class O3 = void 603 , class O4 = void 604 > 605 #else 606 template<class ...Options> 607 #endif 608 class unordered_set_base_hook; 609 610 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 611 template 612 < class O1 = void 613 , class O2 = void 614 , class O3 = void 615 , class O4 = void 616 > 617 #else 618 template<class ...Options> 619 #endif 620 class unordered_set_member_hook; 621 622 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 623 template 624 < class O1 = void 625 , class O2 = void 626 , class O3 = void 627 > 628 #else 629 template<class ...Options> 630 #endif 631 class any_base_hook; 632 633 #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES) 634 template 635 < class O1 = void 636 , class O2 = void 637 , class O3 = void 638 > 639 #else 640 template<class ...Options> 641 #endif 642 class any_member_hook; 643 644 //Options 645 646 template<bool Enabled> 647 struct constant_time_size; 648 649 template<typename SizeType> 650 struct size_type; 651 652 template<typename Compare> 653 struct compare; 654 655 template<bool Enabled> 656 struct floating_point; 657 658 template<typename Equal> 659 struct equal; 660 661 template<typename Priority> 662 struct priority; 663 664 template<typename Hash> 665 struct hash; 666 667 template<typename ValueTraits> struct value_traits; 668 669 template< typename Parent 670 , typename MemberHook 671 , MemberHook Parent::* PtrToMember> 672 struct member_hook; 673 674 template<typename Functor> 675 struct function_hook; 676 677 template<typename BaseHook> 678 struct base_hook; 679 680 template<typename VoidPointer> 681 struct void_pointer; 682 683 template<typename Tag> 684 struct tag; 685 686 template<link_mode_type LinkType> 687 struct link_mode; 688 689 template<bool Enabled> struct 690 optimize_size; 691 692 template<bool Enabled> 693 struct linear; 694 695 template<bool Enabled> 696 struct cache_last; 697 698 template<typename BucketTraits> 699 struct bucket_traits; 700 701 template<bool Enabled> 702 struct store_hash; 703 704 template<bool Enabled> 705 struct optimize_multikey; 706 707 template<bool Enabled> 708 struct power_2_buckets; 709 710 template<bool Enabled> 711 struct cache_begin; 712 713 template<bool Enabled> 714 struct compare_hash; 715 716 template<bool Enabled> 717 struct incremental; 718 719 //Value traits 720 721 template<typename ValueTraits> 722 struct value_traits; 723 724 template< typename Parent 725 , typename MemberHook 726 , MemberHook Parent::* PtrToMember> 727 struct member_hook; 728 729 template< typename Functor> 730 struct function_hook; 731 732 template<typename BaseHook> 733 struct base_hook; 734 735 template<class T, class NodeTraits, link_mode_type LinkMode = safe_link> 736 struct derivation_value_traits; 737 738 template<class NodeTraits, link_mode_type LinkMode = normal_link> 739 struct trivial_value_traits; 740 741 //Additional utilities 742 743 template<typename VoidPointer, std::size_t Alignment> 744 struct max_pointer_plus_bits; 745 746 template<std::size_t Alignment> 747 struct max_pointer_plus_bits<void *, Alignment>; 748 749 template<typename Pointer, std::size_t NumBits> 750 struct pointer_plus_bits; 751 752 template<typename T, std::size_t NumBits> 753 struct pointer_plus_bits<T *, NumBits>; 754 755 template<typename Ptr> 756 struct pointer_traits; 757 758 template<typename T> 759 struct pointer_traits<T *>; 760 761 } //namespace intrusive { 762 } //namespace boost { 763 764 #endif //#if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) 765 766 #endif //#ifndef BOOST_INTRUSIVE_FWD_HPP 767