intrusive_fwd.hpp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572
  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. #include <cstddef>
  15. #include <boost/intrusive/link_mode.hpp>
  16. #include <boost/intrusive/detail/workaround.hpp>
  17. /// @cond
  18. namespace boost {
  19. namespace intrusive {
  20. ////////////////////////////
  21. // Node algorithms
  22. ////////////////////////////
  23. //Algorithms predeclarations
  24. template<class NodeTraits>
  25. class circular_list_algorithms;
  26. template<class NodeTraits>
  27. class circular_slist_algorithms;
  28. template<class NodeTraits>
  29. class rbtree_algorithms;
  30. ////////////////////////////
  31. // Containers
  32. ////////////////////////////
  33. //slist
  34. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  35. template
  36. < class T
  37. , class O1 = void
  38. , class O2 = void
  39. , class O3 = void
  40. , class O4 = void
  41. , class O5 = void
  42. >
  43. #else
  44. template<class T, class ...Options>
  45. #endif
  46. class slist;
  47. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  48. template
  49. < class O1 = void
  50. , class O2 = void
  51. , class O3 = void
  52. >
  53. #else
  54. template<class ...Options>
  55. #endif
  56. class slist_base_hook;
  57. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  58. template
  59. < class O1 = void
  60. , class O2 = void
  61. , class O3 = void
  62. >
  63. #else
  64. template<class ...Options>
  65. #endif
  66. class slist_member_hook;
  67. //list
  68. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  69. template
  70. < class T
  71. , class O1 = void
  72. , class O2 = void
  73. , class O3 = void
  74. >
  75. #else
  76. template<class T, class ...Options>
  77. #endif
  78. class list;
  79. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  80. template
  81. < class O1 = void
  82. , class O2 = void
  83. , class O3 = void
  84. >
  85. #else
  86. template<class ...Options>
  87. #endif
  88. class list_base_hook;
  89. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  90. template
  91. < class O1 = void
  92. , class O2 = void
  93. , class O3 = void
  94. >
  95. #else
  96. template<class ...Options>
  97. #endif
  98. class list_member_hook;
  99. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  100. template
  101. < class O1 = void
  102. , class O2 = void
  103. , class O3 = void
  104. >
  105. #else
  106. template<class ...Options>
  107. #endif
  108. class list_hook;
  109. //rbtree/set/multiset
  110. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  111. template
  112. < class T
  113. , class O1 = void
  114. , class O2 = void
  115. , class O3 = void
  116. , class O4 = void
  117. >
  118. #else
  119. template<class T, class ...Options>
  120. #endif
  121. class rbtree;
  122. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  123. template
  124. < class T
  125. , class O1 = void
  126. , class O2 = void
  127. , class O3 = void
  128. , class O4 = void
  129. >
  130. #else
  131. template<class T, class ...Options>
  132. #endif
  133. class set;
  134. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  135. template
  136. < class T
  137. , class O1 = void
  138. , class O2 = void
  139. , class O3 = void
  140. , class O4 = void
  141. >
  142. #else
  143. template<class T, class ...Options>
  144. #endif
  145. class multiset;
  146. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  147. template
  148. < class O1 = void
  149. , class O2 = void
  150. , class O3 = void
  151. , class O4 = void
  152. >
  153. #else
  154. template<class ...Options>
  155. #endif
  156. class set_base_hook;
  157. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  158. template
  159. < class O1 = void
  160. , class O2 = void
  161. , class O3 = void
  162. , class O4 = void
  163. >
  164. #else
  165. template<class ...Options>
  166. #endif
  167. class set_member_hook;
  168. //splaytree/splay_set/splay_multiset
  169. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  170. template
  171. < class T
  172. , class O1 = void
  173. , class O2 = void
  174. , class O3 = void
  175. , class O4 = void
  176. >
  177. #else
  178. template<class T, class ...Options>
  179. #endif
  180. class splaytree;
  181. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  182. template
  183. < class T
  184. , class O1 = void
  185. , class O2 = void
  186. , class O3 = void
  187. , class O4 = void
  188. >
  189. #else
  190. template<class T, class ...Options>
  191. #endif
  192. class splay_set;
  193. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  194. template
  195. < class T
  196. , class O1 = void
  197. , class O2 = void
  198. , class O3 = void
  199. , class O4 = void
  200. >
  201. #else
  202. template<class T, class ...Options>
  203. #endif
  204. class splay_multiset;
  205. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  206. template
  207. < class O1 = void
  208. , class O2 = void
  209. , class O3 = void
  210. >
  211. #else
  212. template<class ...Options>
  213. #endif
  214. class splay_set_base_hook;
  215. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  216. template
  217. < class O1 = void
  218. , class O2 = void
  219. , class O3 = void
  220. >
  221. #else
  222. template<class ...Options>
  223. #endif
  224. class splay_set_member_hook;
  225. //avltree/avl_set/avl_multiset
  226. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  227. template
  228. < class T
  229. , class O1 = void
  230. , class O2 = void
  231. , class O3 = void
  232. , class O4 = void
  233. >
  234. #else
  235. template<class T, class ...Options>
  236. #endif
  237. class avltree;
  238. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  239. template
  240. < class T
  241. , class O1 = void
  242. , class O2 = void
  243. , class O3 = void
  244. , class O4 = void
  245. >
  246. #else
  247. template<class T, class ...Options>
  248. #endif
  249. class avl_set;
  250. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  251. template
  252. < class T
  253. , class O1 = void
  254. , class O2 = void
  255. , class O3 = void
  256. , class O4 = void
  257. >
  258. #else
  259. template<class T, class ...Options>
  260. #endif
  261. class avl_multiset;
  262. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  263. template
  264. < class O1 = void
  265. , class O2 = void
  266. , class O3 = void
  267. , class O4 = void
  268. >
  269. #else
  270. template<class ...Options>
  271. #endif
  272. class avl_set_base_hook;
  273. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  274. template
  275. < class O1 = void
  276. , class O2 = void
  277. , class O3 = void
  278. , class O4 = void
  279. >
  280. #else
  281. template<class ...Options>
  282. #endif
  283. class avl_set_member_hook;
  284. //treap/treap_set/treap_multiset
  285. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  286. template
  287. < class T
  288. , class O1 = void
  289. , class O2 = void
  290. , class O3 = void
  291. , class O4 = void
  292. >
  293. #else
  294. template<class T, class ...Options>
  295. #endif
  296. class treap;
  297. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  298. template
  299. < class T
  300. , class O1 = void
  301. , class O2 = void
  302. , class O3 = void
  303. , class O4 = void
  304. >
  305. #else
  306. template<class T, class ...Options>
  307. #endif
  308. class treap_set;
  309. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  310. template
  311. < class T
  312. , class O1 = void
  313. , class O2 = void
  314. , class O3 = void
  315. , class O4 = void
  316. >
  317. #else
  318. template<class T, class ...Options>
  319. #endif
  320. class treap_multiset;
  321. //Default priority comparison functor
  322. template <class T>
  323. struct priority_compare;
  324. //sgtree/sg_set/sg_multiset
  325. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  326. template
  327. < class T
  328. , class O1 = void
  329. , class O2 = void
  330. , class O3 = void
  331. , class O4 = void
  332. >
  333. #else
  334. template<class T, class ...Options>
  335. #endif
  336. class sgtree;
  337. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !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. >
  345. #else
  346. template<class T, class ...Options>
  347. #endif
  348. class sg_set;
  349. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  350. template
  351. < class T
  352. , class O1 = void
  353. , class O2 = void
  354. , class O3 = void
  355. , class O4 = void
  356. >
  357. #else
  358. template<class T, class ...Options>
  359. #endif
  360. class sg_multiset;
  361. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  362. template
  363. < class T
  364. , class O1 = void
  365. , class O2 = void
  366. , class O3 = void
  367. , class O4 = void
  368. >
  369. #else
  370. template<class T, class ...Options>
  371. #endif
  372. class bstree;
  373. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  374. template
  375. < class T
  376. , class O1 = void
  377. , class O2 = void
  378. , class O3 = void
  379. , class O4 = void
  380. >
  381. #else
  382. template<class T, class ...Options>
  383. #endif
  384. class bs_set;
  385. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  386. template
  387. < class T
  388. , class O1 = void
  389. , class O2 = void
  390. , class O3 = void
  391. , class O4 = void
  392. >
  393. #else
  394. template<class T, class ...Options>
  395. #endif
  396. class bs_multiset;
  397. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  398. template
  399. < class O1 = void
  400. , class O2 = void
  401. , class O3 = void
  402. >
  403. #else
  404. template<class ...Options>
  405. #endif
  406. class bs_set_base_hook;
  407. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  408. template
  409. < class O1 = void
  410. , class O2 = void
  411. , class O3 = void
  412. >
  413. #else
  414. template<class ...Options>
  415. #endif
  416. class bs_set_member_hook;
  417. //hashtable/unordered_set/unordered_multiset
  418. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  419. template
  420. < class T
  421. , class O1 = void
  422. , class O2 = void
  423. , class O3 = void
  424. , class O4 = void
  425. , class O5 = void
  426. , class O6 = void
  427. , class O7 = void
  428. , class O8 = void
  429. , class O9 = void
  430. , class O10 = void
  431. >
  432. #else
  433. template<class T, class ...Options>
  434. #endif
  435. class hashtable;
  436. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  437. template
  438. < class T
  439. , class O1 = void
  440. , class O2 = void
  441. , class O3 = void
  442. , class O4 = void
  443. , class O5 = void
  444. , class O6 = void
  445. , class O7 = void
  446. , class O8 = void
  447. , class O9 = void
  448. , class O10 = void
  449. >
  450. #else
  451. template<class T, class ...Options>
  452. #endif
  453. class unordered_set;
  454. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  455. template
  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. , class O7 = void
  464. , class O8 = void
  465. , class O9 = void
  466. , class O10 = void
  467. >
  468. #else
  469. template<class T, class ...Options>
  470. #endif
  471. class unordered_multiset;
  472. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  473. template
  474. < class O1 = void
  475. , class O2 = void
  476. , class O3 = void
  477. , class O4 = void
  478. >
  479. #else
  480. template<class ...Options>
  481. #endif
  482. class unordered_set_base_hook;
  483. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  484. template
  485. < class O1 = void
  486. , class O2 = void
  487. , class O3 = void
  488. , class O4 = void
  489. >
  490. #else
  491. template<class ...Options>
  492. #endif
  493. class unordered_set_member_hook;
  494. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  495. template
  496. < class O1 = void
  497. , class O2 = void
  498. , class O3 = void
  499. >
  500. #else
  501. template<class ...Options>
  502. #endif
  503. class any_base_hook;
  504. #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) && !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
  505. template
  506. < class O1 = void
  507. , class O2 = void
  508. , class O3 = void
  509. >
  510. #else
  511. template<class ...Options>
  512. #endif
  513. class any_member_hook;
  514. } //namespace intrusive {
  515. } //namespace boost {
  516. /// @endcond
  517. #endif //#ifndef BOOST_INTRUSIVE_FWD_HPP