intrusive_fwd.hpp 16 KB

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