passenger 4.0.60 → 5.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of passenger might be problematic. Click here for more details.

Files changed (1301) hide show
  1. checksums.yaml +8 -8
  2. checksums.yaml.gz.asc +7 -7
  3. data.tar.gz.asc +7 -7
  4. data/.editorconfig +5 -0
  5. data/.travis.yml +3 -2
  6. data/CHANGELOG +31 -53
  7. data/CONTRIBUTING.md +4 -4
  8. data/CONTRIBUTORS +0 -1
  9. data/Gemfile +18 -0
  10. data/Gemfile.lock +41 -0
  11. data/Rakefile +16 -0
  12. data/bin/passenger +2 -2
  13. data/bin/passenger-install-apache2-module +12 -12
  14. data/bin/passenger-install-nginx-module +9 -14
  15. data/bin/passenger-status +125 -87
  16. data/build/agents.rb +112 -140
  17. data/build/apache2.rb +4 -9
  18. data/build/basics.rb +5 -3
  19. data/build/common_library.rb +1 -0
  20. data/build/cxx_tests.rb +69 -47
  21. data/build/debian.rb +4 -2
  22. data/build/documentation.rb +1 -0
  23. data/build/integration_tests.rb +28 -43
  24. data/build/misc.rb +0 -18
  25. data/build/nginx.rb +2 -6
  26. data/build/packaging.rb +33 -22
  27. data/build/preprocessor.rb +2 -4
  28. data/build/ruby_tests.rb +7 -26
  29. data/build/test_basics.rb +24 -25
  30. data/debian.template/control.template +2 -2
  31. data/debian.template/locations.ini.template +2 -3
  32. data/debian.template/passenger.install.template +2 -2
  33. data/debian.template/rules.template +1 -1
  34. data/dev/ci/run_jenkins.sh +0 -1
  35. data/dev/ci/run_rpm_tests.sh +3 -0
  36. data/dev/ci/run_travis.sh +63 -17
  37. data/dev/copy_boost_headers +22 -6
  38. data/dev/ruby_server.rb +244 -0
  39. data/dev/vagrant/provision.sh +3 -1
  40. data/doc/DebuggingAndStressTesting.md +3 -3
  41. data/doc/Design and Architecture.txt +5 -6
  42. data/doc/Packaging.txt.md +35 -6
  43. data/doc/ServerOptimizationGuide.txt.md +339 -0
  44. data/doc/Users guide Apache.idmap.txt +177 -187
  45. data/doc/Users guide Apache.txt +143 -219
  46. data/doc/Users guide Nginx.idmap.txt +166 -166
  47. data/doc/Users guide Nginx.txt +265 -223
  48. data/doc/Users guide Standalone.txt +3 -3
  49. data/doc/templates/markdown.html.erb +37 -6
  50. data/doc/users_guide_snippets/environment_variables.txt +1 -1
  51. data/doc/users_guide_snippets/support_information.txt +1 -1
  52. data/doc/users_guide_snippets/tips.txt +2 -2
  53. data/ext/apache2/Configuration.cpp +23 -81
  54. data/ext/apache2/Configuration.hpp +18 -92
  55. data/ext/apache2/ConfigurationCommands.cpp +64 -15
  56. data/ext/apache2/ConfigurationCommands.cpp.erb +8 -4
  57. data/ext/apache2/ConfigurationFields.hpp +12 -0
  58. data/ext/apache2/ConfigurationSetters.cpp +73 -1
  59. data/ext/apache2/ConfigurationSetters.cpp.erb +3 -2
  60. data/ext/apache2/CreateDirConfig.cpp +6 -0
  61. data/ext/apache2/DirectoryMapper.h +11 -6
  62. data/ext/apache2/Hooks.cpp +291 -408
  63. data/ext/apache2/MergeDirConfig.cpp +42 -0
  64. data/ext/apache2/SetHeaders.cpp +61 -16
  65. data/ext/apache2/SetHeaders.cpp.erb +9 -7
  66. data/ext/boost/container/allocator_traits.hpp +400 -0
  67. data/ext/boost/container/deque.hpp +2012 -0
  68. data/ext/boost/container/detail/adaptive_node_pool_impl.hpp +874 -0
  69. data/ext/boost/container/detail/advanced_insert_int.hpp +369 -0
  70. data/ext/boost/container/detail/algorithms.hpp +84 -0
  71. data/ext/boost/container/detail/allocation_type.hpp +54 -0
  72. data/ext/boost/container/detail/allocator_version_traits.hpp +163 -0
  73. data/ext/boost/container/detail/config_begin.hpp +49 -0
  74. data/ext/boost/container/detail/config_end.hpp +17 -0
  75. data/ext/boost/container/detail/destroyers.hpp +365 -0
  76. data/ext/boost/container/detail/flat_tree.hpp +1055 -0
  77. data/ext/boost/container/detail/function_detector.hpp +88 -0
  78. data/ext/boost/container/detail/iterators.hpp +611 -0
  79. data/ext/boost/container/detail/math_functions.hpp +113 -0
  80. data/ext/boost/container/detail/memory_util.hpp +83 -0
  81. data/ext/boost/container/detail/mpl.hpp +160 -0
  82. data/ext/boost/container/detail/multiallocation_chain.hpp +286 -0
  83. data/ext/boost/container/detail/node_alloc_holder.hpp +386 -0
  84. data/ext/boost/container/detail/node_pool_impl.hpp +365 -0
  85. data/ext/boost/container/detail/pair.hpp +354 -0
  86. data/ext/boost/container/detail/pool_common.hpp +52 -0
  87. data/ext/boost/container/detail/preprocessor.hpp +232 -0
  88. data/ext/boost/container/detail/transform_iterator.hpp +176 -0
  89. data/ext/boost/container/detail/tree.hpp +1134 -0
  90. data/ext/boost/container/detail/type_traits.hpp +210 -0
  91. data/ext/boost/container/detail/utilities.hpp +1141 -0
  92. data/ext/boost/container/detail/value_init.hpp +45 -0
  93. data/ext/boost/container/detail/variadic_templates_tools.hpp +153 -0
  94. data/ext/boost/container/detail/version_type.hpp +92 -0
  95. data/ext/boost/container/detail/workaround.hpp +44 -0
  96. data/ext/boost/container/flat_map.hpp +1674 -0
  97. data/ext/boost/container/flat_set.hpp +1408 -0
  98. data/ext/boost/container/list.hpp +1475 -0
  99. data/ext/boost/container/map.hpp +1508 -0
  100. data/ext/boost/container/scoped_allocator.hpp +1503 -0
  101. data/ext/boost/container/scoped_allocator_fwd.hpp +83 -0
  102. data/ext/boost/container/set.hpp +1280 -0
  103. data/ext/boost/container/slist.hpp +1706 -0
  104. data/ext/boost/container/stable_vector.hpp +1869 -0
  105. data/ext/boost/container/static_vector.hpp +1053 -0
  106. data/ext/boost/container/string.hpp +2856 -0
  107. data/ext/boost/container/throw_exception.hpp +110 -0
  108. data/ext/boost/container/vector.hpp +2671 -0
  109. data/ext/boost/detail/is_xxx.hpp +61 -0
  110. data/ext/boost/intrusive/any_hook.hpp +344 -0
  111. data/ext/boost/intrusive/avl_set.hpp +2528 -0
  112. data/ext/boost/intrusive/avl_set_hook.hpp +297 -0
  113. data/ext/boost/intrusive/avltree.hpp +1786 -0
  114. data/ext/boost/intrusive/avltree_algorithms.hpp +968 -0
  115. data/ext/boost/intrusive/bs_set_hook.hpp +296 -0
  116. data/ext/boost/intrusive/circular_list_algorithms.hpp +413 -0
  117. data/ext/boost/intrusive/circular_slist_algorithms.hpp +404 -0
  118. data/ext/boost/intrusive/derivation_value_traits.hpp +70 -0
  119. data/ext/boost/intrusive/detail/any_node_and_algorithms.hpp +297 -0
  120. data/ext/boost/intrusive/detail/assert.hpp +41 -0
  121. data/ext/boost/intrusive/detail/avltree_node.hpp +197 -0
  122. data/ext/boost/intrusive/detail/clear_on_destructor_base.hpp +36 -0
  123. data/ext/boost/intrusive/detail/common_slist_algorithms.hpp +102 -0
  124. data/ext/boost/intrusive/detail/config_begin.hpp +52 -0
  125. data/ext/boost/intrusive/detail/config_end.hpp +15 -0
  126. data/ext/boost/intrusive/detail/ebo_functor_holder.hpp +95 -0
  127. data/ext/boost/intrusive/detail/function_detector.hpp +88 -0
  128. data/ext/boost/intrusive/detail/generic_hook.hpp +209 -0
  129. data/ext/boost/intrusive/detail/has_member_function_callable_with.hpp +357 -0
  130. data/ext/boost/intrusive/detail/hashtable_node.hpp +249 -0
  131. data/ext/boost/intrusive/detail/is_stateful_value_traits.hpp +77 -0
  132. data/ext/boost/intrusive/detail/list_node.hpp +196 -0
  133. data/ext/boost/intrusive/detail/memory_util.hpp +288 -0
  134. data/ext/boost/intrusive/detail/mpl.hpp +383 -0
  135. data/ext/boost/intrusive/detail/parent_from_member.hpp +97 -0
  136. data/ext/boost/intrusive/detail/preprocessor.hpp +52 -0
  137. data/ext/boost/intrusive/detail/rbtree_node.hpp +201 -0
  138. data/ext/boost/intrusive/detail/slist_node.hpp +166 -0
  139. data/ext/boost/intrusive/detail/transform_iterator.hpp +173 -0
  140. data/ext/boost/intrusive/detail/tree_algorithms.hpp +1742 -0
  141. data/ext/boost/intrusive/detail/tree_node.hpp +199 -0
  142. data/ext/boost/intrusive/detail/utilities.hpp +858 -0
  143. data/ext/boost/intrusive/detail/workaround.hpp +22 -0
  144. data/ext/boost/intrusive/hashtable.hpp +3110 -0
  145. data/ext/boost/intrusive/intrusive_fwd.hpp +542 -0
  146. data/ext/boost/intrusive/linear_slist_algorithms.hpp +327 -0
  147. data/ext/boost/intrusive/link_mode.hpp +46 -0
  148. data/ext/boost/intrusive/list.hpp +1525 -0
  149. data/ext/boost/intrusive/list_hook.hpp +290 -0
  150. data/ext/boost/intrusive/member_value_traits.hpp +70 -0
  151. data/ext/boost/intrusive/options.hpp +810 -0
  152. data/ext/boost/intrusive/parent_from_member.hpp +42 -0
  153. data/ext/boost/intrusive/pointer_plus_bits.hpp +86 -0
  154. data/ext/boost/intrusive/pointer_traits.hpp +265 -0
  155. data/ext/boost/intrusive/priority_compare.hpp +39 -0
  156. data/ext/boost/intrusive/rbtree.hpp +1785 -0
  157. data/ext/boost/intrusive/rbtree_algorithms.hpp +934 -0
  158. data/ext/boost/intrusive/set.hpp +2554 -0
  159. data/ext/boost/intrusive/set_hook.hpp +300 -0
  160. data/ext/boost/intrusive/sg_set.hpp +2601 -0
  161. data/ext/boost/intrusive/sgtree.hpp +2009 -0
  162. data/ext/boost/intrusive/sgtree_algorithms.hpp +807 -0
  163. data/ext/boost/intrusive/slist.hpp +2219 -0
  164. data/ext/boost/intrusive/slist_hook.hpp +294 -0
  165. data/ext/boost/intrusive/splay_set.hpp +2575 -0
  166. data/ext/boost/intrusive/splay_set_hook.hpp +292 -0
  167. data/ext/boost/intrusive/splaytree.hpp +1784 -0
  168. data/ext/boost/intrusive/splaytree_algorithms.hpp +1008 -0
  169. data/ext/boost/intrusive/treap.hpp +1882 -0
  170. data/ext/boost/intrusive/treap_algorithms.hpp +919 -0
  171. data/ext/boost/intrusive/treap_set.hpp +2751 -0
  172. data/ext/boost/intrusive/trivial_value_traits.hpp +46 -0
  173. data/ext/boost/intrusive/unordered_set.hpp +2115 -0
  174. data/ext/boost/intrusive/unordered_set_hook.hpp +434 -0
  175. data/ext/boost/intrusive_ptr.hpp +18 -0
  176. data/ext/boost/math/common_factor_ct.hpp +180 -0
  177. data/ext/boost/math_fwd.hpp +108 -0
  178. data/ext/boost/move/detail/move_helpers.hpp +175 -0
  179. data/ext/boost/parameter.hpp +21 -0
  180. data/ext/boost/parameter/aux_/arg_list.hpp +459 -0
  181. data/ext/boost/parameter/aux_/cast.hpp +143 -0
  182. data/ext/boost/parameter/aux_/default.hpp +69 -0
  183. data/ext/boost/parameter/aux_/is_maybe.hpp +26 -0
  184. data/ext/boost/parameter/aux_/maybe.hpp +120 -0
  185. data/ext/boost/parameter/aux_/overloads.hpp +88 -0
  186. data/ext/boost/parameter/aux_/parameter_requirements.hpp +25 -0
  187. data/ext/boost/parameter/aux_/parenthesized_type.hpp +119 -0
  188. data/ext/boost/parameter/aux_/preprocessor/flatten.hpp +115 -0
  189. data/ext/boost/parameter/aux_/preprocessor/for_each.hpp +103 -0
  190. data/ext/boost/parameter/aux_/python/invoker.hpp +132 -0
  191. data/ext/boost/parameter/aux_/python/invoker_iterate.hpp +93 -0
  192. data/ext/boost/parameter/aux_/result_of0.hpp +36 -0
  193. data/ext/boost/parameter/aux_/set.hpp +67 -0
  194. data/ext/boost/parameter/aux_/tag.hpp +38 -0
  195. data/ext/boost/parameter/aux_/tagged_argument.hpp +188 -0
  196. data/ext/boost/parameter/aux_/template_keyword.hpp +47 -0
  197. data/ext/boost/parameter/aux_/unwrap_cv_reference.hpp +97 -0
  198. data/ext/boost/parameter/aux_/void.hpp +29 -0
  199. data/ext/boost/parameter/aux_/yesno.hpp +26 -0
  200. data/ext/boost/parameter/binding.hpp +106 -0
  201. data/ext/boost/parameter/config.hpp +14 -0
  202. data/ext/boost/parameter/keyword.hpp +152 -0
  203. data/ext/boost/parameter/macros.hpp +99 -0
  204. data/ext/boost/parameter/match.hpp +55 -0
  205. data/ext/boost/parameter/name.hpp +156 -0
  206. data/ext/boost/parameter/parameters.hpp +931 -0
  207. data/ext/boost/parameter/preprocessor.hpp +1178 -0
  208. data/ext/boost/parameter/python.hpp +735 -0
  209. data/ext/boost/parameter/value_type.hpp +108 -0
  210. data/ext/boost/pool/detail/for.m4 +107 -0
  211. data/ext/boost/pool/detail/guard.hpp +69 -0
  212. data/ext/boost/pool/detail/mutex.hpp +42 -0
  213. data/ext/boost/pool/detail/pool_construct.bat +24 -0
  214. data/ext/boost/pool/detail/pool_construct.ipp +852 -0
  215. data/ext/boost/pool/detail/pool_construct.m4 +84 -0
  216. data/ext/boost/pool/detail/pool_construct.sh +12 -0
  217. data/ext/boost/pool/detail/pool_construct_simple.bat +25 -0
  218. data/ext/boost/pool/detail/pool_construct_simple.ipp +43 -0
  219. data/ext/boost/pool/detail/pool_construct_simple.m4 +72 -0
  220. data/ext/boost/pool/detail/pool_construct_simple.sh +12 -0
  221. data/ext/boost/pool/object_pool.hpp +287 -0
  222. data/ext/boost/pool/pool.hpp +1024 -0
  223. data/ext/boost/pool/pool_alloc.hpp +488 -0
  224. data/ext/boost/pool/poolfwd.hpp +82 -0
  225. data/ext/boost/pool/simple_segregated_storage.hpp +377 -0
  226. data/ext/boost/pool/singleton_pool.hpp +251 -0
  227. data/ext/boost/preprocessor/arithmetic.hpp +25 -0
  228. data/ext/boost/preprocessor/arithmetic/detail/div_base.hpp +61 -0
  229. data/ext/boost/preprocessor/arithmetic/div.hpp +39 -0
  230. data/ext/boost/preprocessor/arithmetic/mod.hpp +39 -0
  231. data/ext/boost/preprocessor/arithmetic/mul.hpp +53 -0
  232. data/ext/boost/preprocessor/array.hpp +32 -0
  233. data/ext/boost/preprocessor/array/enum.hpp +33 -0
  234. data/ext/boost/preprocessor/array/insert.hpp +55 -0
  235. data/ext/boost/preprocessor/array/pop_back.hpp +37 -0
  236. data/ext/boost/preprocessor/array/pop_front.hpp +38 -0
  237. data/ext/boost/preprocessor/array/push_back.hpp +33 -0
  238. data/ext/boost/preprocessor/array/push_front.hpp +33 -0
  239. data/ext/boost/preprocessor/array/remove.hpp +54 -0
  240. data/ext/boost/preprocessor/array/replace.hpp +49 -0
  241. data/ext/boost/preprocessor/array/reverse.hpp +29 -0
  242. data/ext/boost/preprocessor/array/to_list.hpp +33 -0
  243. data/ext/boost/preprocessor/array/to_seq.hpp +33 -0
  244. data/ext/boost/preprocessor/array/to_tuple.hpp +22 -0
  245. data/ext/boost/preprocessor/assert_msg.hpp +17 -0
  246. data/ext/boost/preprocessor/comma.hpp +17 -0
  247. data/ext/boost/preprocessor/comparison.hpp +24 -0
  248. data/ext/boost/preprocessor/comparison/equal.hpp +34 -0
  249. data/ext/boost/preprocessor/comparison/greater.hpp +38 -0
  250. data/ext/boost/preprocessor/comparison/greater_equal.hpp +38 -0
  251. data/ext/boost/preprocessor/comparison/less.hpp +46 -0
  252. data/ext/boost/preprocessor/comparison/less_equal.hpp +39 -0
  253. data/ext/boost/preprocessor/comparison/not_equal.hpp +814 -0
  254. data/ext/boost/preprocessor/config/limits.hpp +30 -0
  255. data/ext/boost/preprocessor/control.hpp +22 -0
  256. data/ext/boost/preprocessor/control/deduce_d.hpp +22 -0
  257. data/ext/boost/preprocessor/control/detail/dmc/while.hpp +536 -0
  258. data/ext/boost/preprocessor/control/detail/edg/while.hpp +534 -0
  259. data/ext/boost/preprocessor/control/detail/msvc/while.hpp +277 -0
  260. data/ext/boost/preprocessor/control/expr_if.hpp +30 -0
  261. data/ext/boost/preprocessor/debug.hpp +18 -0
  262. data/ext/boost/preprocessor/debug/assert.hpp +44 -0
  263. data/ext/boost/preprocessor/debug/line.hpp +35 -0
  264. data/ext/boost/preprocessor/detail/dmc/auto_rec.hpp +286 -0
  265. data/ext/boost/preprocessor/detail/is_nullary.hpp +30 -0
  266. data/ext/boost/preprocessor/detail/is_unary.hpp +30 -0
  267. data/ext/boost/preprocessor/detail/null.hpp +17 -0
  268. data/ext/boost/preprocessor/detail/split.hpp +35 -0
  269. data/ext/boost/preprocessor/enum_params_with_defaults.hpp +17 -0
  270. data/ext/boost/preprocessor/enum_shifted.hpp +17 -0
  271. data/ext/boost/preprocessor/expand.hpp +17 -0
  272. data/ext/boost/preprocessor/expr_if.hpp +17 -0
  273. data/ext/boost/preprocessor/facilities.hpp +23 -0
  274. data/ext/boost/preprocessor/facilities/apply.hpp +34 -0
  275. data/ext/boost/preprocessor/facilities/expand.hpp +28 -0
  276. data/ext/boost/preprocessor/facilities/is_1.hpp +23 -0
  277. data/ext/boost/preprocessor/facilities/is_empty.hpp +43 -0
  278. data/ext/boost/preprocessor/facilities/is_empty_or_1.hpp +30 -0
  279. data/ext/boost/preprocessor/for.hpp +17 -0
  280. data/ext/boost/preprocessor/if.hpp +17 -0
  281. data/ext/boost/preprocessor/iteration.hpp +19 -0
  282. data/ext/boost/preprocessor/iteration/detail/bounds/lower3.hpp +99 -0
  283. data/ext/boost/preprocessor/iteration/detail/bounds/lower4.hpp +99 -0
  284. data/ext/boost/preprocessor/iteration/detail/bounds/lower5.hpp +99 -0
  285. data/ext/boost/preprocessor/iteration/detail/bounds/upper3.hpp +99 -0
  286. data/ext/boost/preprocessor/iteration/detail/bounds/upper4.hpp +99 -0
  287. data/ext/boost/preprocessor/iteration/detail/bounds/upper5.hpp +99 -0
  288. data/ext/boost/preprocessor/iteration/detail/finish.hpp +99 -0
  289. data/ext/boost/preprocessor/iteration/detail/iter/forward3.hpp +1338 -0
  290. data/ext/boost/preprocessor/iteration/detail/iter/forward4.hpp +1338 -0
  291. data/ext/boost/preprocessor/iteration/detail/iter/forward5.hpp +1338 -0
  292. data/ext/boost/preprocessor/iteration/detail/iter/reverse2.hpp +1296 -0
  293. data/ext/boost/preprocessor/iteration/detail/iter/reverse3.hpp +1296 -0
  294. data/ext/boost/preprocessor/iteration/detail/iter/reverse4.hpp +1296 -0
  295. data/ext/boost/preprocessor/iteration/detail/iter/reverse5.hpp +1296 -0
  296. data/ext/boost/preprocessor/iteration/detail/local.hpp +812 -0
  297. data/ext/boost/preprocessor/iteration/detail/rlocal.hpp +782 -0
  298. data/ext/boost/preprocessor/iteration/detail/self.hpp +21 -0
  299. data/ext/boost/preprocessor/iteration/detail/start.hpp +99 -0
  300. data/ext/boost/preprocessor/iteration/local.hpp +26 -0
  301. data/ext/boost/preprocessor/iteration/self.hpp +19 -0
  302. data/ext/boost/preprocessor/library.hpp +36 -0
  303. data/ext/boost/preprocessor/limits.hpp +17 -0
  304. data/ext/boost/preprocessor/list.hpp +37 -0
  305. data/ext/boost/preprocessor/list/at.hpp +39 -0
  306. data/ext/boost/preprocessor/list/cat.hpp +42 -0
  307. data/ext/boost/preprocessor/list/detail/dmc/fold_left.hpp +279 -0
  308. data/ext/boost/preprocessor/list/detail/edg/fold_left.hpp +536 -0
  309. data/ext/boost/preprocessor/list/detail/edg/fold_right.hpp +794 -0
  310. data/ext/boost/preprocessor/list/enum.hpp +41 -0
  311. data/ext/boost/preprocessor/list/filter.hpp +54 -0
  312. data/ext/boost/preprocessor/list/first_n.hpp +58 -0
  313. data/ext/boost/preprocessor/list/for_each.hpp +49 -0
  314. data/ext/boost/preprocessor/list/for_each_product.hpp +141 -0
  315. data/ext/boost/preprocessor/list/rest_n.hpp +55 -0
  316. data/ext/boost/preprocessor/list/size.hpp +58 -0
  317. data/ext/boost/preprocessor/list/to_array.hpp +123 -0
  318. data/ext/boost/preprocessor/list/to_seq.hpp +32 -0
  319. data/ext/boost/preprocessor/list/to_tuple.hpp +38 -0
  320. data/ext/boost/preprocessor/logical.hpp +29 -0
  321. data/ext/boost/preprocessor/logical/bitnor.hpp +38 -0
  322. data/ext/boost/preprocessor/logical/bitor.hpp +38 -0
  323. data/ext/boost/preprocessor/logical/bitxor.hpp +38 -0
  324. data/ext/boost/preprocessor/logical/nor.hpp +30 -0
  325. data/ext/boost/preprocessor/logical/not.hpp +30 -0
  326. data/ext/boost/preprocessor/logical/or.hpp +30 -0
  327. data/ext/boost/preprocessor/logical/xor.hpp +30 -0
  328. data/ext/boost/preprocessor/max.hpp +17 -0
  329. data/ext/boost/preprocessor/min.hpp +17 -0
  330. data/ext/boost/preprocessor/punctuation.hpp +20 -0
  331. data/ext/boost/preprocessor/punctuation/paren_if.hpp +38 -0
  332. data/ext/boost/preprocessor/repeat_3rd.hpp +17 -0
  333. data/ext/boost/preprocessor/repeat_from_to.hpp +17 -0
  334. data/ext/boost/preprocessor/repeat_from_to_2nd.hpp +17 -0
  335. data/ext/boost/preprocessor/repeat_from_to_3rd.hpp +17 -0
  336. data/ext/boost/preprocessor/repetition.hpp +32 -0
  337. data/ext/boost/preprocessor/repetition/deduce_r.hpp +22 -0
  338. data/ext/boost/preprocessor/repetition/deduce_z.hpp +22 -0
  339. data/ext/boost/preprocessor/repetition/detail/dmc/for.hpp +536 -0
  340. data/ext/boost/preprocessor/repetition/detail/edg/for.hpp +534 -0
  341. data/ext/boost/preprocessor/repetition/detail/msvc/for.hpp +277 -0
  342. data/ext/boost/preprocessor/repetition/enum_params_with_defaults.hpp +24 -0
  343. data/ext/boost/preprocessor/repetition/enum_shifted.hpp +68 -0
  344. data/ext/boost/preprocessor/repetition/enum_shifted_binary_params.hpp +51 -0
  345. data/ext/boost/preprocessor/repetition/enum_trailing.hpp +63 -0
  346. data/ext/boost/preprocessor/repetition/enum_trailing_binary_params.hpp +53 -0
  347. data/ext/boost/preprocessor/selection.hpp +18 -0
  348. data/ext/boost/preprocessor/selection/max.hpp +39 -0
  349. data/ext/boost/preprocessor/selection/min.hpp +39 -0
  350. data/ext/boost/preprocessor/seq.hpp +43 -0
  351. data/ext/boost/preprocessor/seq/cat.hpp +49 -0
  352. data/ext/boost/preprocessor/seq/detail/binary_transform.hpp +40 -0
  353. data/ext/boost/preprocessor/seq/detail/split.hpp +284 -0
  354. data/ext/boost/preprocessor/seq/filter.hpp +54 -0
  355. data/ext/boost/preprocessor/seq/first_n.hpp +30 -0
  356. data/ext/boost/preprocessor/seq/fold_left.hpp +1070 -0
  357. data/ext/boost/preprocessor/seq/fold_right.hpp +288 -0
  358. data/ext/boost/preprocessor/seq/for_each.hpp +60 -0
  359. data/ext/boost/preprocessor/seq/for_each_product.hpp +126 -0
  360. data/ext/boost/preprocessor/seq/insert.hpp +28 -0
  361. data/ext/boost/preprocessor/seq/pop_back.hpp +29 -0
  362. data/ext/boost/preprocessor/seq/pop_front.hpp +27 -0
  363. data/ext/boost/preprocessor/seq/push_back.hpp +19 -0
  364. data/ext/boost/preprocessor/seq/push_front.hpp +19 -0
  365. data/ext/boost/preprocessor/seq/remove.hpp +29 -0
  366. data/ext/boost/preprocessor/seq/replace.hpp +29 -0
  367. data/ext/boost/preprocessor/seq/rest_n.hpp +30 -0
  368. data/ext/boost/preprocessor/seq/reverse.hpp +39 -0
  369. data/ext/boost/preprocessor/seq/subseq.hpp +28 -0
  370. data/ext/boost/preprocessor/seq/to_array.hpp +28 -0
  371. data/ext/boost/preprocessor/seq/to_list.hpp +29 -0
  372. data/ext/boost/preprocessor/seq/to_tuple.hpp +27 -0
  373. data/ext/boost/preprocessor/seq/transform.hpp +48 -0
  374. data/ext/boost/preprocessor/slot.hpp +17 -0
  375. data/ext/boost/preprocessor/slot/counter.hpp +25 -0
  376. data/ext/boost/preprocessor/slot/detail/counter.hpp +269 -0
  377. data/ext/boost/preprocessor/slot/detail/slot1.hpp +267 -0
  378. data/ext/boost/preprocessor/slot/detail/slot2.hpp +267 -0
  379. data/ext/boost/preprocessor/slot/detail/slot3.hpp +267 -0
  380. data/ext/boost/preprocessor/slot/detail/slot4.hpp +267 -0
  381. data/ext/boost/preprocessor/slot/detail/slot5.hpp +267 -0
  382. data/ext/boost/preprocessor/tuple.hpp +28 -0
  383. data/ext/boost/preprocessor/tuple/enum.hpp +22 -0
  384. data/ext/boost/preprocessor/tuple/reverse.hpp +114 -0
  385. data/ext/boost/preprocessor/tuple/size.hpp +28 -0
  386. data/ext/boost/preprocessor/tuple/to_array.hpp +37 -0
  387. data/ext/boost/preprocessor/tuple/to_seq.hpp +114 -0
  388. data/ext/boost/preprocessor/variadic.hpp +23 -0
  389. data/ext/boost/preprocessor/variadic/to_array.hpp +32 -0
  390. data/ext/boost/preprocessor/variadic/to_list.hpp +25 -0
  391. data/ext/boost/preprocessor/variadic/to_seq.hpp +25 -0
  392. data/ext/boost/preprocessor/variadic/to_tuple.hpp +24 -0
  393. data/ext/boost/preprocessor/while.hpp +17 -0
  394. data/ext/boost/preprocessor/wstringize.hpp +29 -0
  395. data/ext/boost/smart_ptr/intrusive_ptr.hpp +324 -0
  396. data/ext/common/AccountsDatabase.h +3 -4
  397. data/ext/common/AgentsStarter.cpp +12 -15
  398. data/ext/common/AgentsStarter.h +54 -120
  399. data/ext/common/ApplicationPool2/AppTypes.cpp +12 -5
  400. data/ext/common/ApplicationPool2/AppTypes.h +21 -14
  401. data/ext/common/ApplicationPool2/Common.h +36 -19
  402. data/ext/common/ApplicationPool2/DirectSpawner.h +15 -16
  403. data/ext/common/ApplicationPool2/DummySpawner.h +9 -8
  404. data/ext/common/ApplicationPool2/ErrorRenderer.h +1 -1
  405. data/ext/common/ApplicationPool2/Group.h +304 -171
  406. data/ext/common/ApplicationPool2/Implementation.cpp +234 -125
  407. data/ext/common/ApplicationPool2/Options.h +50 -62
  408. data/ext/common/ApplicationPool2/Pool.h +285 -189
  409. data/ext/common/ApplicationPool2/Process.h +126 -115
  410. data/ext/common/ApplicationPool2/Session.h +70 -30
  411. data/ext/common/ApplicationPool2/SmartSpawner.h +19 -18
  412. data/ext/common/ApplicationPool2/Socket.h +57 -43
  413. data/ext/common/ApplicationPool2/SpawnObject.h +83 -0
  414. data/ext/common/ApplicationPool2/Spawner.h +59 -38
  415. data/ext/common/ApplicationPool2/SpawnerFactory.h +8 -14
  416. data/ext/common/ApplicationPool2/SuperGroup.h +69 -40
  417. data/ext/common/BackgroundEventLoop.cpp +48 -1
  418. data/ext/common/BackgroundEventLoop.h +3 -1
  419. data/ext/common/Constants.h +30 -8
  420. data/ext/common/DataStructures/HashedStaticString.h +103 -0
  421. data/ext/common/DataStructures/LString.h +396 -0
  422. data/ext/common/DataStructures/StringKeyTable.h +588 -0
  423. data/ext/common/EventedMessageServer.h +1 -0
  424. data/ext/common/FileDescriptor.h +5 -0
  425. data/ext/common/InstanceDirectory.h +240 -0
  426. data/ext/common/Logging.cpp +38 -13
  427. data/ext/common/Logging.h +53 -22
  428. data/ext/common/MemoryKit/mbuf.cpp +413 -0
  429. data/ext/common/MemoryKit/mbuf.h +266 -0
  430. data/ext/common/MemoryKit/palloc.cpp +337 -0
  431. data/ext/common/MemoryKit/palloc.h +121 -0
  432. data/ext/common/ResourceLocator.h +62 -6
  433. data/ext/common/SafeLibev.h +4 -4
  434. data/ext/common/ServerKit/AcceptLoadBalancer.h +275 -0
  435. data/ext/common/ServerKit/Channel.h +747 -0
  436. data/ext/common/ServerKit/Client.h +166 -0
  437. data/ext/common/ServerKit/ClientRef.h +130 -0
  438. data/ext/common/ServerKit/Context.h +129 -0
  439. data/ext/common/ServerKit/Errors.h +103 -0
  440. data/ext/common/ServerKit/FdSinkChannel.h +206 -0
  441. data/ext/common/ServerKit/FdSourceChannel.h +230 -0
  442. data/ext/common/ServerKit/FileBufferedChannel.h +1399 -0
  443. data/ext/common/ServerKit/FileBufferedFdSinkChannel.h +228 -0
  444. data/ext/common/ServerKit/HeaderTable.h +472 -0
  445. data/ext/common/ServerKit/Hooks.h +79 -0
  446. data/ext/common/ServerKit/HttpChunkedBodyParser.h +289 -0
  447. data/ext/common/ServerKit/HttpChunkedBodyParserState.h +70 -0
  448. data/ext/common/ServerKit/HttpClient.h +94 -0
  449. data/ext/common/ServerKit/HttpHeaderParser.h +477 -0
  450. data/ext/common/ServerKit/HttpHeaderParserState.h +60 -0
  451. data/ext/common/ServerKit/HttpRequest.h +276 -0
  452. data/ext/common/ServerKit/HttpRequestRef.h +130 -0
  453. data/ext/common/ServerKit/HttpServer.h +1152 -0
  454. data/ext/common/ServerKit/Implementation.cpp +47 -0
  455. data/ext/common/ServerKit/Server.h +1040 -0
  456. data/ext/common/ServerKit/http_parser.cpp +2259 -0
  457. data/ext/common/ServerKit/http_parser.h +330 -0
  458. data/ext/common/StaticString.h +8 -0
  459. data/ext/common/Utils.cpp +14 -12
  460. data/ext/common/Utils.h +9 -103
  461. data/ext/common/Utils/BufferedIO.h +1 -0
  462. data/ext/common/Utils/CachedFileStat.hpp +1 -7
  463. data/ext/common/Utils/DateParsing.h +379 -0
  464. data/ext/common/Utils/FileChangeChecker.h +3 -9
  465. data/ext/common/Utils/Hasher.cpp +52 -0
  466. data/ext/common/Utils/Hasher.h +58 -0
  467. data/ext/common/Utils/IOUtils.cpp +62 -62
  468. data/ext/common/Utils/JsonUtils.h +21 -0
  469. data/ext/common/Utils/OptionParsing.h +75 -0
  470. data/ext/common/Utils/StrIntUtils.cpp +112 -19
  471. data/ext/common/Utils/StrIntUtils.h +52 -12
  472. data/ext/common/Utils/StrIntUtilsNoStrictAliasing.cpp +174 -0
  473. data/ext/common/Utils/VariantMap.h +18 -7
  474. data/ext/common/Utils/modp_b64.cpp +290 -0
  475. data/ext/common/Utils/modp_b64.h +241 -0
  476. data/ext/common/Utils/modp_b64_data.h +479 -0
  477. data/ext/common/Utils/sysqueue.h +811 -0
  478. data/ext/common/agents/Base.cpp +71 -98
  479. data/ext/common/agents/Base.h +11 -3
  480. data/ext/common/agents/HelperAgent/AdminServer.h +690 -0
  481. data/ext/common/agents/HelperAgent/Main.cpp +899 -487
  482. data/ext/common/agents/HelperAgent/OptionParser.h +311 -0
  483. data/ext/common/agents/HelperAgent/RequestHandler.h +315 -2548
  484. data/ext/common/agents/HelperAgent/RequestHandler/AppResponse.h +225 -0
  485. data/ext/common/agents/HelperAgent/RequestHandler/BufferBody.cpp +93 -0
  486. data/ext/common/agents/HelperAgent/RequestHandler/CheckoutSession.cpp +346 -0
  487. data/ext/common/agents/HelperAgent/RequestHandler/Client.h +54 -0
  488. data/ext/common/agents/HelperAgent/RequestHandler/ForwardResponse.cpp +846 -0
  489. data/ext/common/agents/HelperAgent/RequestHandler/Hooks.cpp +231 -0
  490. data/ext/common/agents/HelperAgent/RequestHandler/InitRequest.cpp +434 -0
  491. data/ext/common/agents/HelperAgent/RequestHandler/Request.h +149 -0
  492. data/ext/common/agents/HelperAgent/RequestHandler/SendRequest.cpp +887 -0
  493. data/ext/common/agents/HelperAgent/RequestHandler/TurboCaching.h +293 -0
  494. data/ext/common/agents/HelperAgent/RequestHandler/Utils.cpp +301 -0
  495. data/ext/common/agents/HelperAgent/ResponseCache.h +624 -0
  496. data/ext/common/agents/HelperAgent/SystemMetricsTool.cpp +21 -23
  497. data/ext/common/agents/LoggingAgent/AdminServer.h +369 -0
  498. data/ext/common/agents/LoggingAgent/LoggingServer.h +1 -0
  499. data/ext/common/agents/LoggingAgent/Main.cpp +422 -215
  500. data/ext/common/agents/LoggingAgent/OptionParser.h +167 -0
  501. data/ext/common/agents/LoggingAgent/RemoteSender.h +3 -3
  502. data/ext/common/agents/Main.cpp +107 -0
  503. data/ext/common/agents/SpawnPreparer/Main.cpp +207 -0
  504. data/ext/common/agents/TempDirToucher/Main.cpp +429 -0
  505. data/ext/common/agents/Watchdog/AdminServer.h +390 -0
  506. data/ext/common/agents/Watchdog/AgentWatcher.cpp +7 -5
  507. data/ext/common/agents/Watchdog/HelperAgentWatcher.cpp +18 -39
  508. data/ext/common/agents/Watchdog/InstanceDirToucher.cpp +116 -0
  509. data/ext/common/agents/Watchdog/LoggingAgentWatcher.cpp +13 -17
  510. data/ext/common/agents/Watchdog/Main.cpp +743 -202
  511. data/ext/libeio/eio.c +17 -0
  512. data/ext/libeio/eio.h +2 -0
  513. data/ext/nginx/CacheLocationConfig.c +177 -198
  514. data/ext/nginx/CacheLocationConfig.c.erb +35 -22
  515. data/ext/nginx/Configuration.c +402 -236
  516. data/ext/nginx/Configuration.h +12 -5
  517. data/ext/nginx/ConfigurationCommands.c +35 -15
  518. data/ext/nginx/ConfigurationCommands.c.erb +4 -4
  519. data/ext/nginx/ConfigurationFields.h +9 -5
  520. data/ext/nginx/ConfigurationFields.h.erb +3 -1
  521. data/ext/nginx/ContentHandler.c +393 -362
  522. data/ext/nginx/CreateLocationConfig.c +8 -4
  523. data/ext/nginx/CreateLocationConfig.c.erb +8 -3
  524. data/ext/nginx/MergeLocationConfig.c +36 -6
  525. data/ext/nginx/MergeLocationConfig.c.erb +42 -1
  526. data/ext/nginx/ngx_http_passenger_module.c +28 -15
  527. data/ext/oxt/detail/backtrace_disabled.hpp +2 -1
  528. data/ext/oxt/detail/backtrace_enabled.hpp +15 -2
  529. data/ext/oxt/implementation.cpp +92 -20
  530. data/ext/oxt/thread.hpp +5 -0
  531. data/ext/ruby/extconf.rb +3 -6
  532. data/ext/ruby/passenger_native_support.c +13 -40
  533. data/helper-scripts/download_binaries/extconf.rb +4 -4
  534. data/helper-scripts/meteor-loader.rb +12 -112
  535. data/helper-scripts/node-loader.js +3 -91
  536. data/helper-scripts/rack-loader.rb +13 -14
  537. data/helper-scripts/rack-preloader.rb +16 -17
  538. data/helper-scripts/wsgi-loader.py +11 -7
  539. data/lib/phusion_passenger.rb +100 -79
  540. data/lib/phusion_passenger/abstract_installer.rb +28 -3
  541. data/lib/phusion_passenger/admin_tools.rb +3 -3
  542. data/lib/phusion_passenger/admin_tools/instance.rb +207 -0
  543. data/lib/phusion_passenger/admin_tools/instance_registry.rb +98 -0
  544. data/lib/phusion_passenger/apache2/config_options.rb +72 -22
  545. data/lib/phusion_passenger/common_library.rb +79 -14
  546. data/lib/phusion_passenger/config/about_command.rb +17 -23
  547. data/lib/phusion_passenger/config/admin_command_command.rb +175 -0
  548. data/lib/phusion_passenger/config/agent_compiler.rb +170 -0
  549. data/lib/phusion_passenger/config/command.rb +1 -4
  550. data/lib/phusion_passenger/config/compile_agent_command.rb +102 -0
  551. data/lib/phusion_passenger/config/compile_nginx_engine_command.rb +112 -0
  552. data/lib/phusion_passenger/config/detach_process_command.rb +32 -10
  553. data/lib/phusion_passenger/config/download_agent_command.rb +285 -0
  554. data/lib/phusion_passenger/config/download_nginx_engine_command.rb +281 -0
  555. data/lib/phusion_passenger/config/install_agent_command.rb +174 -0
  556. data/lib/phusion_passenger/config/install_standalone_runtime_command.rb +231 -0
  557. data/lib/phusion_passenger/config/installation_utils.rb +241 -0
  558. data/lib/phusion_passenger/config/list_instances_command.rb +13 -25
  559. data/lib/phusion_passenger/config/main.rb +43 -14
  560. data/lib/phusion_passenger/config/nginx_engine_compiler.rb +337 -0
  561. data/lib/phusion_passenger/config/reopen_logs_command.rb +110 -0
  562. data/lib/phusion_passenger/config/restart_app_command.rb +61 -14
  563. data/lib/phusion_passenger/config/system_metrics_command.rb +2 -1
  564. data/lib/phusion_passenger/config/utils.rb +64 -39
  565. data/lib/phusion_passenger/config/validate_install_command.rb +2 -2
  566. data/lib/phusion_passenger/constants.rb +27 -6
  567. data/lib/phusion_passenger/debug_logging.rb +32 -15
  568. data/lib/phusion_passenger/loader_shared_helpers.rb +2 -5
  569. data/lib/phusion_passenger/message_client.rb +21 -22
  570. data/lib/phusion_passenger/native_support.rb +26 -31
  571. data/lib/phusion_passenger/nginx/config_options.rb +32 -19
  572. data/lib/phusion_passenger/packaging.rb +7 -3
  573. data/lib/phusion_passenger/platform_info/cxx_portability.rb +1 -2
  574. data/lib/phusion_passenger/platform_info/depcheck_specs/libs.rb +3 -4
  575. data/lib/phusion_passenger/platform_info/operating_system.rb +6 -6
  576. data/lib/phusion_passenger/preloader_shared_helpers.rb +2 -2
  577. data/lib/phusion_passenger/rack/out_of_band_gc.rb +2 -2
  578. data/lib/phusion_passenger/rack/thread_handler_extension.rb +168 -65
  579. data/lib/phusion_passenger/request_handler.rb +47 -82
  580. data/lib/phusion_passenger/request_handler/thread_handler.rb +46 -10
  581. data/lib/phusion_passenger/ruby_core_enhancements.rb +25 -77
  582. data/lib/phusion_passenger/ruby_core_io_enhancements.rb +108 -0
  583. data/lib/phusion_passenger/standalone/app_finder.rb +39 -59
  584. data/lib/phusion_passenger/standalone/command.rb +27 -275
  585. data/lib/phusion_passenger/standalone/command2.rb +292 -0
  586. data/lib/phusion_passenger/standalone/config_utils.rb +87 -0
  587. data/lib/phusion_passenger/standalone/control_utils.rb +88 -0
  588. data/lib/phusion_passenger/standalone/main.rb +69 -71
  589. data/lib/phusion_passenger/standalone/start2_command.rb +799 -0
  590. data/lib/phusion_passenger/standalone/start_command.rb +406 -467
  591. data/lib/phusion_passenger/standalone/start_command/builtin_engine.rb +167 -0
  592. data/lib/phusion_passenger/standalone/start_command/nginx_engine.rb +165 -0
  593. data/lib/phusion_passenger/standalone/status_command.rb +64 -23
  594. data/lib/phusion_passenger/standalone/stop_command.rb +69 -32
  595. data/lib/phusion_passenger/standalone/version_command.rb +1 -5
  596. data/lib/phusion_passenger/utils.rb +0 -4
  597. data/lib/phusion_passenger/utils/json.rb +70 -4
  598. data/lib/phusion_passenger/utils/progress_bar.rb +56 -0
  599. data/lib/phusion_passenger/utils/tee_input.rb +3 -3
  600. data/lib/phusion_passenger/utils/unseekable_socket.rb +30 -0
  601. data/packaging/rpm/nginx_spec/nginx.spec.template +4 -3
  602. data/packaging/rpm/passenger_spec/passenger.spec.template +6 -10
  603. data/packaging/rpm/setup-system +2 -1
  604. data/resources/oss-binaries.phusionpassenger.com.crt +208 -0
  605. data/resources/templates/config/agent_compiler/confirm_enable_optimizations.txt.erb +5 -0
  606. data/resources/templates/config/installation_utils/cannot_create_user_support_binaries_dir.txt.erb +15 -0
  607. data/resources/templates/config/installation_utils/download_tool_missing.txt.erb +7 -0
  608. data/resources/templates/config/installation_utils/passenger_not_installed_as_root.txt.erb +12 -0
  609. data/resources/templates/config/installation_utils/support_binaries_dir_not_writable_despite_running_as_root.txt.erb +13 -0
  610. data/resources/templates/config/installation_utils/unexpected_filesystem_problem.txt.erb +16 -0
  611. data/{packaging/debian/debian_specs/passenger/patches/series → resources/templates/config/installation_utils/user_support_binaries_dir_not_writable.txt.erb} +0 -0
  612. data/resources/templates/nginx/nginx_module_sources_not_available.txt.erb +2 -2
  613. data/resources/templates/standalone/config.erb +14 -16
  614. data/resources/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +1 -1
  615. data/test/.rspec +1 -0
  616. data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +20 -17
  617. data/test/cxx/ApplicationPool2/OptionsTest.cpp +0 -14
  618. data/test/cxx/ApplicationPool2/PoolTest.cpp +113 -90
  619. data/test/cxx/ApplicationPool2/ProcessTest.cpp +18 -27
  620. data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +51 -53
  621. data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +55 -57
  622. data/test/cxx/BufferedIOTest.cpp +40 -40
  623. data/test/cxx/CxxTestMain.cpp +4 -22
  624. data/test/cxx/DataStructures/LStringTest.cpp +275 -0
  625. data/test/cxx/DataStructures/StringKeyTableTest.cpp +199 -0
  626. data/test/cxx/MemoryKit/MbufTest.cpp +213 -0
  627. data/test/cxx/MessageServerTest.cpp +62 -55
  628. data/test/cxx/RequestHandlerTest.cpp +26 -27
  629. data/test/cxx/ServerKit/ChannelTest.cpp +1467 -0
  630. data/test/cxx/ServerKit/FileBufferedChannelTest.cpp +817 -0
  631. data/test/cxx/ServerKit/HeaderTableTest.cpp +171 -0
  632. data/test/cxx/ServerKit/HttpServerTest.cpp +1503 -0
  633. data/test/cxx/ServerKit/ServerTest.cpp +408 -0
  634. data/test/cxx/TestSupport.cpp +51 -15
  635. data/test/cxx/TestSupport.h +31 -21
  636. data/test/cxx/UnionStationTest.cpp +121 -122
  637. data/test/cxx/UtilsTest.cpp +9 -33
  638. data/test/integration_tests/apache2_tests.rb +65 -27
  639. data/test/integration_tests/downloaded_binaries_tests.rb +30 -6
  640. data/test/integration_tests/native_packaging_spec.rb +32 -17
  641. data/test/integration_tests/nginx_tests.rb +28 -10
  642. data/test/integration_tests/shared/example_webapp_tests.rb +40 -27
  643. data/test/integration_tests/standalone_tests.rb +232 -169
  644. data/test/ruby/debug_logging_spec.rb +44 -40
  645. data/test/ruby/rails3.0/preloader_spec.rb +1 -1
  646. data/test/ruby/rails3.1/preloader_spec.rb +1 -1
  647. data/test/ruby/rails3.2/preloader_spec.rb +1 -1
  648. data/test/ruby/rails4.0/preloader_spec.rb +1 -1
  649. data/test/ruby/rails4.1/preloader_spec.rb +1 -1
  650. data/test/ruby/request_handler_spec.rb +62 -24
  651. data/test/ruby/shared/loader_sharedspec.rb +10 -9
  652. data/test/ruby/shared/rails/union_station_extensions_sharedspec.rb +23 -22
  653. data/test/ruby/spec_helper.rb +2 -11
  654. data/test/ruby/standalone/runtime_installer_spec.rb +15 -13
  655. data/test/ruby/union_station_spec.rb +45 -40
  656. data/test/ruby/utils/tee_input_spec.rb +5 -5
  657. data/test/ruby/utils_spec.rb +3 -39
  658. data/test/stub/apache2/httpd.conf.erb +5 -2
  659. data/test/stub/nginx/nginx.conf.erb +3 -1
  660. data/test/support/apache2_controller.rb +25 -25
  661. data/test/support/nginx_controller.rb +14 -14
  662. data/test/support/test_helper.rb +74 -75
  663. metadata +439 -643
  664. metadata.gz.asc +7 -7
  665. data/ext/common/MultiLibeio.cpp +0 -204
  666. data/ext/common/MultiLibeio.h +0 -67
  667. data/ext/common/ServerInstanceDir.h +0 -402
  668. data/ext/common/Utils/Base64.cpp +0 -143
  669. data/ext/common/Utils/Base64.h +0 -83
  670. data/ext/common/Utils/HttpHeaderBufferer.h +0 -184
  671. data/ext/common/Utils/PriorityQueue.h +0 -54
  672. data/ext/common/Utils/StreamBoyerMooreHorspool.h +0 -512
  673. data/ext/common/Utils/fib.c +0 -699
  674. data/ext/common/Utils/fib.h +0 -101
  675. data/ext/common/Utils/fibpriv.h +0 -67
  676. data/ext/common/agents/EnvPrinter.c +0 -16
  677. data/ext/common/agents/HelperAgent/AgentOptions.h +0 -109
  678. data/ext/common/agents/HelperAgent/FileBackedPipe.h +0 -732
  679. data/ext/common/agents/HelperAgent/RequestHandler.cpp +0 -294
  680. data/ext/common/agents/HelperAgent/ScgiRequestParser.h +0 -457
  681. data/ext/common/agents/LoggingAgent/AdminController.h +0 -96
  682. data/ext/common/agents/SpawnPreparer.cpp +0 -206
  683. data/ext/common/agents/TempDirToucher.c +0 -383
  684. data/ext/common/agents/Watchdog/ServerInstanceDirToucher.cpp +0 -116
  685. data/helper-scripts/classic-rails-loader.rb +0 -166
  686. data/helper-scripts/classic-rails-preloader.rb +0 -193
  687. data/lib/phusion_passenger/admin_tools/server_instance.rb +0 -339
  688. data/lib/phusion_passenger/classic_rails/cgi_fixed.rb +0 -68
  689. data/lib/phusion_passenger/classic_rails/thread_handler_extension.rb +0 -40
  690. data/lib/phusion_passenger/platform_info/openssl.rb +0 -61
  691. data/lib/phusion_passenger/standalone/config_file.rb +0 -119
  692. data/lib/phusion_passenger/standalone/help_command.rb +0 -57
  693. data/lib/phusion_passenger/standalone/runtime_installer.rb +0 -712
  694. data/lib/phusion_passenger/standalone/runtime_locator.rb +0 -170
  695. data/lib/phusion_passenger/standalone/utils.rb +0 -58
  696. data/lib/phusion_passenger/utils/tmpdir.rb +0 -69
  697. data/packaging/debian/LICENSE.md +0 -19
  698. data/packaging/debian/README.md +0 -320
  699. data/packaging/debian/Vagrantfile +0 -25
  700. data/packaging/debian/build +0 -210
  701. data/packaging/debian/debian_specs/nginx/changelog +0 -1989
  702. data/packaging/debian/debian_specs/nginx/compat.erb +0 -5
  703. data/packaging/debian/debian_specs/nginx/conf/fastcgi.conf +0 -25
  704. data/packaging/debian/debian_specs/nginx/conf/fastcgi_params +0 -24
  705. data/packaging/debian/debian_specs/nginx/conf/koi-utf +0 -109
  706. data/packaging/debian/debian_specs/nginx/conf/koi-win +0 -103
  707. data/packaging/debian/debian_specs/nginx/conf/mime.types +0 -89
  708. data/packaging/debian/debian_specs/nginx/conf/nginx.conf.erb +0 -97
  709. data/packaging/debian/debian_specs/nginx/conf/proxy_params +0 -4
  710. data/packaging/debian/debian_specs/nginx/conf/scgi_params +0 -16
  711. data/packaging/debian/debian_specs/nginx/conf/sites-available/default.erb +0 -93
  712. data/packaging/debian/debian_specs/nginx/conf/snippets/fastcgi-php.conf +0 -13
  713. data/packaging/debian/debian_specs/nginx/conf/snippets/snakeoil.conf +0 -5
  714. data/packaging/debian/debian_specs/nginx/conf/uwsgi_params +0 -16
  715. data/packaging/debian/debian_specs/nginx/conf/win-utf +0 -125
  716. data/packaging/debian/debian_specs/nginx/control.erb +0 -226
  717. data/packaging/debian/debian_specs/nginx/copyright +0 -196
  718. data/packaging/debian/debian_specs/nginx/debian-full.lintian-overrides +0 -1
  719. data/packaging/debian/debian_specs/nginx/gbp.conf +0 -2
  720. data/packaging/debian/debian_specs/nginx/help/docs/fcgiwrap +0 -14
  721. data/packaging/debian/debian_specs/nginx/help/docs/php +0 -119
  722. data/packaging/debian/debian_specs/nginx/help/docs/support-irc +0 -28
  723. data/packaging/debian/debian_specs/nginx/help/docs/upstream +0 -51
  724. data/packaging/debian/debian_specs/nginx/help/examples/drupal +0 -114
  725. data/packaging/debian/debian_specs/nginx/help/examples/http +0 -59
  726. data/packaging/debian/debian_specs/nginx/help/examples/mail +0 -30
  727. data/packaging/debian/debian_specs/nginx/help/examples/mailman +0 -59
  728. data/packaging/debian/debian_specs/nginx/help/examples/nginx.conf +0 -34
  729. data/packaging/debian/debian_specs/nginx/help/examples/nginx_modsite +0 -162
  730. data/packaging/debian/debian_specs/nginx/help/examples/virtual_hosts +0 -155
  731. data/packaging/debian/debian_specs/nginx/help/examples/wordpress +0 -74
  732. data/packaging/debian/debian_specs/nginx/helpers.rb +0 -41
  733. data/packaging/debian/debian_specs/nginx/index-debian.html.in +0 -32
  734. data/packaging/debian/debian_specs/nginx/index-ubuntu.html.in +0 -32
  735. data/packaging/debian/debian_specs/nginx/index.html.erb +0 -10
  736. data/packaging/debian/debian_specs/nginx/modules/README.Modules-versions +0 -65
  737. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/README.markdown +0 -510
  738. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/config +0 -5
  739. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/doc/HttpHeadersMoreModule.wiki +0 -395
  740. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ddebug.h +0 -119
  741. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.c +0 -348
  742. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_filter_module.h +0 -80
  743. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.c +0 -826
  744. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_in.h +0 -26
  745. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.c +0 -716
  746. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_headers_out.h +0 -26
  747. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.c +0 -380
  748. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/src/ngx_http_headers_more_util.h +0 -52
  749. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/util/build.sh +0 -32
  750. data/packaging/debian/debian_specs/nginx/modules/headers-more-nginx-module/valgrind.suppress +0 -215
  751. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ChangeLog +0 -35
  752. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/LICENSE +0 -25
  753. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/README.md +0 -93
  754. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/config +0 -4
  755. data/packaging/debian/debian_specs/nginx/modules/nginx-auth-pam/ngx_http_auth_pam_module.c +0 -462
  756. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/CHANGES +0 -66
  757. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/LICENSE +0 -26
  758. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/README.md +0 -171
  759. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/TODO.md +0 -7
  760. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/config +0 -21
  761. data/packaging/debian/debian_specs/nginx/modules/nginx-cache-purge/ngx_cache_purge_module.c +0 -1803
  762. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/README +0 -29
  763. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/config +0 -9
  764. data/packaging/debian/debian_specs/nginx/modules/nginx-dav-ext-module/ngx_http_dav_ext_module.c +0 -824
  765. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README +0 -139
  766. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/README_AUTO_LIB +0 -395
  767. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/TODO +0 -1
  768. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/array +0 -10
  769. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/actions/palloc +0 -8
  770. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/build +0 -597
  771. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_replacements +0 -5
  772. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/action_types +0 -12
  773. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_args +0 -22
  774. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_locs +0 -25
  775. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/conf_macros +0 -35
  776. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/contexts +0 -22
  777. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/header_files +0 -3
  778. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/headers +0 -4
  779. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/module_dependencies +0 -5
  780. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/modules_optional +0 -15
  781. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/data/prefixes +0 -2
  782. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/array.h +0 -7
  783. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_cmd_basic.h +0 -43
  784. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/conf_merge.h +0 -78
  785. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/src/palloc.h +0 -6
  786. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/auto/text/autogen +0 -12
  787. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/config +0 -49
  788. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/action_macros +0 -63
  789. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/core/conf_cmds +0 -62
  790. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/modules/set_var +0 -124
  791. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/patches/more_logging_info +0 -48
  792. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/docs/upstream/list +0 -45
  793. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/README +0 -12
  794. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/config +0 -4
  795. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/examples/http/set_var/ngx_http_set_var_examples_module.c +0 -136
  796. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/ngx_auto_lib_core +0 -797
  797. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/CHANGES +0 -17
  798. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/notes/LICENSE +0 -24
  799. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_array.h +0 -113
  800. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_basic.h +0 -2203
  801. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_cmd_extra.h +0 -5423
  802. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_conf_merge.h +0 -227
  803. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.c +0 -72
  804. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_config.h +0 -98
  805. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_includes.h +0 -66
  806. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/objs/ndk_palloc.h +0 -112
  807. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/auto_config +0 -16
  808. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/expose_rewrite_functions +0 -291
  809. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/patches/rewrite_phase_handler +0 -19
  810. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/md5.h +0 -117
  811. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/murmurhash2.c +0 -77
  812. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/hash/sha.h +0 -200
  813. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.c +0 -155
  814. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk.h +0 -58
  815. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.c +0 -43
  816. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_buf.h +0 -5
  817. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.c +0 -129
  818. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_path.h +0 -30
  819. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.c +0 -192
  820. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_complex_value.h +0 -21
  821. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.c +0 -396
  822. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_conf_file.h +0 -44
  823. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.c +0 -72
  824. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_debug.h +0 -171
  825. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.c +0 -57
  826. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_encoding.h +0 -12
  827. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.c +0 -82
  828. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_hash.h +0 -45
  829. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.c +0 -138
  830. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http.h +0 -3
  831. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_http_headers.h +0 -35
  832. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.c +0 -3
  833. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_log.h +0 -165
  834. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_parse.h +0 -67
  835. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.c +0 -583
  836. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_path.h +0 -22
  837. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.c +0 -20
  838. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_process.h +0 -12
  839. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.c +0 -215
  840. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_regex.h +0 -7
  841. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.c +0 -103
  842. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_rewrite.h +0 -26
  843. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.c +0 -602
  844. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_set_var.h +0 -44
  845. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.c +0 -434
  846. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string.h +0 -37
  847. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_string_util.h +0 -14
  848. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.c +0 -205
  849. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_upstream_list.h +0 -27
  850. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.c +0 -45
  851. data/packaging/debian/debian_specs/nginx/modules/nginx-development-kit/src/ndk_uri.h +0 -6
  852. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/LICENSE +0 -25
  853. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/README.markdown +0 -1850
  854. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/config +0 -5
  855. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/doc/HttpEchoModule.wiki +0 -1558
  856. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ddebug.h +0 -109
  857. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.c +0 -344
  858. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_echo.h +0 -25
  859. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.c +0 -282
  860. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_filter.h +0 -15
  861. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.c +0 -183
  862. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_foreach.h +0 -16
  863. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.c +0 -429
  864. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_handler.h +0 -18
  865. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.c +0 -178
  866. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_location.h +0 -13
  867. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.c +0 -667
  868. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_module.h +0 -137
  869. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.c +0 -452
  870. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_request_info.h +0 -31
  871. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.c +0 -208
  872. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_sleep.h +0 -16
  873. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.c +0 -788
  874. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_subrequest.h +0 -19
  875. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.c +0 -96
  876. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_timer.h +0 -13
  877. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.c +0 -298
  878. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_util.h +0 -58
  879. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.c +0 -110
  880. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/src/ngx_http_echo_var.h +0 -9
  881. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/build.sh +0 -45
  882. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/releng +0 -8
  883. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/util/wiki2pod.pl +0 -131
  884. data/packaging/debian/debian_specs/nginx/modules/nginx-echo/valgrind.suppress +0 -38
  885. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/LICENCE +0 -24
  886. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/README +0 -206
  887. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/changelog.txt +0 -54
  888. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/config +0 -26
  889. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/protocol.txt +0 -191
  890. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.c +0 -59
  891. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_defs.h +0 -73
  892. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.c +0 -783
  893. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module.h +0 -31
  894. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_module_setup.c +0 -361
  895. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/ngx_http_push_types.h +0 -120
  896. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.c +0 -1180
  897. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/memory/store.h +0 -1
  898. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.c +0 -146
  899. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_module_ipc.h +0 -5
  900. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_http_push_store.h +0 -51
  901. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.c +0 -178
  902. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/ngx_rwlock.h +0 -5
  903. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.c +0 -246
  904. data/packaging/debian/debian_specs/nginx/modules/nginx-http-push/src/store/rbtree_util.h +0 -9
  905. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/Changes +0 -51
  906. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/README.markdown +0 -6954
  907. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/config +0 -363
  908. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/doc/HttpLuaModule.wiki +0 -5898
  909. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/dtrace/ngx_lua_provider.d +0 -61
  910. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/Makefile +0 -3
  911. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/lib/RecvUntil.pm +0 -138
  912. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/misc/recv-until-pm/t/sanity.t +0 -140
  913. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/api/ngx_http_lua_api.h +0 -52
  914. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ddebug.h +0 -82
  915. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.c +0 -377
  916. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_accessby.h +0 -22
  917. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_api.c +0 -77
  918. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.c +0 -537
  919. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_args.h +0 -20
  920. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.c +0 -632
  921. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_bodyfilterby.h +0 -31
  922. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.c +0 -296
  923. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_cache.h +0 -24
  924. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.c +0 -175
  925. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_capturefilter.h +0 -20
  926. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.c +0 -887
  927. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_clfactory.h +0 -22
  928. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_common.h +0 -478
  929. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.c +0 -67
  930. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_config.h +0 -19
  931. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.c +0 -148
  932. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_consts.h +0 -20
  933. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.c +0 -369
  934. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_contentby.h +0 -26
  935. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.c +0 -483
  936. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_control.h +0 -20
  937. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.c +0 -379
  938. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_coroutine.h +0 -23
  939. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.c +0 -216
  940. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ctx.h +0 -23
  941. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.c +0 -1081
  942. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_directive.h +0 -56
  943. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.c +0 -58
  944. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_exception.h +0 -33
  945. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.c +0 -302
  946. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headerfilterby.h +0 -29
  947. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.c +0 -1370
  948. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers.h +0 -22
  949. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.c +0 -782
  950. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_in.h +0 -22
  951. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.c +0 -625
  952. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_headers_out.h +0 -23
  953. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.c +0 -42
  954. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initby.h +0 -23
  955. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.c +0 -320
  956. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_initworkerby.h +0 -25
  957. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.c +0 -300
  958. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_log.h +0 -20
  959. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.c +0 -227
  960. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_logby.h +0 -22
  961. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.c +0 -252
  962. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_misc.h +0 -20
  963. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_module.c +0 -924
  964. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.c +0 -184
  965. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_ndk.h +0 -21
  966. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.c +0 -794
  967. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_output.h +0 -28
  968. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.c +0 -106
  969. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_pcrefix.h +0 -23
  970. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.c +0 -94
  971. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_phase.h +0 -13
  972. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_probe.h +0 -85
  973. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.c +0 -2468
  974. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_regex.h +0 -22
  975. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.c +0 -1169
  976. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_body.h +0 -20
  977. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.c +0 -252
  978. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_req_method.h +0 -19
  979. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.c +0 -351
  980. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_rewriteby.h +0 -22
  981. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.c +0 -538
  982. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_script.h +0 -86
  983. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.c +0 -216
  984. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_setby.h +0 -15
  985. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.c +0 -1844
  986. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_shdict.h +0 -52
  987. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.c +0 -191
  988. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_sleep.h +0 -20
  989. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.c +0 -5314
  990. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_tcp.h +0 -156
  991. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.c +0 -1624
  992. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_socket_udp.h +0 -56
  993. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.c +0 -704
  994. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_string.h +0 -20
  995. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.c +0 -1741
  996. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_subrequest.h +0 -46
  997. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.c +0 -278
  998. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_time.h +0 -21
  999. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.c +0 -661
  1000. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_timer.h +0 -20
  1001. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.c +0 -110
  1002. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uri.h +0 -20
  1003. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.c +0 -283
  1004. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_uthread.h +0 -36
  1005. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.c +0 -3972
  1006. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_util.h +0 -423
  1007. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.c +0 -499
  1008. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_variable.h +0 -20
  1009. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.c +0 -64
  1010. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/src/ngx_http_lua_worker.h +0 -17
  1011. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/tapset/ngx_lua.stp +0 -5
  1012. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build.sh +0 -39
  1013. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/build2.sh +0 -55
  1014. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/fix-comments +0 -27
  1015. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/gdbinit +0 -415
  1016. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/ngx-links +0 -62
  1017. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/reindex +0 -64
  1018. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/releng +0 -8
  1019. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/retab +0 -8
  1020. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/revim +0 -102
  1021. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/run_test.sh +0 -10
  1022. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/util/update-readme.sh +0 -4
  1023. data/packaging/debian/debian_specs/nginx/modules/nginx-lua/valgrind.suppress +0 -144
  1024. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/CHANGES +0 -107
  1025. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/LICENSE +0 -25
  1026. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/Makefile +0 -8
  1027. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/README +0 -329
  1028. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/config +0 -3
  1029. data/packaging/debian/debian_specs/nginx/modules/nginx-upload-progress/ngx_http_uploadprogress_module.c +0 -1774
  1030. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/README +0 -53
  1031. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/config +0 -3
  1032. data/packaging/debian/debian_specs/nginx/modules/nginx-upstream-fair/ngx_http_upstream_fair_module.c +0 -1356
  1033. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/CHANGELOG.md +0 -37
  1034. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/HACKING.md +0 -24
  1035. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/LICENSE +0 -20
  1036. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/README.rst +0 -182
  1037. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/config +0 -8
  1038. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/nginx-0.6-support.patch +0 -23
  1039. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/ngx_http_fancyindex_module.c +0 -1305
  1040. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.awk +0 -52
  1041. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.h +0 -103
  1042. data/packaging/debian/debian_specs/nginx/modules/ngx-fancyindex/template.html +0 -102
  1043. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/CHANGES +0 -37
  1044. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/README +0 -141
  1045. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/config +0 -3
  1046. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.google_code_home_page.wiki +0 -120
  1047. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.html +0 -199
  1048. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/doc/README.wiki +0 -123
  1049. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/ngx_http_subs_filter_module.c +0 -1298
  1050. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/README +0 -275
  1051. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/AutoInstall.pm +0 -820
  1052. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install.pm +0 -470
  1053. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/AutoInstall.pm +0 -82
  1054. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Base.pm +0 -83
  1055. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Can.pm +0 -81
  1056. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Fetch.pm +0 -93
  1057. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Include.pm +0 -34
  1058. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Makefile.pm +0 -415
  1059. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Metadata.pm +0 -716
  1060. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/TestBase.pm +0 -29
  1061. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/Win32.pm +0 -64
  1062. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Module/Install/WriteAll.pm +0 -63
  1063. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Spiffy.pm +0 -539
  1064. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base.pm +0 -682
  1065. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Base/Filter.pm +0 -341
  1066. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder.pm +0 -1413
  1067. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/Builder/Module.pm +0 -81
  1068. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/inc/Test/More.pm +0 -735
  1069. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx.pm +0 -315
  1070. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/LWP.pm +0 -524
  1071. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Socket.pm +0 -1749
  1072. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/lib/Test/Nginx/Util.pm +0 -874
  1073. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs.t +0 -136
  1074. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_capture.t +0 -32
  1075. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_fix_string.t +0 -32
  1076. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_regex.t +0 -108
  1077. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/t/subs_types.t +0 -59
  1078. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/test/test.sh +0 -5
  1079. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/update-readme.sh +0 -7
  1080. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2google_code_homepage.pl +0 -29
  1081. data/packaging/debian/debian_specs/nginx/modules/ngx_http_substitutions_filter_module/util/wiki2pod.pl +0 -129
  1082. data/packaging/debian/debian_specs/nginx/nginx-common.NEWS +0 -135
  1083. data/packaging/debian/debian_specs/nginx/nginx-common.README.Debian +0 -45
  1084. data/packaging/debian/debian_specs/nginx/nginx-common.dirs.erb +0 -32
  1085. data/packaging/debian/debian_specs/nginx/nginx-common.install +0 -3
  1086. data/packaging/debian/debian_specs/nginx/nginx-common.lintian-overrides +0 -2
  1087. data/packaging/debian/debian_specs/nginx/nginx-common.manpages +0 -1
  1088. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.default +0 -10
  1089. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.init.erb +0 -214
  1090. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.logrotate +0 -18
  1091. data/packaging/debian/debian_specs/nginx/nginx-common.nginx.service.erb +0 -37
  1092. data/packaging/debian/debian_specs/nginx/nginx-common.postinst.erb +0 -66
  1093. data/packaging/debian/debian_specs/nginx/nginx-common.postrm.erb +0 -46
  1094. data/packaging/debian/debian_specs/nginx/nginx-common.preinst +0 -47
  1095. data/packaging/debian/debian_specs/nginx/nginx-common.prerm.erb +0 -28
  1096. data/packaging/debian/debian_specs/nginx/nginx-doc.docs +0 -2
  1097. data/packaging/debian/debian_specs/nginx/nginx-doc.examples +0 -1
  1098. data/packaging/debian/debian_specs/nginx/nginx-extras.install.erb +0 -17
  1099. data/packaging/debian/debian_specs/nginx/nginx-extras.lintian-overrides +0 -1
  1100. data/packaging/debian/debian_specs/nginx/nginx-extras.postinst.erb +0 -44
  1101. data/packaging/debian/debian_specs/nginx/nginx-extras.prerm +0 -22
  1102. data/packaging/debian/debian_specs/nginx/nginx.1 +0 -47
  1103. data/packaging/debian/debian_specs/nginx/patches/perl-use-dpkg-buildflags.patch +0 -23
  1104. data/packaging/debian/debian_specs/nginx/patches/series +0 -1
  1105. data/packaging/debian/debian_specs/nginx/rules.erb +0 -185
  1106. data/packaging/debian/debian_specs/nginx/source/format +0 -1
  1107. data/packaging/debian/debian_specs/nginx/tests/control +0 -4
  1108. data/packaging/debian/debian_specs/nginx/ufw/nginx +0 -14
  1109. data/packaging/debian/debian_specs/nginx/upstream/signing-key.asc +0 -34
  1110. data/packaging/debian/debian_specs/nginx/watch +0 -3
  1111. data/packaging/debian/debian_specs/passenger/README.Debian +0 -12
  1112. data/packaging/debian/debian_specs/passenger/changelog +0 -316
  1113. data/packaging/debian/debian_specs/passenger/compat +0 -1
  1114. data/packaging/debian/debian_specs/passenger/control.erb +0 -123
  1115. data/packaging/debian/debian_specs/passenger/copyright +0 -385
  1116. data/packaging/debian/debian_specs/passenger/helpers.rb +0 -24
  1117. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.install +0 -3
  1118. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.postinst +0 -36
  1119. data/packaging/debian/debian_specs/passenger/libapache2-mod-passenger.prerm +0 -15
  1120. data/packaging/debian/debian_specs/passenger/locations.ini.erb +0 -14
  1121. data/packaging/debian/debian_specs/passenger/passenger-dev.install.erb +0 -3
  1122. data/packaging/debian/debian_specs/passenger/passenger-doc.install.erb +0 -2
  1123. data/packaging/debian/debian_specs/passenger/passenger.conf +0 -6
  1124. data/packaging/debian/debian_specs/passenger/passenger.docs +0 -4
  1125. data/packaging/debian/debian_specs/passenger/passenger.install.erb +0 -16
  1126. data/packaging/debian/debian_specs/passenger/passenger.load +0 -3
  1127. data/packaging/debian/debian_specs/passenger/passenger.manpages +0 -3
  1128. data/packaging/debian/debian_specs/passenger/passenger_free_ruby.c +0 -29
  1129. data/packaging/debian/debian_specs/passenger/passenger_ruby_utils.c +0 -54
  1130. data/packaging/debian/debian_specs/passenger/passenger_system_ruby.c.erb +0 -37
  1131. data/packaging/debian/debian_specs/passenger/rules.erb +0 -84
  1132. data/packaging/debian/debian_specs/passenger/source/format +0 -1
  1133. data/packaging/debian/debian_specs/passenger_enterprise/README.Debian +0 -12
  1134. data/packaging/debian/debian_specs/passenger_enterprise/changelog +0 -316
  1135. data/packaging/debian/debian_specs/passenger_enterprise/compat +0 -1
  1136. data/packaging/debian/debian_specs/passenger_enterprise/control.erb +0 -123
  1137. data/packaging/debian/debian_specs/passenger_enterprise/copyright +0 -385
  1138. data/packaging/debian/debian_specs/passenger_enterprise/helpers.rb +0 -2
  1139. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.install +0 -3
  1140. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.postinst +0 -36
  1141. data/packaging/debian/debian_specs/passenger_enterprise/libapache2-mod-passenger-enterprise.prerm +0 -15
  1142. data/packaging/debian/debian_specs/passenger_enterprise/locations.ini.erb +0 -14
  1143. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-dev.install.erb +0 -3
  1144. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise-doc.install.erb +0 -2
  1145. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.docs +0 -4
  1146. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.install.erb +0 -14
  1147. data/packaging/debian/debian_specs/passenger_enterprise/passenger-enterprise.manpages +0 -3
  1148. data/packaging/debian/debian_specs/passenger_enterprise/passenger.conf +0 -6
  1149. data/packaging/debian/debian_specs/passenger_enterprise/passenger.load +0 -3
  1150. data/packaging/debian/debian_specs/passenger_enterprise/passenger_free_ruby.c.erb +0 -1
  1151. data/packaging/debian/debian_specs/passenger_enterprise/passenger_ruby_utils.c.erb +0 -1
  1152. data/packaging/debian/debian_specs/passenger_enterprise/passenger_system_ruby.c.erb +0 -1
  1153. data/packaging/debian/debian_specs/passenger_enterprise/patches/series +0 -0
  1154. data/packaging/debian/debian_specs/passenger_enterprise/rules.erb +0 -84
  1155. data/packaging/debian/debian_specs/passenger_enterprise/source/format +0 -1
  1156. data/packaging/debian/docker_images/Makefile +0 -38
  1157. data/packaging/debian/docker_images/buildbox/CONTAINER_VERSION.txt +0 -0
  1158. data/packaging/debian/docker_images/buildbox/Dockerfile +0 -3
  1159. data/packaging/debian/docker_images/buildbox/Gemfile +0 -9
  1160. data/packaging/debian/docker_images/buildbox/Gemfile.lock +0 -42
  1161. data/packaging/debian/docker_images/buildbox/install.sh +0 -85
  1162. data/packaging/debian/docker_images/buildbox/pbuilderrc +0 -4
  1163. data/packaging/debian/docker_images/buildbox/sudoers.conf +0 -6
  1164. data/packaging/debian/docker_images/setup-buildbox-docker-image +0 -7
  1165. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-6 +0 -7
  1166. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-7 +0 -7
  1167. data/packaging/debian/docker_images/setup-testbox-docker-image-debian-8 +0 -7
  1168. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-12.04 +0 -7
  1169. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-14.04 +0 -7
  1170. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.04 +0 -7
  1171. data/packaging/debian/docker_images/setup-testbox-docker-image-ubuntu-15.10 +0 -7
  1172. data/packaging/debian/docker_images/testbox-debian-6/Dockerfile +0 -3
  1173. data/packaging/debian/docker_images/testbox-debian-6/Gemfile +0 -2
  1174. data/packaging/debian/docker_images/testbox-debian-6/Gemfile.lock +0 -23
  1175. data/packaging/debian/docker_images/testbox-debian-6/argparse.py +0 -2374
  1176. data/packaging/debian/docker_images/testbox-debian-6/install.sh +0 -78
  1177. data/packaging/debian/docker_images/testbox-debian-7/Dockerfile +0 -3
  1178. data/packaging/debian/docker_images/testbox-debian-7/Gemfile +0 -2
  1179. data/packaging/debian/docker_images/testbox-debian-7/Gemfile.lock +0 -23
  1180. data/packaging/debian/docker_images/testbox-debian-7/install.sh +0 -71
  1181. data/packaging/debian/docker_images/testbox-debian-8/Dockerfile +0 -3
  1182. data/packaging/debian/docker_images/testbox-debian-8/Gemfile +0 -2
  1183. data/packaging/debian/docker_images/testbox-debian-8/Gemfile.lock +0 -23
  1184. data/packaging/debian/docker_images/testbox-debian-8/install.sh +0 -70
  1185. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Dockerfile +0 -3
  1186. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile +0 -2
  1187. data/packaging/debian/docker_images/testbox-ubuntu-12.04/Gemfile.lock +0 -23
  1188. data/packaging/debian/docker_images/testbox-ubuntu-12.04/install.sh +0 -69
  1189. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Dockerfile +0 -3
  1190. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile +0 -2
  1191. data/packaging/debian/docker_images/testbox-ubuntu-14.04/Gemfile.lock +0 -23
  1192. data/packaging/debian/docker_images/testbox-ubuntu-14.04/install.sh +0 -69
  1193. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Dockerfile +0 -3
  1194. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile +0 -2
  1195. data/packaging/debian/docker_images/testbox-ubuntu-15.04/Gemfile.lock +0 -23
  1196. data/packaging/debian/docker_images/testbox-ubuntu-15.04/install.sh +0 -69
  1197. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Dockerfile +0 -3
  1198. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile +0 -2
  1199. data/packaging/debian/docker_images/testbox-ubuntu-15.10/Gemfile.lock +0 -23
  1200. data/packaging/debian/docker_images/testbox-ubuntu-15.10/install.sh +0 -69
  1201. data/packaging/debian/internal/build/Rakefile +0 -235
  1202. data/packaging/debian/internal/build/build-passenger-orig-tarball.sh +0 -76
  1203. data/packaging/debian/internal/build/build-source-package.rb +0 -121
  1204. data/packaging/debian/internal/build/download-nginx-orig-tarball.sh +0 -17
  1205. data/packaging/debian/internal/build/rakefile_support.rb +0 -96
  1206. data/packaging/debian/internal/build/setup-environment-essentials.sh +0 -15
  1207. data/packaging/debian/internal/build/setup-environment.sh +0 -29
  1208. data/packaging/debian/internal/lib/distro_info.rb +0 -82
  1209. data/packaging/debian/internal/lib/distro_info.sh +0 -303
  1210. data/packaging/debian/internal/lib/distro_info.sh.erb +0 -65
  1211. data/packaging/debian/internal/lib/library.sh +0 -83
  1212. data/packaging/debian/internal/lib/preprocessor.rb +0 -173
  1213. data/packaging/debian/internal/lib/tracking.rb +0 -95
  1214. data/packaging/debian/internal/lib/tracking_category.rb +0 -45
  1215. data/packaging/debian/internal/lib/tracking_database.rb +0 -132
  1216. data/packaging/debian/internal/lib/tracking_task.rb +0 -148
  1217. data/packaging/debian/internal/lib/utils.rb +0 -78
  1218. data/packaging/debian/internal/publish/Rakefile +0 -97
  1219. data/packaging/debian/internal/publish/oss-binaries.phusionpassenger.com-fingerprint.txt +0 -1
  1220. data/packaging/debian/internal/publish/packagecloud_fingerprint.txt +0 -1
  1221. data/packaging/debian/internal/publish/passenger_website_fingerprint.txt +0 -1
  1222. data/packaging/debian/internal/publish/preinit.sh +0 -7
  1223. data/packaging/debian/internal/publish/rakefile_support.rb +0 -183
  1224. data/packaging/debian/internal/scripts/gpg_noninteractive/gpg +0 -11
  1225. data/packaging/debian/internal/scripts/initccache.sh +0 -35
  1226. data/packaging/debian/internal/scripts/inituidgid.sh +0 -19
  1227. data/packaging/debian/internal/scripts/my_init +0 -340
  1228. data/packaging/debian/internal/scripts/pin_certificates +0 -34
  1229. data/packaging/debian/internal/scripts/regen_distro_info_script.sh +0 -3
  1230. data/packaging/debian/internal/scripts/setup-vagrant.sh +0 -12
  1231. data/packaging/debian/internal/scripts/setuser +0 -31
  1232. data/packaging/debian/internal/shell/initpbuilder.sh +0 -3
  1233. data/packaging/debian/internal/shell/preinit.sh +0 -28
  1234. data/packaging/debian/internal/shell/sudoers.conf +0 -1
  1235. data/packaging/debian/internal/test/apache/apache-24.conf +0 -5
  1236. data/packaging/debian/internal/test/apache/apache-pre-24.conf +0 -4
  1237. data/packaging/debian/internal/test/apache/vhost.conf +0 -17
  1238. data/packaging/debian/internal/test/misc/config.json +0 -15
  1239. data/packaging/debian/internal/test/misc/hosts.conf +0 -4
  1240. data/packaging/debian/internal/test/misc/init.sh +0 -25
  1241. data/packaging/debian/internal/test/misc/nodejs_test_app.js +0 -6
  1242. data/packaging/debian/internal/test/misc/python_test_app.py +0 -3
  1243. data/packaging/debian/internal/test/misc/ruby_test_app.rb +0 -5
  1244. data/packaging/debian/internal/test/misc/test_support.rb +0 -61
  1245. data/packaging/debian/internal/test/nginx/vhost.conf +0 -23
  1246. data/packaging/debian/internal/test/system_web_server_test.rb +0 -126
  1247. data/packaging/debian/internal/test/test.sh +0 -141
  1248. data/packaging/debian/jenkins/publish/clear_caches.rb +0 -48
  1249. data/packaging/debian/jenkins/publish/publish.sh +0 -69
  1250. data/packaging/debian/jenkins/test/test.sh +0 -63
  1251. data/packaging/debian/passenger_apt_automation.sublime-project +0 -14
  1252. data/packaging/debian/publish +0 -172
  1253. data/packaging/debian/shell +0 -116
  1254. data/packaging/debian/test +0 -142
  1255. data/packaging/rpm/passenger_spec/rubygem-passenger-4.0.18-gcc47-include-sys_types.patch +0 -45
  1256. data/test/cxx/Base64Test.cpp +0 -50
  1257. data/test/cxx/FileBackedPipeTest.cpp +0 -626
  1258. data/test/cxx/HttpHeaderBuffererTest.cpp +0 -257
  1259. data/test/cxx/ScgiRequestParserTest.cpp +0 -423
  1260. data/test/cxx/ServerInstanceDirTest.cpp +0 -175
  1261. data/test/ruby/admin_tools_spec.rb +0 -360
  1262. data/test/ruby/classic_rails/loader_spec.rb +0 -46
  1263. data/test/ruby/classic_rails/preloader_spec.rb +0 -52
  1264. data/test/ruby/standalone/runtime_locator_spec.rb +0 -214
  1265. data/test/stub/rails2.3/Rakefile +0 -10
  1266. data/test/stub/rails2.3/app/controllers/application_controller.rb +0 -10
  1267. data/test/stub/rails2.3/app/controllers/bar_controller_1.rb +0 -5
  1268. data/test/stub/rails2.3/app/controllers/bar_controller_2.rb +0 -5
  1269. data/test/stub/rails2.3/app/controllers/foo_controller.rb +0 -21
  1270. data/test/stub/rails2.3/app/helpers/application_helper.rb +0 -3
  1271. data/test/stub/rails2.3/app/helpers/bar_helper.rb +0 -2
  1272. data/test/stub/rails2.3/app/helpers/foo_helper.rb +0 -2
  1273. data/test/stub/rails2.3/config/boot.rb +0 -110
  1274. data/test/stub/rails2.3/config/database.yml +0 -19
  1275. data/test/stub/rails2.3/config/environment.rb +0 -62
  1276. data/test/stub/rails2.3/config/environments/development.rb +0 -17
  1277. data/test/stub/rails2.3/config/environments/production.rb +0 -18
  1278. data/test/stub/rails2.3/config/environments/staging.rb +0 -18
  1279. data/test/stub/rails2.3/config/initializers/inflections.rb +0 -10
  1280. data/test/stub/rails2.3/config/initializers/mime_types.rb +0 -5
  1281. data/test/stub/rails2.3/config/routes.rb +0 -35
  1282. data/test/stub/rails2.3/log/.gitignore +0 -1
  1283. data/test/stub/rails2.3/public/.gitignore +0 -1
  1284. data/test/stub/rails2.3/script/about +0 -3
  1285. data/test/stub/rails2.3/script/console +0 -3
  1286. data/test/stub/rails2.3/script/dbconsole +0 -3
  1287. data/test/stub/rails2.3/script/destroy +0 -3
  1288. data/test/stub/rails2.3/script/generate +0 -3
  1289. data/test/stub/rails2.3/script/performance/benchmarker +0 -3
  1290. data/test/stub/rails2.3/script/performance/profiler +0 -3
  1291. data/test/stub/rails2.3/script/performance/request +0 -3
  1292. data/test/stub/rails2.3/script/plugin +0 -3
  1293. data/test/stub/rails2.3/script/process/inspector +0 -3
  1294. data/test/stub/rails2.3/script/process/reaper +0 -3
  1295. data/test/stub/rails2.3/script/process/spawner +0 -3
  1296. data/test/stub/rails2.3/script/runner +0 -3
  1297. data/test/stub/rails2.3/script/server +0 -3
  1298. data/test/stub/rails2.3/tmp/cache/.gitignore +0 -1
  1299. data/test/stub/rails2.3/tmp/pids/.gitignore +0 -1
  1300. data/test/stub/rails2.3/tmp/sessions/.gitignore +0 -1
  1301. data/test/stub/rails2.3/tmp/sockets/.gitignore +0 -1
@@ -0,0 +1,61 @@
1
+ // Copyright David Abrahams 2005. Distributed under the Boost
2
+ // Software License, Version 1.0. (See accompanying
3
+ // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
4
+ #ifndef BOOST_DETAIL_IS_XXX_DWA20051011_HPP
5
+ # define BOOST_DETAIL_IS_XXX_DWA20051011_HPP
6
+
7
+ # include <boost/config.hpp>
8
+ # include <boost/mpl/bool.hpp>
9
+ # include <boost/preprocessor/enum_params.hpp>
10
+
11
+ # if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
12
+ # include <boost/type_traits/is_reference.hpp>
13
+ # include <boost/type_traits/add_reference.hpp>
14
+
15
+ # define BOOST_DETAIL_IS_XXX_DEF(name, qualified_name, nargs) \
16
+ template <class X_> \
17
+ struct is_##name \
18
+ { \
19
+ typedef char yes; \
20
+ typedef char (&no)[2]; \
21
+ \
22
+ static typename add_reference<X_>::type dummy; \
23
+ \
24
+ struct helpers \
25
+ { \
26
+ template < BOOST_PP_ENUM_PARAMS_Z(1, nargs, class U) > \
27
+ static yes test( \
28
+ qualified_name< BOOST_PP_ENUM_PARAMS_Z(1, nargs, U) >&, int \
29
+ ); \
30
+ \
31
+ template <class U> \
32
+ static no test(U&, ...); \
33
+ }; \
34
+ \
35
+ BOOST_STATIC_CONSTANT( \
36
+ bool, value \
37
+ = !is_reference<X_>::value \
38
+ & (sizeof(helpers::test(dummy, 0)) == sizeof(yes))); \
39
+ \
40
+ typedef mpl::bool_<value> type; \
41
+ };
42
+
43
+ # else
44
+
45
+ # define BOOST_DETAIL_IS_XXX_DEF(name, qualified_name, nargs) \
46
+ template <class T> \
47
+ struct is_##name : mpl::false_ \
48
+ { \
49
+ }; \
50
+ \
51
+ template < BOOST_PP_ENUM_PARAMS_Z(1, nargs, class T) > \
52
+ struct is_##name< \
53
+ qualified_name< BOOST_PP_ENUM_PARAMS_Z(1, nargs, T) > \
54
+ > \
55
+ : mpl::true_ \
56
+ { \
57
+ };
58
+
59
+ # endif
60
+
61
+ #endif // BOOST_DETAIL_IS_XXX_DWA20051011_HPP
@@ -0,0 +1,344 @@
1
+ /////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // (C) Copyright Ion Gaztanaga 2006-2012
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_ANY_HOOK_HPP
14
+ #define BOOST_INTRUSIVE_ANY_HOOK_HPP
15
+
16
+ #include <boost/intrusive/detail/config_begin.hpp>
17
+ #include <boost/intrusive/intrusive_fwd.hpp>
18
+ #include <boost/intrusive/detail/utilities.hpp>
19
+ #include <boost/intrusive/detail/any_node_and_algorithms.hpp>
20
+ #include <boost/intrusive/options.hpp>
21
+ #include <boost/intrusive/detail/generic_hook.hpp>
22
+ #include <boost/intrusive/pointer_traits.hpp>
23
+
24
+ namespace boost {
25
+ namespace intrusive {
26
+
27
+ /// @cond
28
+ template<class VoidPointer>
29
+ struct get_any_node_algo
30
+ {
31
+ typedef any_algorithms<VoidPointer> type;
32
+ };
33
+ /// @endcond
34
+
35
+ //! Helper metafunction to define a \c \c any_base_hook that yields to the same
36
+ //! type when the same options (either explicitly or implicitly) are used.
37
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
38
+ template<class ...Options>
39
+ #else
40
+ template<class O1 = none, class O2 = none, class O3 = none>
41
+ #endif
42
+ struct make_any_base_hook
43
+ {
44
+ /// @cond
45
+ typedef typename pack_options
46
+ < hook_defaults,
47
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
48
+ O1, O2, O3
49
+ #else
50
+ Options...
51
+ #endif
52
+ >::type packed_options;
53
+
54
+ typedef detail::generic_hook
55
+ < get_any_node_algo<typename packed_options::void_pointer>
56
+ , typename packed_options::tag
57
+ , packed_options::link_mode
58
+ , detail::AnyBaseHook
59
+ > implementation_defined;
60
+ /// @endcond
61
+ typedef implementation_defined type;
62
+ };
63
+
64
+ //! Derive a class from this hook in order to store objects of that class
65
+ //! in an intrusive container.
66
+ //!
67
+ //! The hook admits the following options: \c tag<>, \c void_pointer<> and
68
+ //! \c link_mode<>.
69
+ //!
70
+ //! \c tag<> defines a tag to identify the node.
71
+ //! The same tag value can be used in different classes, but if a class is
72
+ //! derived from more than one \c any_base_hook, then each \c any_base_hook needs its
73
+ //! unique tag.
74
+ //!
75
+ //! \c link_mode<> will specify the linking mode of the hook (\c normal_link, \c safe_link).
76
+ //!
77
+ //! \c void_pointer<> is the pointer type that will be used internally in the hook
78
+ //! and the the container configured to use this hook.
79
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
80
+ template<class ...Options>
81
+ #else
82
+ template<class O1, class O2, class O3>
83
+ #endif
84
+ class any_base_hook
85
+ : public make_any_base_hook
86
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
87
+ <O1, O2, O3>
88
+ #else
89
+ <Options...>
90
+ #endif
91
+ ::type
92
+ {
93
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
94
+ public:
95
+ //! <b>Effects</b>: If link_mode is or \c safe_link
96
+ //! initializes the node to an unlinked state.
97
+ //!
98
+ //! <b>Throws</b>: Nothing.
99
+ any_base_hook();
100
+
101
+ //! <b>Effects</b>: If link_mode is or \c safe_link
102
+ //! initializes the node to an unlinked state. The argument is ignored.
103
+ //!
104
+ //! <b>Throws</b>: Nothing.
105
+ //!
106
+ //! <b>Rationale</b>: Providing a copy-constructor
107
+ //! makes classes using the hook STL-compliant without forcing the
108
+ //! user to do some additional work. \c swap can be used to emulate
109
+ //! move-semantics.
110
+ any_base_hook(const any_base_hook& );
111
+
112
+ //! <b>Effects</b>: Empty function. The argument is ignored.
113
+ //!
114
+ //! <b>Throws</b>: Nothing.
115
+ //!
116
+ //! <b>Rationale</b>: Providing an assignment operator
117
+ //! makes classes using the hook STL-compliant without forcing the
118
+ //! user to do some additional work. \c swap can be used to emulate
119
+ //! move-semantics.
120
+ any_base_hook& operator=(const any_base_hook& );
121
+
122
+ //! <b>Effects</b>: If link_mode is \c normal_link, the destructor does
123
+ //! nothing (ie. no code is generated). If link_mode is \c safe_link and the
124
+ //! object is stored in a container an assertion is raised.
125
+ //!
126
+ //! <b>Throws</b>: Nothing.
127
+ ~any_base_hook();
128
+
129
+ //! <b>Precondition</b>: link_mode must be \c safe_link.
130
+ //!
131
+ //! <b>Returns</b>: true, if the node belongs to a container, false
132
+ //! otherwise. This function can be used to test whether \c container::iterator_to
133
+ //! will return a valid iterator.
134
+ //!
135
+ //! <b>Complexity</b>: Constant
136
+ bool is_linked() const;
137
+ #endif
138
+ };
139
+
140
+ //! Helper metafunction to define a \c \c any_member_hook that yields to the same
141
+ //! type when the same options (either explicitly or implicitly) are used.
142
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
143
+ template<class ...Options>
144
+ #else
145
+ template<class O1 = none, class O2 = none, class O3 = none>
146
+ #endif
147
+ struct make_any_member_hook
148
+ {
149
+ /// @cond
150
+ typedef typename pack_options
151
+ < hook_defaults,
152
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
153
+ O1, O2, O3
154
+ #else
155
+ Options...
156
+ #endif
157
+ >::type packed_options;
158
+
159
+ typedef detail::generic_hook
160
+ < get_any_node_algo<typename packed_options::void_pointer>
161
+ , member_tag
162
+ , packed_options::link_mode
163
+ , detail::NoBaseHook
164
+ > implementation_defined;
165
+ /// @endcond
166
+ typedef implementation_defined type;
167
+ };
168
+
169
+ //! Store this hook in a class to be inserted
170
+ //! in an intrusive container.
171
+ //!
172
+ //! The hook admits the following options: \c void_pointer<> and
173
+ //! \c link_mode<>.
174
+ //!
175
+ //! \c link_mode<> will specify the linking mode of the hook (\c normal_link or \c safe_link).
176
+ //!
177
+ //! \c void_pointer<> is the pointer type that will be used internally in the hook
178
+ //! and the the container configured to use this hook.
179
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
180
+ template<class ...Options>
181
+ #else
182
+ template<class O1, class O2, class O3>
183
+ #endif
184
+ class any_member_hook
185
+ : public make_any_member_hook
186
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
187
+ <O1, O2, O3>
188
+ #else
189
+ <Options...>
190
+ #endif
191
+ ::type
192
+ {
193
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
194
+ public:
195
+ //! <b>Effects</b>: If link_mode is or \c safe_link
196
+ //! initializes the node to an unlinked state.
197
+ //!
198
+ //! <b>Throws</b>: Nothing.
199
+ any_member_hook();
200
+
201
+ //! <b>Effects</b>: If link_mode is or \c safe_link
202
+ //! initializes the node to an unlinked state. The argument is ignored.
203
+ //!
204
+ //! <b>Throws</b>: Nothing.
205
+ //!
206
+ //! <b>Rationale</b>: Providing a copy-constructor
207
+ //! makes classes using the hook STL-compliant without forcing the
208
+ //! user to do some additional work. \c swap can be used to emulate
209
+ //! move-semantics.
210
+ any_member_hook(const any_member_hook& );
211
+
212
+ //! <b>Effects</b>: Empty function. The argument is ignored.
213
+ //!
214
+ //! <b>Throws</b>: Nothing.
215
+ //!
216
+ //! <b>Rationale</b>: Providing an assignment operator
217
+ //! makes classes using the hook STL-compliant without forcing the
218
+ //! user to do some additional work. \c swap can be used to emulate
219
+ //! move-semantics.
220
+ any_member_hook& operator=(const any_member_hook& );
221
+
222
+ //! <b>Effects</b>: If link_mode is \c normal_link, the destructor does
223
+ //! nothing (ie. no code is generated). If link_mode is \c safe_link and the
224
+ //! object is stored in a container an assertion is raised.
225
+ //!
226
+ //! <b>Throws</b>: Nothing.
227
+ ~any_member_hook();
228
+
229
+ //! <b>Precondition</b>: link_mode must be \c safe_link.
230
+ //!
231
+ //! <b>Returns</b>: true, if the node belongs to a container, false
232
+ //! otherwise. This function can be used to test whether \c container::iterator_to
233
+ //! will return a valid iterator.
234
+ //!
235
+ //! <b>Complexity</b>: Constant
236
+ bool is_linked() const;
237
+ #endif
238
+ };
239
+
240
+ /// @cond
241
+
242
+ namespace detail{
243
+
244
+ template<class ValueTraits>
245
+ struct any_to_get_base_pointer_type
246
+ {
247
+ typedef typename pointer_traits<typename ValueTraits::boost_intrusive_tags::node_traits::node_ptr>::template
248
+ rebind_pointer<void>::type type;
249
+ };
250
+
251
+ template<class ValueTraits>
252
+ struct any_to_get_member_pointer_type
253
+ {
254
+ typedef typename pointer_traits
255
+ <typename ValueTraits::node_ptr>::template rebind_pointer<void>::type type;
256
+ };
257
+
258
+ //!This option setter specifies that the container
259
+ //!must use the specified base hook
260
+ template<class BaseHook, template <class> class NodeTraits>
261
+ struct any_to_some_hook
262
+ {
263
+ typedef typename BaseHook::template pack<none>::value_traits old_value_traits;
264
+ template<class Base>
265
+ struct pack : public Base
266
+ {
267
+ struct value_traits : public old_value_traits
268
+ {
269
+ static const bool is_any_hook = true;
270
+ typedef typename detail::eval_if_c
271
+ < detail::internal_base_hook_bool_is_true<old_value_traits>::value
272
+ , any_to_get_base_pointer_type<old_value_traits>
273
+ , any_to_get_member_pointer_type<old_value_traits>
274
+ >::type void_pointer;
275
+ typedef NodeTraits<void_pointer> node_traits;
276
+ };
277
+ };
278
+ };
279
+
280
+ } //namespace detail{
281
+
282
+ /// @endcond
283
+
284
+ //!This option setter specifies that
285
+ //!any hook should behave as an slist hook
286
+ template<class BaseHook>
287
+ struct any_to_slist_hook
288
+ /// @cond
289
+ : public detail::any_to_some_hook<BaseHook, any_slist_node_traits>
290
+ /// @endcond
291
+ {};
292
+
293
+ //!This option setter specifies that
294
+ //!any hook should behave as an list hook
295
+ template<class BaseHook>
296
+ struct any_to_list_hook
297
+ /// @cond
298
+ : public detail::any_to_some_hook<BaseHook, any_list_node_traits>
299
+ /// @endcond
300
+ {};
301
+
302
+ //!This option setter specifies that
303
+ //!any hook should behave as a set hook
304
+ template<class BaseHook>
305
+ struct any_to_set_hook
306
+ /// @cond
307
+ : public detail::any_to_some_hook<BaseHook, any_rbtree_node_traits>
308
+ /// @endcond
309
+ {};
310
+
311
+ //!This option setter specifies that
312
+ //!any hook should behave as an avl_set hook
313
+ template<class BaseHook>
314
+ struct any_to_avl_set_hook
315
+ /// @cond
316
+ : public detail::any_to_some_hook<BaseHook, any_avltree_node_traits>
317
+ /// @endcond
318
+ {};
319
+
320
+ //!This option setter specifies that any
321
+ //!hook should behave as a bs_set hook
322
+ template<class BaseHook>
323
+ struct any_to_bs_set_hook
324
+ /// @cond
325
+ : public detail::any_to_some_hook<BaseHook, any_tree_node_traits>
326
+ /// @endcond
327
+ {};
328
+
329
+ //!This option setter specifies that any hook
330
+ //!should behave as an unordered set hook
331
+ template<class BaseHook>
332
+ struct any_to_unordered_set_hook
333
+ /// @cond
334
+ : public detail::any_to_some_hook<BaseHook, any_unordered_node_traits>
335
+ /// @endcond
336
+ {};
337
+
338
+
339
+ } //namespace intrusive
340
+ } //namespace boost
341
+
342
+ #include <boost/intrusive/detail/config_end.hpp>
343
+
344
+ #endif //BOOST_INTRUSIVE_ANY_HOOK_HPP
@@ -0,0 +1,2528 @@
1
+ /////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // (C) Copyright Ion Gaztanaga 2007-2012
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_AVL_SET_HPP
13
+ #define BOOST_INTRUSIVE_AVL_SET_HPP
14
+
15
+ #include <boost/intrusive/detail/config_begin.hpp>
16
+ #include <boost/intrusive/intrusive_fwd.hpp>
17
+ #include <boost/intrusive/avltree.hpp>
18
+ #include <boost/intrusive/detail/mpl.hpp>
19
+ #include <boost/move/move.hpp>
20
+ #include <iterator>
21
+
22
+ namespace boost {
23
+ namespace intrusive {
24
+
25
+ //! The class template avl_set is an intrusive container, that mimics most of
26
+ //! the interface of std::set as described in the C++ standard.
27
+ //!
28
+ //! The template parameter \c T is the type to be managed by the container.
29
+ //! The user can specify additional options and if no options are provided
30
+ //! default options are used.
31
+ //!
32
+ //! The container supports the following options:
33
+ //! \c base_hook<>/member_hook<>/value_traits<>,
34
+ //! \c constant_time_size<>, \c size_type<> and
35
+ //! \c compare<>.
36
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
37
+ template<class T, class ...Options>
38
+ #else
39
+ template<class Config>
40
+ #endif
41
+ class avl_set_impl
42
+ {
43
+ /// @cond
44
+ typedef avltree_impl<Config> tree_type;
45
+ //! This class is
46
+ //! movable
47
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(avl_set_impl)
48
+
49
+ typedef tree_type implementation_defined;
50
+ /// @endcond
51
+
52
+ public:
53
+ typedef typename implementation_defined::value_type value_type;
54
+ typedef typename implementation_defined::value_traits value_traits;
55
+ typedef typename implementation_defined::pointer pointer;
56
+ typedef typename implementation_defined::const_pointer const_pointer;
57
+ typedef typename implementation_defined::reference reference;
58
+ typedef typename implementation_defined::const_reference const_reference;
59
+ typedef typename implementation_defined::difference_type difference_type;
60
+ typedef typename implementation_defined::size_type size_type;
61
+ typedef typename implementation_defined::value_compare value_compare;
62
+ typedef typename implementation_defined::key_compare key_compare;
63
+ typedef typename implementation_defined::iterator iterator;
64
+ typedef typename implementation_defined::const_iterator const_iterator;
65
+ typedef typename implementation_defined::reverse_iterator reverse_iterator;
66
+ typedef typename implementation_defined::const_reverse_iterator const_reverse_iterator;
67
+ typedef typename implementation_defined::insert_commit_data insert_commit_data;
68
+ typedef typename implementation_defined::node_traits node_traits;
69
+ typedef typename implementation_defined::node node;
70
+ typedef typename implementation_defined::node_ptr node_ptr;
71
+ typedef typename implementation_defined::const_node_ptr const_node_ptr;
72
+ typedef typename implementation_defined::node_algorithms node_algorithms;
73
+
74
+ static const bool constant_time_size = Config::constant_time_size;
75
+
76
+ /// @cond
77
+ private:
78
+ tree_type tree_;
79
+ /// @endcond
80
+
81
+ public:
82
+ //! <b>Effects</b>: Constructs an empty avl_set.
83
+ //!
84
+ //! <b>Complexity</b>: Constant.
85
+ //!
86
+ //! <b>Throws</b>: If value_traits::node_traits::node
87
+ //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
88
+ //! or the copy constructor of the value_compare object throws.
89
+ explicit avl_set_impl( const value_compare &cmp = value_compare()
90
+ , const value_traits &v_traits = value_traits())
91
+ : tree_(cmp, v_traits)
92
+ {}
93
+
94
+ //! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
95
+ //! cmp must be a comparison function that induces a strict weak ordering.
96
+ //!
97
+ //! <b>Effects</b>: Constructs an empty avl_set and inserts elements from
98
+ //! [b, e).
99
+ //!
100
+ //! <b>Complexity</b>: Linear in N if [b, e) is already sorted using
101
+ //! comp and otherwise N * log N, where N is std::distance(last, first).
102
+ //!
103
+ //! <b>Throws</b>: If value_traits::node_traits::node
104
+ //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
105
+ //! or the copy constructor/operator() of the value_compare object throws.
106
+ template<class Iterator>
107
+ avl_set_impl( Iterator b, Iterator e
108
+ , const value_compare &cmp = value_compare()
109
+ , const value_traits &v_traits = value_traits())
110
+ : tree_(true, b, e, cmp, v_traits)
111
+ {}
112
+
113
+ //! <b>Effects</b>: to-do
114
+ //!
115
+ avl_set_impl(BOOST_RV_REF(avl_set_impl) x)
116
+ : tree_(::boost::move(x.tree_))
117
+ {}
118
+
119
+ //! <b>Effects</b>: to-do
120
+ //!
121
+ avl_set_impl& operator=(BOOST_RV_REF(avl_set_impl) x)
122
+ { tree_ = ::boost::move(x.tree_); return *this; }
123
+
124
+ //! <b>Effects</b>: Detaches all elements from this. The objects in the avl_set
125
+ //! are not deleted (i.e. no destructors are called).
126
+ //!
127
+ //! <b>Complexity</b>: Linear to the number of elements on the container.
128
+ //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
129
+ //!
130
+ //! <b>Throws</b>: Nothing.
131
+ ~avl_set_impl()
132
+ {}
133
+
134
+ //! <b>Effects</b>: Returns an iterator pointing to the beginning of the avl_set.
135
+ //!
136
+ //! <b>Complexity</b>: Constant.
137
+ //!
138
+ //! <b>Throws</b>: Nothing.
139
+ iterator begin()
140
+ { return tree_.begin(); }
141
+
142
+ //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the avl_set.
143
+ //!
144
+ //! <b>Complexity</b>: Constant.
145
+ //!
146
+ //! <b>Throws</b>: Nothing.
147
+ const_iterator begin() const
148
+ { return tree_.begin(); }
149
+
150
+ //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the avl_set.
151
+ //!
152
+ //! <b>Complexity</b>: Constant.
153
+ //!
154
+ //! <b>Throws</b>: Nothing.
155
+ const_iterator cbegin() const
156
+ { return tree_.cbegin(); }
157
+
158
+ //! <b>Effects</b>: Returns an iterator pointing to the end of the avl_set.
159
+ //!
160
+ //! <b>Complexity</b>: Constant.
161
+ //!
162
+ //! <b>Throws</b>: Nothing.
163
+ iterator end()
164
+ { return tree_.end(); }
165
+
166
+ //! <b>Effects</b>: Returns a const_iterator pointing to the end of the avl_set.
167
+ //!
168
+ //! <b>Complexity</b>: Constant.
169
+ //!
170
+ //! <b>Throws</b>: Nothing.
171
+ const_iterator end() const
172
+ { return tree_.end(); }
173
+
174
+ //! <b>Effects</b>: Returns a const_iterator pointing to the end of the avl_set.
175
+ //!
176
+ //! <b>Complexity</b>: Constant.
177
+ //!
178
+ //! <b>Throws</b>: Nothing.
179
+ const_iterator cend() const
180
+ { return tree_.cend(); }
181
+
182
+ //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning of the
183
+ //! reversed avl_set.
184
+ //!
185
+ //! <b>Complexity</b>: Constant.
186
+ //!
187
+ //! <b>Throws</b>: Nothing.
188
+ reverse_iterator rbegin()
189
+ { return tree_.rbegin(); }
190
+
191
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
192
+ //! of the reversed avl_set.
193
+ //!
194
+ //! <b>Complexity</b>: Constant.
195
+ //!
196
+ //! <b>Throws</b>: Nothing.
197
+ const_reverse_iterator rbegin() const
198
+ { return tree_.rbegin(); }
199
+
200
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
201
+ //! of the reversed avl_set.
202
+ //!
203
+ //! <b>Complexity</b>: Constant.
204
+ //!
205
+ //! <b>Throws</b>: Nothing.
206
+ const_reverse_iterator crbegin() const
207
+ { return tree_.crbegin(); }
208
+
209
+ //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
210
+ //! of the reversed avl_set.
211
+ //!
212
+ //! <b>Complexity</b>: Constant.
213
+ //!
214
+ //! <b>Throws</b>: Nothing.
215
+ reverse_iterator rend()
216
+ { return tree_.rend(); }
217
+
218
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
219
+ //! of the reversed avl_set.
220
+ //!
221
+ //! <b>Complexity</b>: Constant.
222
+ //!
223
+ //! <b>Throws</b>: Nothing.
224
+ const_reverse_iterator rend() const
225
+ { return tree_.rend(); }
226
+
227
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
228
+ //! of the reversed avl_set.
229
+ //!
230
+ //! <b>Complexity</b>: Constant.
231
+ //!
232
+ //! <b>Throws</b>: Nothing.
233
+ const_reverse_iterator crend() const
234
+ { return tree_.crend(); }
235
+
236
+ //! <b>Precondition</b>: end_iterator must be a valid end iterator
237
+ //! of avl_set.
238
+ //!
239
+ //! <b>Effects</b>: Returns a const reference to the avl_set associated to the end iterator
240
+ //!
241
+ //! <b>Throws</b>: Nothing.
242
+ //!
243
+ //! <b>Complexity</b>: Constant.
244
+ static avl_set_impl &container_from_end_iterator(iterator end_iterator)
245
+ {
246
+ return *detail::parent_from_member<avl_set_impl, tree_type>
247
+ ( &tree_type::container_from_end_iterator(end_iterator)
248
+ , &avl_set_impl::tree_);
249
+ }
250
+
251
+ //! <b>Precondition</b>: end_iterator must be a valid end const_iterator
252
+ //! of avl_set.
253
+ //!
254
+ //! <b>Effects</b>: Returns a const reference to the set associated to the end iterator
255
+ //!
256
+ //! <b>Throws</b>: Nothing.
257
+ //!
258
+ //! <b>Complexity</b>: Constant.
259
+ static const avl_set_impl &container_from_end_iterator(const_iterator end_iterator)
260
+ {
261
+ return *detail::parent_from_member<avl_set_impl, tree_type>
262
+ ( &tree_type::container_from_end_iterator(end_iterator)
263
+ , &avl_set_impl::tree_);
264
+ }
265
+
266
+ //! <b>Precondition</b>: it must be a valid iterator of set.
267
+ //!
268
+ //! <b>Effects</b>: Returns a reference to the set associated to the iterator
269
+ //!
270
+ //! <b>Throws</b>: Nothing.
271
+ //!
272
+ //! <b>Complexity</b>: Logarithmic.
273
+ static avl_set_impl &container_from_iterator(iterator it)
274
+ {
275
+ return *detail::parent_from_member<avl_set_impl, tree_type>
276
+ ( &tree_type::container_from_iterator(it)
277
+ , &avl_set_impl::tree_);
278
+ }
279
+
280
+ //! <b>Precondition</b>: it must be a valid const_iterator of set.
281
+ //!
282
+ //! <b>Effects</b>: Returns a const reference to the set associated to the iterator
283
+ //!
284
+ //! <b>Throws</b>: Nothing.
285
+ //!
286
+ //! <b>Complexity</b>: Logarithmic.
287
+ static const avl_set_impl &container_from_iterator(const_iterator it)
288
+ {
289
+ return *detail::parent_from_member<avl_set_impl, tree_type>
290
+ ( &tree_type::container_from_iterator(it)
291
+ , &avl_set_impl::tree_);
292
+ }
293
+
294
+ //! <b>Effects</b>: Returns the key_compare object used by the avl_set.
295
+ //!
296
+ //! <b>Complexity</b>: Constant.
297
+ //!
298
+ //! <b>Throws</b>: If key_compare copy-constructor throws.
299
+ key_compare key_comp() const
300
+ { return tree_.value_comp(); }
301
+
302
+ //! <b>Effects</b>: Returns the value_compare object used by the avl_set.
303
+ //!
304
+ //! <b>Complexity</b>: Constant.
305
+ //!
306
+ //! <b>Throws</b>: If value_compare copy-constructor throws.
307
+ value_compare value_comp() const
308
+ { return tree_.value_comp(); }
309
+
310
+ //! <b>Effects</b>: Returns true is the container is empty.
311
+ //!
312
+ //! <b>Complexity</b>: Constant.
313
+ //!
314
+ //! <b>Throws</b>: Nothing.
315
+ bool empty() const
316
+ { return tree_.empty(); }
317
+
318
+ //! <b>Effects</b>: Returns the number of elements stored in the avl_set.
319
+ //!
320
+ //! <b>Complexity</b>: Linear to elements contained in *this if,
321
+ //! constant-time size option is enabled. Constant-time otherwise.
322
+ //!
323
+ //! <b>Throws</b>: Nothing.
324
+ size_type size() const
325
+ { return tree_.size(); }
326
+
327
+ //! <b>Effects</b>: Swaps the contents of two sets.
328
+ //!
329
+ //! <b>Complexity</b>: Constant.
330
+ //!
331
+ //! <b>Throws</b>: If the swap() call for the comparison functor
332
+ //! found using ADL throws. Strong guarantee.
333
+ void swap(avl_set_impl& other)
334
+ { tree_.swap(other.tree_); }
335
+
336
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
337
+ //! Cloner should yield to nodes equivalent to the original nodes.
338
+ //!
339
+ //! <b>Effects</b>: Erases all the elements from *this
340
+ //! calling Disposer::operator()(pointer), clones all the
341
+ //! elements from src calling Cloner::operator()(const_reference )
342
+ //! and inserts them on *this. Copies the predicate from the source container.
343
+ //!
344
+ //! If cloner throws, all cloned elements are unlinked and disposed
345
+ //! calling Disposer::operator()(pointer).
346
+ //!
347
+ //! <b>Complexity</b>: Linear to erased plus inserted elements.
348
+ //!
349
+ //! <b>Throws</b>: If cloner throws or predicate copy assignment throws. Basic guarantee.
350
+ template <class Cloner, class Disposer>
351
+ void clone_from(const avl_set_impl &src, Cloner cloner, Disposer disposer)
352
+ { tree_.clone_from(src.tree_, cloner, disposer); }
353
+
354
+ //! <b>Requires</b>: value must be an lvalue
355
+ //!
356
+ //! <b>Effects</b>: Treaps to inserts value into the avl_set.
357
+ //!
358
+ //! <b>Returns</b>: If the value
359
+ //! is not already present inserts it and returns a pair containing the
360
+ //! iterator to the new value and true. If there is an equivalent value
361
+ //! returns a pair containing an iterator to the already present value
362
+ //! and false.
363
+ //!
364
+ //! <b>Complexity</b>: Average complexity for insert element is at
365
+ //! most logarithmic.
366
+ //!
367
+ //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
368
+ //!
369
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
370
+ //! No copy-constructors are called.
371
+ std::pair<iterator, bool> insert(reference value)
372
+ { return tree_.insert_unique(value); }
373
+
374
+ //! <b>Requires</b>: value must be an lvalue
375
+ //!
376
+ //! <b>Effects</b>: Treaps to to insert x into the avl_set, using "hint"
377
+ //! as a hint to where it will be inserted.
378
+ //!
379
+ //! <b>Returns</b>: An iterator that points to the position where the
380
+ //! new element was inserted into the avl_set.
381
+ //!
382
+ //! <b>Complexity</b>: Logarithmic in general, but it's amortized
383
+ //! constant time if t is inserted immediately before hint.
384
+ //!
385
+ //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
386
+ //!
387
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
388
+ //! No copy-constructors are called.
389
+ iterator insert(const_iterator hint, reference value)
390
+ { return tree_.insert_unique(hint, value); }
391
+
392
+ //! <b>Requires</b>: key_value_comp must be a comparison function that induces
393
+ //! the same strict weak ordering as value_compare. The difference is that
394
+ //! key_value_comp compares an arbitrary key with the contained values.
395
+ //!
396
+ //! <b>Effects</b>: Checks if a value can be inserted in the avl_set, using
397
+ //! a user provided key instead of the value itself.
398
+ //!
399
+ //! <b>Returns</b>: If there is an equivalent value
400
+ //! returns a pair containing an iterator to the already present value
401
+ //! and false. If the value can be inserted returns true in the returned
402
+ //! pair boolean and fills "commit_data" that is meant to be used with
403
+ //! the "insert_commit" function.
404
+ //!
405
+ //! <b>Complexity</b>: Average complexity is at most logarithmic.
406
+ //!
407
+ //! <b>Throws</b>: If the key_value_comp ordering function throws. Strong guarantee.
408
+ //!
409
+ //! <b>Notes</b>: This function is used to improve performance when constructing
410
+ //! a value_type is expensive: if there is an equivalent value
411
+ //! the constructed object must be discarded. Many times, the part of the
412
+ //! node that is used to impose the order is much cheaper to construct
413
+ //! than the value_type and this function offers the possibility to use that
414
+ //! part to check if the insertion will be successful.
415
+ //!
416
+ //! If the check is successful, the user can construct the value_type and use
417
+ //! "insert_commit" to insert the object in constant-time. This gives a total
418
+ //! logarithmic complexity to the insertion: check(O(log(N)) + commit(O(1)).
419
+ //!
420
+ //! "commit_data" remains valid for a subsequent "insert_commit" only if no more
421
+ //! objects are inserted or erased from the avl_set.
422
+ template<class KeyType, class KeyValueCompare>
423
+ std::pair<iterator, bool> insert_check
424
+ (const KeyType &key, KeyValueCompare key_value_comp, insert_commit_data &commit_data)
425
+ { return tree_.insert_unique_check(key, key_value_comp, commit_data); }
426
+
427
+ //! <b>Requires</b>: key_value_comp must be a comparison function that induces
428
+ //! the same strict weak ordering as value_compare. The difference is that
429
+ //! key_value_comp compares an arbitrary key with the contained values.
430
+ //!
431
+ //! <b>Effects</b>: Checks if a value can be inserted in the avl_set, using
432
+ //! a user provided key instead of the value itself, using "hint"
433
+ //! as a hint to where it will be inserted.
434
+ //!
435
+ //! <b>Returns</b>: If there is an equivalent value
436
+ //! returns a pair containing an iterator to the already present value
437
+ //! and false. If the value can be inserted returns true in the returned
438
+ //! pair boolean and fills "commit_data" that is meant to be used with
439
+ //! the "insert_commit" function.
440
+ //!
441
+ //! <b>Complexity</b>: Logarithmic in general, but it's amortized
442
+ //! constant time if t is inserted immediately before hint.
443
+ //!
444
+ //! <b>Throws</b>: If the key_value_comp ordering function throws. Strong guarantee.
445
+ //!
446
+ //! <b>Notes</b>: This function is used to improve performance when constructing
447
+ //! a value_type is expensive: if there is an equivalent value
448
+ //! the constructed object must be discarded. Many times, the part of the
449
+ //! constructing that is used to impose the order is much cheaper to construct
450
+ //! than the value_type and this function offers the possibility to use that key
451
+ //! to check if the insertion will be successful.
452
+ //!
453
+ //! If the check is successful, the user can construct the value_type and use
454
+ //! "insert_commit" to insert the object in constant-time. This can give a total
455
+ //! constant-time complexity to the insertion: check(O(1)) + commit(O(1)).
456
+ //!
457
+ //! "commit_data" remains valid for a subsequent "insert_commit" only if no more
458
+ //! objects are inserted or erased from the avl_set.
459
+ template<class KeyType, class KeyValueCompare>
460
+ std::pair<iterator, bool> insert_check
461
+ (const_iterator hint, const KeyType &key
462
+ ,KeyValueCompare key_value_comp, insert_commit_data &commit_data)
463
+ { return tree_.insert_unique_check(hint, key, key_value_comp, commit_data); }
464
+
465
+ //! <b>Requires</b>: value must be an lvalue of type value_type. commit_data
466
+ //! must have been obtained from a previous call to "insert_check".
467
+ //! No objects should have been inserted or erased from the avl_set between
468
+ //! the "insert_check" that filled "commit_data" and the call to "insert_commit".
469
+ //!
470
+ //! <b>Effects</b>: Inserts the value in the avl_set using the information obtained
471
+ //! from the "commit_data" that a previous "insert_check" filled.
472
+ //!
473
+ //! <b>Returns</b>: An iterator to the newly inserted object.
474
+ //!
475
+ //! <b>Complexity</b>: Constant time.
476
+ //!
477
+ //! <b>Throws</b>: Nothing.
478
+ //!
479
+ //! <b>Notes</b>: This function has only sense if a "insert_check" has been
480
+ //! previously executed to fill "commit_data". No value should be inserted or
481
+ //! erased between the "insert_check" and "insert_commit" calls.
482
+ iterator insert_commit(reference value, const insert_commit_data &commit_data)
483
+ { return tree_.insert_unique_commit(value, commit_data); }
484
+
485
+ //! <b>Requires</b>: Dereferencing iterator must yield an lvalue
486
+ //! of type value_type.
487
+ //!
488
+ //! <b>Effects</b>: Inserts a range into the avl_set.
489
+ //!
490
+ //! <b>Complexity</b>: Insert range is in general O(N * log(N)), where N is the
491
+ //! size of the range. However, it is linear in N if the range is already sorted
492
+ //! by value_comp().
493
+ //!
494
+ //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
495
+ //!
496
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
497
+ //! No copy-constructors are called.
498
+ template<class Iterator>
499
+ void insert(Iterator b, Iterator e)
500
+ { tree_.insert_unique(b, e); }
501
+
502
+ //! <b>Requires</b>: value must be an lvalue, "pos" must be
503
+ //! a valid iterator (or end) and must be the succesor of value
504
+ //! once inserted according to the predicate. "value" must not be equal to any
505
+ //! inserted key according to the predicate.
506
+ //!
507
+ //! <b>Effects</b>: Inserts x into the tree before "pos".
508
+ //!
509
+ //! <b>Complexity</b>: Constant time.
510
+ //!
511
+ //! <b>Throws</b>: Nothing.
512
+ //!
513
+ //! <b>Note</b>: This function does not check preconditions so if "pos" is not
514
+ //! the successor of "value" or "value" is not unique tree ordering and uniqueness
515
+ //! invariants will be broken respectively.
516
+ //! This is a low-level function to be used only for performance reasons
517
+ //! by advanced users.
518
+ iterator insert_before(const_iterator pos, reference value)
519
+ { return tree_.insert_before(pos, value); }
520
+
521
+ //! <b>Requires</b>: value must be an lvalue, and it must be greater than
522
+ //! any inserted key according to the predicate.
523
+ //!
524
+ //! <b>Effects</b>: Inserts x into the tree in the last position.
525
+ //!
526
+ //! <b>Complexity</b>: Constant time.
527
+ //!
528
+ //! <b>Throws</b>: Nothing.
529
+ //!
530
+ //! <b>Note</b>: This function does not check preconditions so if value is
531
+ //! less than or equal to the greatest inserted key tree ordering invariant will be broken.
532
+ //! This function is slightly more efficient than using "insert_before".
533
+ //! This is a low-level function to be used only for performance reasons
534
+ //! by advanced users.
535
+ void push_back(reference value)
536
+ { tree_.push_back(value); }
537
+
538
+ //! <b>Requires</b>: value must be an lvalue, and it must be less
539
+ //! than any inserted key according to the predicate.
540
+ //!
541
+ //! <b>Effects</b>: Inserts x into the tree in the first position.
542
+ //!
543
+ //! <b>Complexity</b>: Constant time.
544
+ //!
545
+ //! <b>Throws</b>: Nothing.
546
+ //!
547
+ //! <b>Note</b>: This function does not check preconditions so if value is
548
+ //! greater than or equal to the the mimum inserted key tree ordering or uniqueness
549
+ //! invariants will be broken.
550
+ //! This function is slightly more efficient than using "insert_before".
551
+ //! This is a low-level function to be used only for performance reasons
552
+ //! by advanced users.
553
+ void push_front(reference value)
554
+ { tree_.push_front(value); }
555
+
556
+ //! <b>Effects</b>: Erases the element pointed to by pos.
557
+ //!
558
+ //! <b>Complexity</b>: Average complexity is constant time.
559
+ //!
560
+ //! <b>Returns</b>: An iterator to the element after the erased element.
561
+ //!
562
+ //! <b>Throws</b>: Nothing.
563
+ //!
564
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
565
+ //! to the erased elements. No destructors are called.
566
+ iterator erase(const_iterator i)
567
+ { return tree_.erase(i); }
568
+
569
+ //! <b>Effects</b>: Erases the range pointed to by b end e.
570
+ //!
571
+ //! <b>Complexity</b>: Average complexity for erase range is at most
572
+ //! O(log(size() + N)), where N is the number of elements in the range.
573
+ //!
574
+ //! <b>Returns</b>: An iterator to the element after the erased elements.
575
+ //!
576
+ //! <b>Throws</b>: Nothing.
577
+ //!
578
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
579
+ //! to the erased elements. No destructors are called.
580
+ iterator erase(const_iterator b, const_iterator e)
581
+ { return tree_.erase(b, e); }
582
+
583
+ //! <b>Effects</b>: Erases all the elements with the given value.
584
+ //!
585
+ //! <b>Returns</b>: The number of erased elements.
586
+ //!
587
+ //! <b>Complexity</b>: O(log(size()) + this->count(value)).
588
+ //!
589
+ //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
590
+ //!
591
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
592
+ //! to the erased elements. No destructors are called.
593
+ size_type erase(const_reference value)
594
+ { return tree_.erase(value); }
595
+
596
+ //! <b>Effects</b>: Erases all the elements that compare equal with
597
+ //! the given key and the given comparison functor.
598
+ //!
599
+ //! <b>Returns</b>: The number of erased elements.
600
+ //!
601
+ //! <b>Complexity</b>: O(log(size() + this->count(key, comp)).
602
+ //!
603
+ //! <b>Throws</b>: If the comp ordering function throws. Basic guarantee.
604
+ //!
605
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
606
+ //! to the erased elements. No destructors are called.
607
+ template<class KeyType, class KeyValueCompare>
608
+ size_type erase(const KeyType& key, KeyValueCompare comp
609
+ /// @cond
610
+ , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
611
+ /// @endcond
612
+ )
613
+ { return tree_.erase(key, comp); }
614
+
615
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
616
+ //!
617
+ //! <b>Effects</b>: Erases the element pointed to by pos.
618
+ //! Disposer::operator()(pointer) is called for the removed element.
619
+ //!
620
+ //! <b>Complexity</b>: Average complexity for erase element is constant time.
621
+ //!
622
+ //! <b>Returns</b>: An iterator to the element after the erased element.
623
+ //!
624
+ //! <b>Throws</b>: Nothing.
625
+ //!
626
+ //! <b>Note</b>: Invalidates the iterators
627
+ //! to the erased elements.
628
+ template<class Disposer>
629
+ iterator erase_and_dispose(const_iterator i, Disposer disposer)
630
+ { return tree_.erase_and_dispose(i, disposer); }
631
+
632
+ #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
633
+ template<class Disposer>
634
+ iterator erase_and_dispose(iterator i, Disposer disposer)
635
+ { return this->erase_and_dispose(const_iterator(i), disposer); }
636
+ #endif
637
+
638
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
639
+ //!
640
+ //! <b>Effects</b>: Erases the range pointed to by b end e.
641
+ //! Disposer::operator()(pointer) is called for the removed elements.
642
+ //!
643
+ //! <b>Complexity</b>: Average complexity for erase range is at most
644
+ //! O(log(size() + N)), where N is the number of elements in the range.
645
+ //!
646
+ //! <b>Returns</b>: An iterator to the element after the erased elements.
647
+ //!
648
+ //! <b>Throws</b>: Nothing.
649
+ //!
650
+ //! <b>Note</b>: Invalidates the iterators
651
+ //! to the erased elements.
652
+ template<class Disposer>
653
+ iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer)
654
+ { return tree_.erase_and_dispose(b, e, disposer); }
655
+
656
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
657
+ //!
658
+ //! <b>Effects</b>: Erases all the elements with the given value.
659
+ //! Disposer::operator()(pointer) is called for the removed elements.
660
+ //!
661
+ //! <b>Throws</b>: If the internal value_compare ordering function throws.
662
+ //!
663
+ //! <b>Complexity</b>: O(log(size() + this->count(value)). Basic guarantee.
664
+ //!
665
+ //! <b>Throws</b>: Nothing.
666
+ //!
667
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
668
+ //! to the erased elements. No destructors are called.
669
+ template<class Disposer>
670
+ size_type erase_and_dispose(const_reference value, Disposer disposer)
671
+ { return tree_.erase_and_dispose(value, disposer); }
672
+
673
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
674
+ //!
675
+ //! <b>Effects</b>: Erases all the elements with the given key.
676
+ //! according to the comparison functor "comp".
677
+ //! Disposer::operator()(pointer) is called for the removed elements.
678
+ //!
679
+ //! <b>Returns</b>: The number of erased elements.
680
+ //!
681
+ //! <b>Complexity</b>: O(log(size() + this->count(key, comp)).
682
+ //!
683
+ //! <b>Throws</b>: If comp ordering function throws. Basic guarantee.
684
+ //!
685
+ //! <b>Note</b>: Invalidates the iterators
686
+ //! to the erased elements.
687
+ template<class KeyType, class KeyValueCompare, class Disposer>
688
+ size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer
689
+ /// @cond
690
+ , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
691
+ /// @endcond
692
+ )
693
+ { return tree_.erase_and_dispose(key, comp, disposer); }
694
+
695
+ //! <b>Effects</b>: Erases all the elements of the container.
696
+ //!
697
+ //! <b>Complexity</b>: Linear to the number of elements on the container.
698
+ //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
699
+ //!
700
+ //! <b>Throws</b>: Nothing.
701
+ //!
702
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
703
+ //! to the erased elements. No destructors are called.
704
+ void clear()
705
+ { return tree_.clear(); }
706
+
707
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
708
+ //!
709
+ //! <b>Effects</b>: Erases all the elements of the container.
710
+ //!
711
+ //! <b>Complexity</b>: Linear to the number of elements on the container.
712
+ //! Disposer::operator()(pointer) is called for the removed elements.
713
+ //!
714
+ //! <b>Throws</b>: Nothing.
715
+ //!
716
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
717
+ //! to the erased elements. No destructors are called.
718
+ template<class Disposer>
719
+ void clear_and_dispose(Disposer disposer)
720
+ { return tree_.clear_and_dispose(disposer); }
721
+
722
+ //! <b>Effects</b>: Returns the number of contained elements with the given key
723
+ //!
724
+ //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
725
+ //! to number of objects with the given key.
726
+ //!
727
+ //! <b>Throws</b>: If the internal value_compare ordering function throws.
728
+ size_type count(const_reference value) const
729
+ { return tree_.find(value) != end(); }
730
+
731
+ //! <b>Effects</b>: Returns the number of contained elements with the same key
732
+ //! compared with the given comparison functor.
733
+ //!
734
+ //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
735
+ //! to number of objects with the given key.
736
+ //!
737
+ //! <b>Throws</b>: If comp ordering function throws.
738
+ template<class KeyType, class KeyValueCompare>
739
+ size_type count(const KeyType& key, KeyValueCompare comp) const
740
+ { return tree_.find(key, comp) != end(); }
741
+
742
+ //! <b>Effects</b>: Returns an iterator to the first element whose
743
+ //! key is not less than k or end() if that element does not exist.
744
+ //!
745
+ //! <b>Complexity</b>: Logarithmic.
746
+ //!
747
+ //! <b>Throws</b>: If the internal value_compare ordering function throws.
748
+ iterator lower_bound(const_reference value)
749
+ { return tree_.lower_bound(value); }
750
+
751
+ //! <b>Requires</b>: comp must imply the same element order as
752
+ //! value_compare. Usually key is the part of the value_type
753
+ //! that is used in the ordering functor.
754
+ //!
755
+ //! <b>Effects</b>: Returns an iterator to the first element whose
756
+ //! key according to the comparison functor is not less than k or
757
+ //! end() if that element does not exist.
758
+ //!
759
+ //! <b>Complexity</b>: Logarithmic.
760
+ //!
761
+ //! <b>Throws</b>: If comp ordering function throws.
762
+ //!
763
+ //! <b>Note</b>: This function is used when constructing a value_type
764
+ //! is expensive and the value_type can be compared with a cheaper
765
+ //! key type. Usually this key is part of the value_type.
766
+ template<class KeyType, class KeyValueCompare>
767
+ iterator lower_bound(const KeyType& key, KeyValueCompare comp)
768
+ { return tree_.lower_bound(key, comp); }
769
+
770
+ //! <b>Effects</b>: Returns a const iterator to the first element whose
771
+ //! key is not less than k or end() if that element does not exist.
772
+ //!
773
+ //! <b>Complexity</b>: Logarithmic.
774
+ //!
775
+ //! <b>Throws</b>: If the internal value_compare ordering function throws.
776
+ const_iterator lower_bound(const_reference value) const
777
+ { return tree_.lower_bound(value); }
778
+
779
+ //! <b>Requires</b>: comp must imply the same element order as
780
+ //! value_compare. Usually key is the part of the value_type
781
+ //! that is used in the ordering functor.
782
+ //!
783
+ //! <b>Effects</b>: Returns a const_iterator to the first element whose
784
+ //! key according to the comparison functor is not less than k or
785
+ //! end() if that element does not exist.
786
+ //!
787
+ //! <b>Complexity</b>: Logarithmic.
788
+ //!
789
+ //! <b>Throws</b>: If comp ordering function throws.
790
+ //!
791
+ //! <b>Note</b>: This function is used when constructing a value_type
792
+ //! is expensive and the value_type can be compared with a cheaper
793
+ //! key type. Usually this key is part of the value_type.
794
+ template<class KeyType, class KeyValueCompare>
795
+ const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const
796
+ { return tree_.lower_bound(key, comp); }
797
+
798
+ //! <b>Effects</b>: Returns an iterator to the first element whose
799
+ //! key is greater than k or end() if that element does not exist.
800
+ //!
801
+ //! <b>Complexity</b>: Logarithmic.
802
+ //!
803
+ //! <b>Throws</b>: If the internal value_compare ordering function throws.
804
+ iterator upper_bound(const_reference value)
805
+ { return tree_.upper_bound(value); }
806
+
807
+ //! <b>Requires</b>: comp must imply the same element order as
808
+ //! value_compare. Usually key is the part of the value_type
809
+ //! that is used in the ordering functor.
810
+ //!
811
+ //! <b>Effects</b>: Returns an iterator to the first element whose
812
+ //! key according to the comparison functor is greater than key or
813
+ //! end() if that element does not exist.
814
+ //!
815
+ //! <b>Complexity</b>: Logarithmic.
816
+ //!
817
+ //! <b>Throws</b>: If comp ordering function throws.
818
+ //!
819
+ //! <b>Note</b>: This function is used when constructing a value_type
820
+ //! is expensive and the value_type can be compared with a cheaper
821
+ //! key type. Usually this key is part of the value_type.
822
+ template<class KeyType, class KeyValueCompare>
823
+ iterator upper_bound(const KeyType& key, KeyValueCompare comp)
824
+ { return tree_.upper_bound(key, comp); }
825
+
826
+ //! <b>Effects</b>: Returns an iterator to the first element whose
827
+ //! key is greater than k or end() if that element does not exist.
828
+ //!
829
+ //! <b>Complexity</b>: Logarithmic.
830
+ //!
831
+ //! <b>Throws</b>: If the internal value_compare ordering function throws.
832
+ const_iterator upper_bound(const_reference value) const
833
+ { return tree_.upper_bound(value); }
834
+
835
+ //! <b>Requires</b>: comp must imply the same element order as
836
+ //! value_compare. Usually key is the part of the value_type
837
+ //! that is used in the ordering functor.
838
+ //!
839
+ //! <b>Effects</b>: Returns a const_iterator to the first element whose
840
+ //! key according to the comparison functor is greater than key or
841
+ //! end() if that element does not exist.
842
+ //!
843
+ //! <b>Complexity</b>: Logarithmic.
844
+ //!
845
+ //! <b>Throws</b>: If comp ordering function throws.
846
+ //!
847
+ //! <b>Note</b>: This function is used when constructing a value_type
848
+ //! is expensive and the value_type can be compared with a cheaper
849
+ //! key type. Usually this key is part of the value_type.
850
+ template<class KeyType, class KeyValueCompare>
851
+ const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const
852
+ { return tree_.upper_bound(key, comp); }
853
+
854
+ //! <b>Effects</b>: Finds an iterator to the first element whose value is
855
+ //! "value" or end() if that element does not exist.
856
+ //!
857
+ //! <b>Complexity</b>: Logarithmic.
858
+ //!
859
+ //! <b>Throws</b>: If the internal value_compare ordering function throws.
860
+ iterator find(const_reference value)
861
+ { return tree_.find(value); }
862
+
863
+ //! <b>Requires</b>: comp must imply the same element order as
864
+ //! value_compare. Usually key is the part of the value_type
865
+ //! that is used in the ordering functor.
866
+ //!
867
+ //! <b>Effects</b>: Finds an iterator to the first element whose key is
868
+ //! "key" according to the comparison functor or end() if that element
869
+ //! does not exist.
870
+ //!
871
+ //! <b>Complexity</b>: Logarithmic.
872
+ //!
873
+ //! <b>Throws</b>: If comp ordering function throws.
874
+ //!
875
+ //! <b>Note</b>: This function is used when constructing a value_type
876
+ //! is expensive and the value_type can be compared with a cheaper
877
+ //! key type. Usually this key is part of the value_type.
878
+ template<class KeyType, class KeyValueCompare>
879
+ iterator find(const KeyType& key, KeyValueCompare comp)
880
+ { return tree_.find(key, comp); }
881
+
882
+ //! <b>Effects</b>: Finds a const_iterator to the first element whose value is
883
+ //! "value" or end() if that element does not exist.
884
+ //!
885
+ //! <b>Complexity</b>: Logarithmic.
886
+ //!
887
+ //! <b>Throws</b>: If the internal value_compare ordering function throws.
888
+ const_iterator find(const_reference value) const
889
+ { return tree_.find(value); }
890
+
891
+ //! <b>Requires</b>: comp must imply the same element order as
892
+ //! value_compare. Usually key is the part of the value_type
893
+ //! that is used in the ordering functor.
894
+ //!
895
+ //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
896
+ //! "key" according to the comparison functor or end() if that element
897
+ //! does not exist.
898
+ //!
899
+ //! <b>Complexity</b>: Logarithmic.
900
+ //!
901
+ //! <b>Throws</b>: If comp ordering function throws.
902
+ //!
903
+ //! <b>Note</b>: This function is used when constructing a value_type
904
+ //! is expensive and the value_type can be compared with a cheaper
905
+ //! key type. Usually this key is part of the value_type.
906
+ template<class KeyType, class KeyValueCompare>
907
+ const_iterator find(const KeyType& key, KeyValueCompare comp) const
908
+ { return tree_.find(key, comp); }
909
+
910
+ //! <b>Effects</b>: Finds a range containing all elements whose key is k or
911
+ //! an empty range that indicates the position where those elements would be
912
+ //! if they there is no elements with key k.
913
+ //!
914
+ //! <b>Complexity</b>: Logarithmic.
915
+ //!
916
+ //! <b>Throws</b>: If the internal value_compare ordering function throws.
917
+ std::pair<iterator,iterator> equal_range(const_reference value)
918
+ { return tree_.equal_range(value); }
919
+
920
+ //! <b>Requires</b>: comp must imply the same element order as
921
+ //! value_compare. Usually key is the part of the value_type
922
+ //! that is used in the ordering functor.
923
+ //!
924
+ //! <b>Effects</b>: Finds a range containing all elements whose key is k
925
+ //! according to the comparison functor or an empty range
926
+ //! that indicates the position where those elements would be
927
+ //! if they there is no elements with key k.
928
+ //!
929
+ //! <b>Complexity</b>: Logarithmic.
930
+ //!
931
+ //! <b>Throws</b>: If comp ordering function throws.
932
+ //!
933
+ //! <b>Note</b>: This function is used when constructing a value_type
934
+ //! is expensive and the value_type can be compared with a cheaper
935
+ //! key type. Usually this key is part of the value_type.
936
+ template<class KeyType, class KeyValueCompare>
937
+ std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp)
938
+ { return tree_.equal_range(key, comp); }
939
+
940
+ //! <b>Effects</b>: Finds a range containing all elements whose key is k or
941
+ //! an empty range that indicates the position where those elements would be
942
+ //! if they there is no elements with key k.
943
+ //!
944
+ //! <b>Complexity</b>: Logarithmic.
945
+ //!
946
+ //! <b>Throws</b>: If the internal value_compare ordering function throws.
947
+ std::pair<const_iterator, const_iterator>
948
+ equal_range(const_reference value) const
949
+ { return tree_.equal_range(value); }
950
+
951
+ //! <b>Requires</b>: comp must imply the same element order as
952
+ //! value_compare. Usually key is the part of the value_type
953
+ //! that is used in the ordering functor.
954
+ //!
955
+ //! <b>Effects</b>: Finds a range containing all elements whose key is k
956
+ //! according to the comparison functor or an empty range
957
+ //! that indicates the position where those elements would be
958
+ //! if they there is no elements with key k.
959
+ //!
960
+ //! <b>Complexity</b>: Logarithmic.
961
+ //!
962
+ //! <b>Throws</b>: If comp ordering function throws.
963
+ //!
964
+ //! <b>Note</b>: This function is used when constructing a value_type
965
+ //! is expensive and the value_type can be compared with a cheaper
966
+ //! key type. Usually this key is part of the value_type.
967
+ template<class KeyType, class KeyValueCompare>
968
+ std::pair<const_iterator, const_iterator>
969
+ equal_range(const KeyType& key, KeyValueCompare comp) const
970
+ { return tree_.equal_range(key, comp); }
971
+
972
+ //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
973
+ //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
974
+ //!
975
+ //! <b>Effects</b>: Returns an a pair with the following criteria:
976
+ //!
977
+ //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
978
+ //!
979
+ //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
980
+ //!
981
+ //! <b>Complexity</b>: Logarithmic.
982
+ //!
983
+ //! <b>Throws</b>: If the predicate throws.
984
+ //!
985
+ //! <b>Note</b>: This function can be more efficient than calling upper_bound
986
+ //! and lower_bound for lower_value and upper_value.
987
+ std::pair<iterator,iterator> bounded_range
988
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed)
989
+ { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); }
990
+
991
+ //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
992
+ //! ordering compatible with the strict weak ordering used to create the
993
+ //! the tree.
994
+ //! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If
995
+ //! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be false.
996
+ //!
997
+ //! <b>Effects</b>: Returns an a pair with the following criteria:
998
+ //!
999
+ //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
1000
+ //!
1001
+ //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
1002
+ //!
1003
+ //! <b>Complexity</b>: Logarithmic.
1004
+ //!
1005
+ //! <b>Throws</b>: If "comp" throws.
1006
+ //!
1007
+ //! <b>Note</b>: This function can be more efficient than calling upper_bound
1008
+ //! and lower_bound for lower_key and upper_key.
1009
+ template<class KeyType, class KeyValueCompare>
1010
+ std::pair<iterator,iterator> bounded_range
1011
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed)
1012
+ { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); }
1013
+
1014
+ //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
1015
+ //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
1016
+ //!
1017
+ //! <b>Effects</b>: Returns an a pair with the following criteria:
1018
+ //!
1019
+ //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
1020
+ //!
1021
+ //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
1022
+ //!
1023
+ //! <b>Complexity</b>: Logarithmic.
1024
+ //!
1025
+ //! <b>Throws</b>: If the predicate throws.
1026
+ //!
1027
+ //! <b>Note</b>: This function can be more efficient than calling upper_bound
1028
+ //! and lower_bound for lower_value and upper_value.
1029
+ std::pair<const_iterator, const_iterator>
1030
+ bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const
1031
+ { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); }
1032
+
1033
+ //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
1034
+ //! ordering compatible with the strict weak ordering used to create the
1035
+ //! the tree.
1036
+ //! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If
1037
+ //! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be false.
1038
+ //!
1039
+ //! <b>Effects</b>: Returns an a pair with the following criteria:
1040
+ //!
1041
+ //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
1042
+ //!
1043
+ //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
1044
+ //!
1045
+ //! <b>Complexity</b>: Logarithmic.
1046
+ //!
1047
+ //! <b>Throws</b>: If "comp" throws.
1048
+ //!
1049
+ //! <b>Note</b>: This function can be more efficient than calling upper_bound
1050
+ //! and lower_bound for lower_key and upper_key.
1051
+ template<class KeyType, class KeyValueCompare>
1052
+ std::pair<const_iterator, const_iterator>
1053
+ bounded_range
1054
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const
1055
+ { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); }
1056
+
1057
+ //! <b>Requires</b>: value must be an lvalue and shall be in a avl_set of
1058
+ //! appropriate type. Otherwise the behavior is undefined.
1059
+ //!
1060
+ //! <b>Effects</b>: Returns: a valid iterator i belonging to the avl_set
1061
+ //! that points to the value
1062
+ //!
1063
+ //! <b>Complexity</b>: Constant.
1064
+ //!
1065
+ //! <b>Throws</b>: Nothing.
1066
+ //!
1067
+ //! <b>Note</b>: This static function is available only if the <i>value traits</i>
1068
+ //! is stateless.
1069
+ static iterator s_iterator_to(reference value)
1070
+ { return tree_type::s_iterator_to(value); }
1071
+
1072
+ //! <b>Requires</b>: value must be an lvalue and shall be in a avl_set of
1073
+ //! appropriate type. Otherwise the behavior is undefined.
1074
+ //!
1075
+ //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
1076
+ //! avl_set that points to the value
1077
+ //!
1078
+ //! <b>Complexity</b>: Constant.
1079
+ //!
1080
+ //! <b>Throws</b>: Nothing.
1081
+ //!
1082
+ //! <b>Note</b>: This static function is available only if the <i>value traits</i>
1083
+ //! is stateless.
1084
+ static const_iterator s_iterator_to(const_reference value)
1085
+ { return tree_type::s_iterator_to(value); }
1086
+
1087
+ //! <b>Requires</b>: value must be an lvalue and shall be in a avl_set of
1088
+ //! appropriate type. Otherwise the behavior is undefined.
1089
+ //!
1090
+ //! <b>Effects</b>: Returns: a valid iterator i belonging to the avl_set
1091
+ //! that points to the value
1092
+ //!
1093
+ //! <b>Complexity</b>: Constant.
1094
+ //!
1095
+ //! <b>Throws</b>: Nothing.
1096
+ iterator iterator_to(reference value)
1097
+ { return tree_.iterator_to(value); }
1098
+
1099
+ //! <b>Requires</b>: value must be an lvalue and shall be in a avl_set of
1100
+ //! appropriate type. Otherwise the behavior is undefined.
1101
+ //!
1102
+ //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
1103
+ //! avl_set that points to the value
1104
+ //!
1105
+ //! <b>Complexity</b>: Constant.
1106
+ //!
1107
+ //! <b>Throws</b>: Nothing.
1108
+ const_iterator iterator_to(const_reference value) const
1109
+ { return tree_.iterator_to(value); }
1110
+
1111
+ //! <b>Requires</b>: value shall not be in a avl_set/avl_multiset.
1112
+ //!
1113
+ //! <b>Effects</b>: init_node puts the hook of a value in a well-known default
1114
+ //! state.
1115
+ //!
1116
+ //! <b>Throws</b>: Nothing.
1117
+ //!
1118
+ //! <b>Complexity</b>: Constant time.
1119
+ //!
1120
+ //! <b>Note</b>: This function puts the hook in the well-known default state
1121
+ //! used by auto_unlink and safe hooks.
1122
+ static void init_node(reference value)
1123
+ { tree_type::init_node(value); }
1124
+
1125
+ //! <b>Effects</b>: Unlinks the leftmost node from the tree.
1126
+ //!
1127
+ //! <b>Complexity</b>: Average complexity is constant time.
1128
+ //!
1129
+ //! <b>Throws</b>: Nothing.
1130
+ //!
1131
+ //! <b>Notes</b>: This function breaks the tree and the tree can
1132
+ //! only be used for more unlink_leftmost_without_rebalance calls.
1133
+ //! This function is normally used to achieve a step by step
1134
+ //! controlled destruction of the tree.
1135
+ pointer unlink_leftmost_without_rebalance()
1136
+ { return tree_.unlink_leftmost_without_rebalance(); }
1137
+
1138
+ //! <b>Requires</b>: replace_this must be a valid iterator of *this
1139
+ //! and with_this must not be inserted in any tree.
1140
+ //!
1141
+ //! <b>Effects</b>: Replaces replace_this in its position in the
1142
+ //! tree with with_this. The tree does not need to be rebalanced.
1143
+ //!
1144
+ //! <b>Complexity</b>: Constant.
1145
+ //!
1146
+ //! <b>Throws</b>: Nothing.
1147
+ //!
1148
+ //! <b>Note</b>: This function will break container ordering invariants if
1149
+ //! with_this is not equivalent to *replace_this according to the
1150
+ //! ordering rules. This function is faster than erasing and inserting
1151
+ //! the node, since no rebalancing or comparison is needed.
1152
+ void replace_node(iterator replace_this, reference with_this)
1153
+ { tree_.replace_node(replace_this, with_this); }
1154
+
1155
+ /// @cond
1156
+ friend bool operator==(const avl_set_impl &x, const avl_set_impl &y)
1157
+ { return x.tree_ == y.tree_; }
1158
+
1159
+ friend bool operator<(const avl_set_impl &x, const avl_set_impl &y)
1160
+ { return x.tree_ < y.tree_; }
1161
+ /// @endcond
1162
+ };
1163
+
1164
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1165
+ template<class T, class ...Options>
1166
+ #else
1167
+ template<class Config>
1168
+ #endif
1169
+ inline bool operator!=
1170
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1171
+ (const avl_set_impl<T, Options...> &x, const avl_set_impl<T, Options...> &y)
1172
+ #else
1173
+ (const avl_set_impl<Config> &x, const avl_set_impl<Config> &y)
1174
+ #endif
1175
+ { return !(x == y); }
1176
+
1177
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1178
+ template<class T, class ...Options>
1179
+ #else
1180
+ template<class Config>
1181
+ #endif
1182
+ inline bool operator>
1183
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1184
+ (const avl_set_impl<T, Options...> &x, const avl_set_impl<T, Options...> &y)
1185
+ #else
1186
+ (const avl_set_impl<Config> &x, const avl_set_impl<Config> &y)
1187
+ #endif
1188
+ { return y < x; }
1189
+
1190
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1191
+ template<class T, class ...Options>
1192
+ #else
1193
+ template<class Config>
1194
+ #endif
1195
+ inline bool operator<=
1196
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1197
+ (const avl_set_impl<T, Options...> &x, const avl_set_impl<T, Options...> &y)
1198
+ #else
1199
+ (const avl_set_impl<Config> &x, const avl_set_impl<Config> &y)
1200
+ #endif
1201
+ { return !(y < x); }
1202
+
1203
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1204
+ template<class T, class ...Options>
1205
+ #else
1206
+ template<class Config>
1207
+ #endif
1208
+ inline bool operator>=
1209
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1210
+ (const avl_set_impl<T, Options...> &x, const avl_set_impl<T, Options...> &y)
1211
+ #else
1212
+ (const avl_set_impl<Config> &x, const avl_set_impl<Config> &y)
1213
+ #endif
1214
+ { return !(x < y); }
1215
+
1216
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1217
+ template<class T, class ...Options>
1218
+ #else
1219
+ template<class Config>
1220
+ #endif
1221
+ inline void swap
1222
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1223
+ (avl_set_impl<T, Options...> &x, avl_set_impl<T, Options...> &y)
1224
+ #else
1225
+ (avl_set_impl<Config> &x, avl_set_impl<Config> &y)
1226
+ #endif
1227
+ { x.swap(y); }
1228
+
1229
+ //! Helper metafunction to define a \c avl_set that yields to the same type when the
1230
+ //! same options (either explicitly or implicitly) are used.
1231
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
1232
+ template<class T, class ...Options>
1233
+ #else
1234
+ template<class T, class O1 = none, class O2 = none
1235
+ , class O3 = none, class O4 = none>
1236
+ #endif
1237
+ struct make_avl_set
1238
+ {
1239
+ /// @cond
1240
+ typedef avl_set_impl
1241
+ < typename make_avltree_opt
1242
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
1243
+ <T, O1, O2, O3, O4>
1244
+ #else
1245
+ <T, Options...>
1246
+ #endif
1247
+ ::type
1248
+ > implementation_defined;
1249
+ /// @endcond
1250
+ typedef implementation_defined type;
1251
+ };
1252
+
1253
+ #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
1254
+
1255
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
1256
+ template<class T, class O1, class O2, class O3, class O4>
1257
+ #else
1258
+ template<class T, class ...Options>
1259
+ #endif
1260
+ class avl_set
1261
+ : public make_avl_set
1262
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
1263
+ <T, O1, O2, O3, O4>
1264
+ #else
1265
+ <T, Options...>
1266
+ #endif
1267
+ ::type
1268
+ {
1269
+ typedef typename make_avl_set
1270
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
1271
+ <T, O1, O2, O3, O4>
1272
+ #else
1273
+ <T, Options...>
1274
+ #endif
1275
+ ::type Base;
1276
+
1277
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(avl_set)
1278
+ public:
1279
+ typedef typename Base::value_compare value_compare;
1280
+ typedef typename Base::value_traits value_traits;
1281
+ typedef typename Base::iterator iterator;
1282
+ typedef typename Base::const_iterator const_iterator;
1283
+
1284
+ //Assert if passed value traits are compatible with the type
1285
+ BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
1286
+
1287
+ avl_set( const value_compare &cmp = value_compare()
1288
+ , const value_traits &v_traits = value_traits())
1289
+ : Base(cmp, v_traits)
1290
+ {}
1291
+
1292
+ template<class Iterator>
1293
+ avl_set( Iterator b, Iterator e
1294
+ , const value_compare &cmp = value_compare()
1295
+ , const value_traits &v_traits = value_traits())
1296
+ : Base(b, e, cmp, v_traits)
1297
+ {}
1298
+
1299
+ avl_set(BOOST_RV_REF(avl_set) x)
1300
+ : Base(::boost::move(static_cast<Base&>(x)))
1301
+ {}
1302
+
1303
+ avl_set& operator=(BOOST_RV_REF(avl_set) x)
1304
+ { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
1305
+
1306
+ static avl_set &container_from_end_iterator(iterator end_iterator)
1307
+ { return static_cast<avl_set &>(Base::container_from_end_iterator(end_iterator)); }
1308
+
1309
+ static const avl_set &container_from_end_iterator(const_iterator end_iterator)
1310
+ { return static_cast<const avl_set &>(Base::container_from_end_iterator(end_iterator)); }
1311
+
1312
+ static avl_set &container_from_iterator(iterator end_iterator)
1313
+ { return static_cast<avl_set &>(Base::container_from_iterator(end_iterator)); }
1314
+
1315
+ static const avl_set &container_from_iterator(const_iterator end_iterator)
1316
+ { return static_cast<const avl_set &>(Base::container_from_iterator(end_iterator)); }
1317
+ };
1318
+
1319
+ #endif
1320
+
1321
+ //! The class template avl_multiset is an intrusive container, that mimics most of
1322
+ //! the interface of std::avl_multiset as described in the C++ standard.
1323
+ //!
1324
+ //! The template parameter \c T is the type to be managed by the container.
1325
+ //! The user can specify additional options and if no options are provided
1326
+ //! default options are used.
1327
+ //!
1328
+ //! The container supports the following options:
1329
+ //! \c base_hook<>/member_hook<>/value_traits<>,
1330
+ //! \c constant_time_size<>, \c size_type<> and
1331
+ //! \c compare<>.
1332
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1333
+ template<class T, class ...Options>
1334
+ #else
1335
+ template<class Config>
1336
+ #endif
1337
+ class avl_multiset_impl
1338
+ {
1339
+ /// @cond
1340
+ typedef avltree_impl<Config> tree_type;
1341
+
1342
+ //Movable
1343
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(avl_multiset_impl)
1344
+ typedef tree_type implementation_defined;
1345
+ /// @endcond
1346
+
1347
+ public:
1348
+ typedef typename implementation_defined::value_type value_type;
1349
+ typedef typename implementation_defined::value_traits value_traits;
1350
+ typedef typename implementation_defined::pointer pointer;
1351
+ typedef typename implementation_defined::const_pointer const_pointer;
1352
+ typedef typename implementation_defined::reference reference;
1353
+ typedef typename implementation_defined::const_reference const_reference;
1354
+ typedef typename implementation_defined::difference_type difference_type;
1355
+ typedef typename implementation_defined::size_type size_type;
1356
+ typedef typename implementation_defined::value_compare value_compare;
1357
+ typedef typename implementation_defined::key_compare key_compare;
1358
+ typedef typename implementation_defined::iterator iterator;
1359
+ typedef typename implementation_defined::const_iterator const_iterator;
1360
+ typedef typename implementation_defined::reverse_iterator reverse_iterator;
1361
+ typedef typename implementation_defined::const_reverse_iterator const_reverse_iterator;
1362
+ typedef typename implementation_defined::insert_commit_data insert_commit_data;
1363
+ typedef typename implementation_defined::node_traits node_traits;
1364
+ typedef typename implementation_defined::node node;
1365
+ typedef typename implementation_defined::node_ptr node_ptr;
1366
+ typedef typename implementation_defined::const_node_ptr const_node_ptr;
1367
+ typedef typename implementation_defined::node_algorithms node_algorithms;
1368
+
1369
+ static const bool constant_time_size = Config::constant_time_size;
1370
+
1371
+ /// @cond
1372
+ private:
1373
+ tree_type tree_;
1374
+ /// @endcond
1375
+
1376
+ public:
1377
+ //! <b>Effects</b>: Constructs an empty avl_multiset.
1378
+ //!
1379
+ //! <b>Complexity</b>: Constant.
1380
+ //!
1381
+ //! <b>Throws</b>: If value_traits::node_traits::node
1382
+ //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
1383
+ //! or the copy constructor/operator() of the value_compare object throws.
1384
+ explicit avl_multiset_impl( const value_compare &cmp = value_compare()
1385
+ , const value_traits &v_traits = value_traits())
1386
+ : tree_(cmp, v_traits)
1387
+ {}
1388
+
1389
+ //! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
1390
+ //! cmp must be a comparison function that induces a strict weak ordering.
1391
+ //!
1392
+ //! <b>Effects</b>: Constructs an empty avl_multiset and inserts elements from
1393
+ //! [b, e).
1394
+ //!
1395
+ //! <b>Complexity</b>: Linear in N if [b, e) is already sorted using
1396
+ //! comp and otherwise N * log N, where N is the distance between first and last
1397
+ //!
1398
+ //! <b>Throws</b>: If value_traits::node_traits::node
1399
+ //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
1400
+ //! or the copy constructor/operator() of the value_compare object throws.
1401
+ template<class Iterator>
1402
+ avl_multiset_impl( Iterator b, Iterator e
1403
+ , const value_compare &cmp = value_compare()
1404
+ , const value_traits &v_traits = value_traits())
1405
+ : tree_(false, b, e, cmp, v_traits)
1406
+ {}
1407
+
1408
+ //! <b>Effects</b>: to-do
1409
+ //!
1410
+ avl_multiset_impl(BOOST_RV_REF(avl_multiset_impl) x)
1411
+ : tree_(::boost::move(x.tree_))
1412
+ {}
1413
+
1414
+ //! <b>Effects</b>: to-do
1415
+ //!
1416
+ avl_multiset_impl& operator=(BOOST_RV_REF(avl_multiset_impl) x)
1417
+ { tree_ = ::boost::move(x.tree_); return *this; }
1418
+
1419
+ //! <b>Effects</b>: Detaches all elements from this. The objects in the avl_multiset
1420
+ //! are not deleted (i.e. no destructors are called).
1421
+ //!
1422
+ //! <b>Complexity</b>: Linear to the number of elements on the container.
1423
+ //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
1424
+ //!
1425
+ //! <b>Throws</b>: Nothing.
1426
+ ~avl_multiset_impl()
1427
+ {}
1428
+
1429
+ //! <b>Effects</b>: Returns an iterator pointing to the beginning of the avl_multiset.
1430
+ //!
1431
+ //! <b>Complexity</b>: Constant.
1432
+ //!
1433
+ //! <b>Throws</b>: Nothing.
1434
+ iterator begin()
1435
+ { return tree_.begin(); }
1436
+
1437
+ //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the avl_multiset.
1438
+ //!
1439
+ //! <b>Complexity</b>: Constant.
1440
+ //!
1441
+ //! <b>Throws</b>: Nothing.
1442
+ const_iterator begin() const
1443
+ { return tree_.begin(); }
1444
+
1445
+ //! <b>Effects</b>: Returns a const_iterator pointing to the beginning of the avl_multiset.
1446
+ //!
1447
+ //! <b>Complexity</b>: Constant.
1448
+ //!
1449
+ //! <b>Throws</b>: Nothing.
1450
+ const_iterator cbegin() const
1451
+ { return tree_.cbegin(); }
1452
+
1453
+ //! <b>Effects</b>: Returns an iterator pointing to the end of the avl_multiset.
1454
+ //!
1455
+ //! <b>Complexity</b>: Constant.
1456
+ //!
1457
+ //! <b>Throws</b>: Nothing.
1458
+ iterator end()
1459
+ { return tree_.end(); }
1460
+
1461
+ //! <b>Effects</b>: Returns a const_iterator pointing to the end of the avl_multiset.
1462
+ //!
1463
+ //! <b>Complexity</b>: Constant.
1464
+ //!
1465
+ //! <b>Throws</b>: Nothing.
1466
+ const_iterator end() const
1467
+ { return tree_.end(); }
1468
+
1469
+ //! <b>Effects</b>: Returns a const_iterator pointing to the end of the avl_multiset.
1470
+ //!
1471
+ //! <b>Complexity</b>: Constant.
1472
+ //!
1473
+ //! <b>Throws</b>: Nothing.
1474
+ const_iterator cend() const
1475
+ { return tree_.cend(); }
1476
+
1477
+ //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning of the
1478
+ //! reversed avl_multiset.
1479
+ //!
1480
+ //! <b>Complexity</b>: Constant.
1481
+ //!
1482
+ //! <b>Throws</b>: Nothing.
1483
+ reverse_iterator rbegin()
1484
+ { return tree_.rbegin(); }
1485
+
1486
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
1487
+ //! of the reversed avl_multiset.
1488
+ //!
1489
+ //! <b>Complexity</b>: Constant.
1490
+ //!
1491
+ //! <b>Throws</b>: Nothing.
1492
+ const_reverse_iterator rbegin() const
1493
+ { return tree_.rbegin(); }
1494
+
1495
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
1496
+ //! of the reversed avl_multiset.
1497
+ //!
1498
+ //! <b>Complexity</b>: Constant.
1499
+ //!
1500
+ //! <b>Throws</b>: Nothing.
1501
+ const_reverse_iterator crbegin() const
1502
+ { return tree_.crbegin(); }
1503
+
1504
+ //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
1505
+ //! of the reversed avl_multiset.
1506
+ //!
1507
+ //! <b>Complexity</b>: Constant.
1508
+ //!
1509
+ //! <b>Throws</b>: Nothing.
1510
+ reverse_iterator rend()
1511
+ { return tree_.rend(); }
1512
+
1513
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
1514
+ //! of the reversed avl_multiset.
1515
+ //!
1516
+ //! <b>Complexity</b>: Constant.
1517
+ //!
1518
+ //! <b>Throws</b>: Nothing.
1519
+ const_reverse_iterator rend() const
1520
+ { return tree_.rend(); }
1521
+
1522
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
1523
+ //! of the reversed avl_multiset.
1524
+ //!
1525
+ //! <b>Complexity</b>: Constant.
1526
+ //!
1527
+ //! <b>Throws</b>: Nothing.
1528
+ const_reverse_iterator crend() const
1529
+ { return tree_.crend(); }
1530
+
1531
+ //! <b>Precondition</b>: end_iterator must be a valid end iterator
1532
+ //! of avl_multiset.
1533
+ //!
1534
+ //! <b>Effects</b>: Returns a const reference to the avl_multiset associated to the end iterator
1535
+ //!
1536
+ //! <b>Throws</b>: Nothing.
1537
+ //!
1538
+ //! <b>Complexity</b>: Constant.
1539
+ static avl_multiset_impl &container_from_end_iterator(iterator end_iterator)
1540
+ {
1541
+ return *detail::parent_from_member<avl_multiset_impl, tree_type>
1542
+ ( &tree_type::container_from_end_iterator(end_iterator)
1543
+ , &avl_multiset_impl::tree_);
1544
+ }
1545
+
1546
+ //! <b>Precondition</b>: end_iterator must be a valid end const_iterator
1547
+ //! of avl_multiset.
1548
+ //!
1549
+ //! <b>Effects</b>: Returns a const reference to the avl_multiset associated to the end iterator
1550
+ //!
1551
+ //! <b>Throws</b>: Nothing.
1552
+ //!
1553
+ //! <b>Complexity</b>: Constant.
1554
+ static const avl_multiset_impl &container_from_end_iterator(const_iterator end_iterator)
1555
+ {
1556
+ return *detail::parent_from_member<avl_multiset_impl, tree_type>
1557
+ ( &tree_type::container_from_end_iterator(end_iterator)
1558
+ , &avl_multiset_impl::tree_);
1559
+ }
1560
+
1561
+ //! <b>Precondition</b>: it must be a valid iterator of multiset.
1562
+ //!
1563
+ //! <b>Effects</b>: Returns a const reference to the multiset associated to the iterator
1564
+ //!
1565
+ //! <b>Throws</b>: Nothing.
1566
+ //!
1567
+ //! <b>Complexity</b>: Logarithmic.
1568
+ static avl_multiset_impl &container_from_iterator(iterator it)
1569
+ {
1570
+ return *detail::parent_from_member<avl_multiset_impl, tree_type>
1571
+ ( &tree_type::container_from_iterator(it)
1572
+ , &avl_multiset_impl::tree_);
1573
+ }
1574
+
1575
+ //! <b>Precondition</b>: it must be a valid const_iterator of multiset.
1576
+ //!
1577
+ //! <b>Effects</b>: Returns a const reference to the multiset associated to the iterator
1578
+ //!
1579
+ //! <b>Throws</b>: Nothing.
1580
+ //!
1581
+ //! <b>Complexity</b>: Logarithmic.
1582
+ static const avl_multiset_impl &container_from_iterator(const_iterator it)
1583
+ {
1584
+ return *detail::parent_from_member<avl_multiset_impl, tree_type>
1585
+ ( &tree_type::container_from_iterator(it)
1586
+ , &avl_multiset_impl::tree_);
1587
+ }
1588
+
1589
+ //! <b>Effects</b>: Returns the key_compare object used by the avl_multiset.
1590
+ //!
1591
+ //! <b>Complexity</b>: Constant.
1592
+ //!
1593
+ //! <b>Throws</b>: If key_compare copy-constructor throws.
1594
+ key_compare key_comp() const
1595
+ { return tree_.value_comp(); }
1596
+
1597
+ //! <b>Effects</b>: Returns the value_compare object used by the avl_multiset.
1598
+ //!
1599
+ //! <b>Complexity</b>: Constant.
1600
+ //!
1601
+ //! <b>Throws</b>: If value_compare copy-constructor throws.
1602
+ value_compare value_comp() const
1603
+ { return tree_.value_comp(); }
1604
+
1605
+ //! <b>Effects</b>: Returns true is the container is empty.
1606
+ //!
1607
+ //! <b>Complexity</b>: Constant.
1608
+ //!
1609
+ //! <b>Throws</b>: Nothing.
1610
+ bool empty() const
1611
+ { return tree_.empty(); }
1612
+
1613
+ //! <b>Effects</b>: Returns the number of elements stored in the avl_multiset.
1614
+ //!
1615
+ //! <b>Complexity</b>: Linear to elements contained in *this if,
1616
+ //! constant-time size option is enabled. Constant-time otherwise.
1617
+ //!
1618
+ //! <b>Throws</b>: Nothing.
1619
+ size_type size() const
1620
+ { return tree_.size(); }
1621
+
1622
+ //! <b>Effects</b>: Swaps the contents of two avl_multisets.
1623
+ //!
1624
+ //! <b>Complexity</b>: Constant.
1625
+ //!
1626
+ //! <b>Throws</b>: If the swap() call for the comparison functor
1627
+ //! found using ADL throws. Strong guarantee.
1628
+ void swap(avl_multiset_impl& other)
1629
+ { tree_.swap(other.tree_); }
1630
+
1631
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
1632
+ //! Cloner should yield to nodes equivalent to the original nodes.
1633
+ //!
1634
+ //! <b>Effects</b>: Erases all the elements from *this
1635
+ //! calling Disposer::operator()(pointer), clones all the
1636
+ //! elements from src calling Cloner::operator()(const_reference )
1637
+ //! and inserts them on *this. Copies the predicate from the source container.
1638
+ //!
1639
+ //! If cloner throws, all cloned elements are unlinked and disposed
1640
+ //! calling Disposer::operator()(pointer).
1641
+ //!
1642
+ //! <b>Complexity</b>: Linear to erased plus inserted elements.
1643
+ //!
1644
+ //! <b>Throws</b>: If cloner throws or predicate copy assignment throws. Basic guarantee.
1645
+ template <class Cloner, class Disposer>
1646
+ void clone_from(const avl_multiset_impl &src, Cloner cloner, Disposer disposer)
1647
+ { tree_.clone_from(src.tree_, cloner, disposer); }
1648
+
1649
+ //! <b>Requires</b>: value must be an lvalue
1650
+ //!
1651
+ //! <b>Effects</b>: Inserts value into the avl_multiset.
1652
+ //!
1653
+ //! <b>Returns</b>: An iterator that points to the position where the new
1654
+ //! element was inserted.
1655
+ //!
1656
+ //! <b>Complexity</b>: Average complexity for insert element is at
1657
+ //! most logarithmic.
1658
+ //!
1659
+ //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
1660
+ //!
1661
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
1662
+ //! No copy-constructors are called.
1663
+ iterator insert(reference value)
1664
+ { return tree_.insert_equal(value); }
1665
+
1666
+ //! <b>Requires</b>: value must be an lvalue
1667
+ //!
1668
+ //! <b>Effects</b>: Inserts x into the avl_multiset, using pos as a hint to
1669
+ //! where it will be inserted.
1670
+ //!
1671
+ //! <b>Returns</b>: An iterator that points to the position where the new
1672
+ //! element was inserted.
1673
+ //!
1674
+ //! <b>Complexity</b>: Logarithmic in general, but it is amortized
1675
+ //! constant time if t is inserted immediately before hint.
1676
+ //!
1677
+ //! <b>Throws</b>: If the internal value_compare ordering function throws. Strong guarantee.
1678
+ //!
1679
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
1680
+ //! No copy-constructors are called.
1681
+ iterator insert(const_iterator hint, reference value)
1682
+ { return tree_.insert_equal(hint, value); }
1683
+
1684
+ //! <b>Requires</b>: Dereferencing iterator must yield an lvalue
1685
+ //! of type value_type.
1686
+ //!
1687
+ //! <b>Effects</b>: Inserts a range into the avl_multiset.
1688
+ //!
1689
+ //! <b>Returns</b>: An iterator that points to the position where the new
1690
+ //! element was inserted.
1691
+ //!
1692
+ //! <b>Complexity</b>: Insert range is in general O(N * log(N)), where N is the
1693
+ //! size of the range. However, it is linear in N if the range is already sorted
1694
+ //! by value_comp().
1695
+ //!
1696
+ //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
1697
+ //!
1698
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
1699
+ //! No copy-constructors are called.
1700
+ template<class Iterator>
1701
+ void insert(Iterator b, Iterator e)
1702
+ { tree_.insert_equal(b, e); }
1703
+
1704
+ //! <b>Requires</b>: value must be an lvalue, "pos" must be
1705
+ //! a valid iterator (or end) and must be the succesor of value
1706
+ //! once inserted according to the predicate. "value" must not be equal to any
1707
+ //! inserted key according to the predicate.
1708
+ //!
1709
+ //! <b>Effects</b>: Inserts x into the tree before "pos".
1710
+ //!
1711
+ //! <b>Complexity</b>: Constant time.
1712
+ //!
1713
+ //! <b>Throws</b>: Nothing.
1714
+ //!
1715
+ //! <b>Note</b>: This function does not check preconditions so if "pos" is not
1716
+ //! the successor of "value" or "value" is not unique tree ordering and uniqueness
1717
+ //! invariants will be broken respectively.
1718
+ //! This is a low-level function to be used only for performance reasons
1719
+ //! by advanced users.
1720
+ iterator insert_before(const_iterator pos, reference value)
1721
+ { return tree_.insert_before(pos, value); }
1722
+
1723
+ //! <b>Requires</b>: value must be an lvalue, and it must be greater than
1724
+ //! any inserted key according to the predicate.
1725
+ //!
1726
+ //! <b>Effects</b>: Inserts x into the tree in the last position.
1727
+ //!
1728
+ //! <b>Complexity</b>: Constant time.
1729
+ //!
1730
+ //! <b>Throws</b>: Nothing.
1731
+ //!
1732
+ //! <b>Note</b>: This function does not check preconditions so if value is
1733
+ //! less than or equal to the greatest inserted key tree ordering invariant will be broken.
1734
+ //! This function is slightly more efficient than using "insert_before".
1735
+ //! This is a low-level function to be used only for performance reasons
1736
+ //! by advanced users.
1737
+ void push_back(reference value)
1738
+ { tree_.push_back(value); }
1739
+
1740
+ //! <b>Requires</b>: value must be an lvalue, and it must be less
1741
+ //! than any inserted key according to the predicate.
1742
+ //!
1743
+ //! <b>Effects</b>: Inserts x into the tree in the first position.
1744
+ //!
1745
+ //! <b>Complexity</b>: Constant time.
1746
+ //!
1747
+ //! <b>Throws</b>: Nothing.
1748
+ //!
1749
+ //! <b>Note</b>: This function does not check preconditions so if value is
1750
+ //! greater than or equal to the the mimum inserted key tree ordering or uniqueness
1751
+ //! invariants will be broken.
1752
+ //! This function is slightly more efficient than using "insert_before".
1753
+ //! This is a low-level function to be used only for performance reasons
1754
+ //! by advanced users.
1755
+ void push_front(reference value)
1756
+ { tree_.push_front(value); }
1757
+
1758
+ //! <b>Effects</b>: Erases the element pointed to by pos.
1759
+ //!
1760
+ //! <b>Complexity</b>: Average complexity is constant time.
1761
+ //!
1762
+ //! <b>Returns</b>: An iterator to the element after the erased element.
1763
+ //!
1764
+ //! <b>Throws</b>: Nothing.
1765
+ //!
1766
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
1767
+ //! to the erased elements. No destructors are called.
1768
+ iterator erase(const_iterator i)
1769
+ { return tree_.erase(i); }
1770
+
1771
+ //! <b>Effects</b>: Erases the range pointed to by b end e.
1772
+ //!
1773
+ //! <b>Returns</b>: An iterator to the element after the erased elements.
1774
+ //!
1775
+ //! <b>Complexity</b>: Average complexity for erase range is at most
1776
+ //! O(log(size() + N)), where N is the number of elements in the range.
1777
+ //!
1778
+ //! <b>Throws</b>: Nothing.
1779
+ //!
1780
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
1781
+ //! to the erased elements. No destructors are called.
1782
+ iterator erase(const_iterator b, const_iterator e)
1783
+ { return tree_.erase(b, e); }
1784
+
1785
+ //! <b>Effects</b>: Erases all the elements with the given value.
1786
+ //!
1787
+ //! <b>Returns</b>: The number of erased elements.
1788
+ //!
1789
+ //! <b>Complexity</b>: O(log(size() + this->count(value)).
1790
+ //!
1791
+ //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
1792
+ //!
1793
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
1794
+ //! to the erased elements. No destructors are called.
1795
+ size_type erase(const_reference value)
1796
+ { return tree_.erase(value); }
1797
+
1798
+ //! <b>Effects</b>: Erases all the elements that compare equal with
1799
+ //! the given key and the given comparison functor.
1800
+ //!
1801
+ //! <b>Returns</b>: The number of erased elements.
1802
+ //!
1803
+ //! <b>Complexity</b>: O(log(size() + this->count(key, comp)).
1804
+ //!
1805
+ //! <b>Throws</b>: If comp ordering function throws. Basic guarantee.
1806
+ //!
1807
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
1808
+ //! to the erased elements. No destructors are called.
1809
+ template<class KeyType, class KeyValueCompare>
1810
+ size_type erase(const KeyType& key, KeyValueCompare comp
1811
+ /// @cond
1812
+ , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
1813
+ /// @endcond
1814
+ )
1815
+ { return tree_.erase(key, comp); }
1816
+
1817
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
1818
+ //!
1819
+ //! <b>Returns</b>: An iterator to the element after the erased element.
1820
+ //!
1821
+ //! <b>Effects</b>: Erases the element pointed to by pos.
1822
+ //! Disposer::operator()(pointer) is called for the removed element.
1823
+ //!
1824
+ //! <b>Complexity</b>: Average complexity for erase element is constant time.
1825
+ //!
1826
+ //! <b>Throws</b>: Nothing.
1827
+ //!
1828
+ //! <b>Note</b>: Invalidates the iterators
1829
+ //! to the erased elements.
1830
+ template<class Disposer>
1831
+ iterator erase_and_dispose(const_iterator i, Disposer disposer)
1832
+ { return tree_.erase_and_dispose(i, disposer); }
1833
+
1834
+ #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1835
+ template<class Disposer>
1836
+ iterator erase_and_dispose(iterator i, Disposer disposer)
1837
+ { return this->erase_and_dispose(const_iterator(i), disposer); }
1838
+ #endif
1839
+
1840
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
1841
+ //!
1842
+ //! <b>Returns</b>: An iterator to the element after the erased elements.
1843
+ //!
1844
+ //! <b>Effects</b>: Erases the range pointed to by b end e.
1845
+ //! Disposer::operator()(pointer) is called for the removed elements.
1846
+ //!
1847
+ //! <b>Complexity</b>: Average complexity for erase range is at most
1848
+ //! O(log(size() + N)), where N is the number of elements in the range.
1849
+ //!
1850
+ //! <b>Throws</b>: Nothing.
1851
+ //!
1852
+ //! <b>Note</b>: Invalidates the iterators
1853
+ //! to the erased elements.
1854
+ template<class Disposer>
1855
+ iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer)
1856
+ { return tree_.erase_and_dispose(b, e, disposer); }
1857
+
1858
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
1859
+ //!
1860
+ //! <b>Effects</b>: Erases all the elements with the given value.
1861
+ //! Disposer::operator()(pointer) is called for the removed elements.
1862
+ //!
1863
+ //! <b>Returns</b>: The number of erased elements.
1864
+ //!
1865
+ //! <b>Complexity</b>: O(log(size() + this->count(value)).
1866
+ //!
1867
+ //! <b>Throws</b>: If the internal value_compare ordering function throws. Basic guarantee.
1868
+ //!
1869
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
1870
+ //! to the erased elements. No destructors are called.
1871
+ template<class Disposer>
1872
+ size_type erase_and_dispose(const_reference value, Disposer disposer)
1873
+ { return tree_.erase_and_dispose(value, disposer); }
1874
+
1875
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
1876
+ //!
1877
+ //! <b>Effects</b>: Erases all the elements with the given key.
1878
+ //! according to the comparison functor "comp".
1879
+ //! Disposer::operator()(pointer) is called for the removed elements.
1880
+ //!
1881
+ //! <b>Returns</b>: The number of erased elements.
1882
+ //!
1883
+ //! <b>Complexity</b>: O(log(size() + this->count(key, comp)).
1884
+ //!
1885
+ //! <b>Throws</b>: If comp ordering function throws. Basic guarantee.
1886
+ //!
1887
+ //! <b>Note</b>: Invalidates the iterators
1888
+ //! to the erased elements.
1889
+ template<class KeyType, class KeyValueCompare, class Disposer>
1890
+ size_type erase_and_dispose(const KeyType& key, KeyValueCompare comp, Disposer disposer
1891
+ /// @cond
1892
+ , typename detail::enable_if_c<!detail::is_convertible<KeyValueCompare, const_iterator>::value >::type * = 0
1893
+ /// @endcond
1894
+ )
1895
+ { return tree_.erase_and_dispose(key, comp, disposer); }
1896
+
1897
+ //! <b>Effects</b>: Erases all the elements of the container.
1898
+ //!
1899
+ //! <b>Complexity</b>: Linear to the number of elements on the container.
1900
+ //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
1901
+ //!
1902
+ //! <b>Throws</b>: Nothing.
1903
+ //!
1904
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
1905
+ //! to the erased elements. No destructors are called.
1906
+ void clear()
1907
+ { return tree_.clear(); }
1908
+
1909
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
1910
+ //!
1911
+ //! <b>Effects</b>: Erases all the elements of the container.
1912
+ //!
1913
+ //! <b>Complexity</b>: Linear to the number of elements on the container.
1914
+ //! Disposer::operator()(pointer) is called for the removed elements.
1915
+ //!
1916
+ //! <b>Throws</b>: Nothing.
1917
+ //!
1918
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
1919
+ //! to the erased elements. No destructors are called.
1920
+ template<class Disposer>
1921
+ void clear_and_dispose(Disposer disposer)
1922
+ { return tree_.clear_and_dispose(disposer); }
1923
+
1924
+ //! <b>Effects</b>: Returns the number of contained elements with the given key
1925
+ //!
1926
+ //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
1927
+ //! to number of objects with the given key.
1928
+ //!
1929
+ //! <b>Throws</b>: If the internal value_compare ordering function throws.
1930
+ size_type count(const_reference value) const
1931
+ { return tree_.count(value); }
1932
+
1933
+ //! <b>Effects</b>: Returns the number of contained elements with the same key
1934
+ //! compared with the given comparison functor.
1935
+ //!
1936
+ //! <b>Complexity</b>: Logarithmic to the number of elements contained plus lineal
1937
+ //! to number of objects with the given key.
1938
+ //!
1939
+ //! <b>Throws</b>: If comp ordering function throws.
1940
+ template<class KeyType, class KeyValueCompare>
1941
+ size_type count(const KeyType& key, KeyValueCompare comp) const
1942
+ { return tree_.count(key, comp); }
1943
+
1944
+ //! <b>Effects</b>: Returns an iterator to the first element whose
1945
+ //! key is not less than k or end() if that element does not exist.
1946
+ //!
1947
+ //! <b>Complexity</b>: Logarithmic.
1948
+ //!
1949
+ //! <b>Throws</b>: If the internal value_compare ordering function throws.
1950
+ iterator lower_bound(const_reference value)
1951
+ { return tree_.lower_bound(value); }
1952
+
1953
+ //! <b>Requires</b>: comp must imply the same element order as
1954
+ //! value_compare. Usually key is the part of the value_type
1955
+ //! that is used in the ordering functor.
1956
+ //!
1957
+ //! <b>Effects</b>: Returns an iterator to the first element whose
1958
+ //! key according to the comparison functor is not less than k or
1959
+ //! end() if that element does not exist.
1960
+ //!
1961
+ //! <b>Complexity</b>: Logarithmic.
1962
+ //!
1963
+ //! <b>Throws</b>: If comp ordering function throws.
1964
+ //!
1965
+ //! <b>Note</b>: This function is used when constructing a value_type
1966
+ //! is expensive and the value_type can be compared with a cheaper
1967
+ //! key type. Usually this key is part of the value_type.
1968
+ template<class KeyType, class KeyValueCompare>
1969
+ iterator lower_bound(const KeyType& key, KeyValueCompare comp)
1970
+ { return tree_.lower_bound(key, comp); }
1971
+
1972
+ //! <b>Effects</b>: Returns a const iterator to the first element whose
1973
+ //! key is not less than k or end() if that element does not exist.
1974
+ //!
1975
+ //! <b>Complexity</b>: Logarithmic.
1976
+ //!
1977
+ //! <b>Throws</b>: If the internal value_compare ordering function throws.
1978
+ const_iterator lower_bound(const_reference value) const
1979
+ { return tree_.lower_bound(value); }
1980
+
1981
+ //! <b>Requires</b>: comp must imply the same element order as
1982
+ //! value_compare. Usually key is the part of the value_type
1983
+ //! that is used in the ordering functor.
1984
+ //!
1985
+ //! <b>Effects</b>: Returns a const_iterator to the first element whose
1986
+ //! key according to the comparison functor is not less than k or
1987
+ //! end() if that element does not exist.
1988
+ //!
1989
+ //! <b>Complexity</b>: Logarithmic.
1990
+ //!
1991
+ //! <b>Throws</b>: If comp ordering function throws.
1992
+ //!
1993
+ //! <b>Note</b>: This function is used when constructing a value_type
1994
+ //! is expensive and the value_type can be compared with a cheaper
1995
+ //! key type. Usually this key is part of the value_type.
1996
+ template<class KeyType, class KeyValueCompare>
1997
+ const_iterator lower_bound(const KeyType& key, KeyValueCompare comp) const
1998
+ { return tree_.lower_bound(key, comp); }
1999
+
2000
+ //! <b>Effects</b>: Returns an iterator to the first element whose
2001
+ //! key is greater than k or end() if that element does not exist.
2002
+ //!
2003
+ //! <b>Complexity</b>: Logarithmic.
2004
+ //!
2005
+ //! <b>Throws</b>: If the internal value_compare ordering function throws.
2006
+ iterator upper_bound(const_reference value)
2007
+ { return tree_.upper_bound(value); }
2008
+
2009
+ //! <b>Requires</b>: comp must imply the same element order as
2010
+ //! value_compare. Usually key is the part of the value_type
2011
+ //! that is used in the ordering functor.
2012
+ //!
2013
+ //! <b>Effects</b>: Returns an iterator to the first element whose
2014
+ //! key according to the comparison functor is greater than key or
2015
+ //! end() if that element does not exist.
2016
+ //!
2017
+ //! <b>Complexity</b>: Logarithmic.
2018
+ //!
2019
+ //! <b>Throws</b>: If comp ordering function throws.
2020
+ //!
2021
+ //! <b>Note</b>: This function is used when constructing a value_type
2022
+ //! is expensive and the value_type can be compared with a cheaper
2023
+ //! key type. Usually this key is part of the value_type.
2024
+ template<class KeyType, class KeyValueCompare>
2025
+ iterator upper_bound(const KeyType& key, KeyValueCompare comp)
2026
+ { return tree_.upper_bound(key, comp); }
2027
+
2028
+ //! <b>Effects</b>: Returns an iterator to the first element whose
2029
+ //! key is greater than k or end() if that element does not exist.
2030
+ //!
2031
+ //! <b>Complexity</b>: Logarithmic.
2032
+ //!
2033
+ //! <b>Throws</b>: If the internal value_compare ordering function throws.
2034
+ const_iterator upper_bound(const_reference value) const
2035
+ { return tree_.upper_bound(value); }
2036
+
2037
+ //! <b>Requires</b>: comp must imply the same element order as
2038
+ //! value_compare. Usually key is the part of the value_type
2039
+ //! that is used in the ordering functor.
2040
+ //!
2041
+ //! <b>Effects</b>: Returns a const_iterator to the first element whose
2042
+ //! key according to the comparison functor is greater than key or
2043
+ //! end() if that element does not exist.
2044
+ //!
2045
+ //! <b>Complexity</b>: Logarithmic.
2046
+ //!
2047
+ //! <b>Throws</b>: If comp ordering function throws.
2048
+ //!
2049
+ //! <b>Note</b>: This function is used when constructing a value_type
2050
+ //! is expensive and the value_type can be compared with a cheaper
2051
+ //! key type. Usually this key is part of the value_type.
2052
+ template<class KeyType, class KeyValueCompare>
2053
+ const_iterator upper_bound(const KeyType& key, KeyValueCompare comp) const
2054
+ { return tree_.upper_bound(key, comp); }
2055
+
2056
+ //! <b>Effects</b>: Finds an iterator to the first element whose value is
2057
+ //! "value" or end() if that element does not exist.
2058
+ //!
2059
+ //! <b>Complexity</b>: Logarithmic.
2060
+ //!
2061
+ //! <b>Throws</b>: If the internal value_compare ordering function throws.
2062
+ iterator find(const_reference value)
2063
+ { return tree_.find(value); }
2064
+
2065
+ //! <b>Requires</b>: comp must imply the same element order as
2066
+ //! value_compare. Usually key is the part of the value_type
2067
+ //! that is used in the ordering functor.
2068
+ //!
2069
+ //! <b>Effects</b>: Finds an iterator to the first element whose key is
2070
+ //! "key" according to the comparison functor or end() if that element
2071
+ //! does not exist.
2072
+ //!
2073
+ //! <b>Complexity</b>: Logarithmic.
2074
+ //!
2075
+ //! <b>Throws</b>: If comp ordering function throws.
2076
+ //!
2077
+ //! <b>Note</b>: This function is used when constructing a value_type
2078
+ //! is expensive and the value_type can be compared with a cheaper
2079
+ //! key type. Usually this key is part of the value_type.
2080
+ template<class KeyType, class KeyValueCompare>
2081
+ iterator find(const KeyType& key, KeyValueCompare comp)
2082
+ { return tree_.find(key, comp); }
2083
+
2084
+ //! <b>Effects</b>: Finds a const_iterator to the first element whose value is
2085
+ //! "value" or end() if that element does not exist.
2086
+ //!
2087
+ //! <b>Complexity</b>: Logarithmic.
2088
+ //!
2089
+ //! <b>Throws</b>: If the internal value_compare ordering function throws.
2090
+ const_iterator find(const_reference value) const
2091
+ { return tree_.find(value); }
2092
+
2093
+ //! <b>Requires</b>: comp must imply the same element order as
2094
+ //! value_compare. Usually key is the part of the value_type
2095
+ //! that is used in the ordering functor.
2096
+ //!
2097
+ //! <b>Effects</b>: Finds a const_iterator to the first element whose key is
2098
+ //! "key" according to the comparison functor or end() if that element
2099
+ //! does not exist.
2100
+ //!
2101
+ //! <b>Complexity</b>: Logarithmic.
2102
+ //!
2103
+ //! <b>Throws</b>: If comp ordering function throws.
2104
+ //!
2105
+ //! <b>Note</b>: This function is used when constructing a value_type
2106
+ //! is expensive and the value_type can be compared with a cheaper
2107
+ //! key type. Usually this key is part of the value_type.
2108
+ template<class KeyType, class KeyValueCompare>
2109
+ const_iterator find(const KeyType& key, KeyValueCompare comp) const
2110
+ { return tree_.find(key, comp); }
2111
+
2112
+ //! <b>Effects</b>: Finds a range containing all elements whose key is k or
2113
+ //! an empty range that indicates the position where those elements would be
2114
+ //! if they there is no elements with key k.
2115
+ //!
2116
+ //! <b>Complexity</b>: Logarithmic.
2117
+ //!
2118
+ //! <b>Throws</b>: If the internal value_compare ordering function throws.
2119
+ std::pair<iterator,iterator> equal_range(const_reference value)
2120
+ { return tree_.equal_range(value); }
2121
+
2122
+ //! <b>Requires</b>: comp must imply the same element order as
2123
+ //! value_compare. Usually key is the part of the value_type
2124
+ //! that is used in the ordering functor.
2125
+ //!
2126
+ //! <b>Effects</b>: Finds a range containing all elements whose key is k
2127
+ //! according to the comparison functor or an empty range
2128
+ //! that indicates the position where those elements would be
2129
+ //! if they there is no elements with key k.
2130
+ //!
2131
+ //! <b>Complexity</b>: Logarithmic.
2132
+ //!
2133
+ //! <b>Throws</b>: If comp ordering function throws.
2134
+ //!
2135
+ //! <b>Note</b>: This function is used when constructing a value_type
2136
+ //! is expensive and the value_type can be compared with a cheaper
2137
+ //! key type. Usually this key is part of the value_type.
2138
+ template<class KeyType, class KeyValueCompare>
2139
+ std::pair<iterator,iterator> equal_range(const KeyType& key, KeyValueCompare comp)
2140
+ { return tree_.equal_range(key, comp); }
2141
+
2142
+ //! <b>Effects</b>: Finds a range containing all elements whose key is k or
2143
+ //! an empty range that indicates the position where those elements would be
2144
+ //! if they there is no elements with key k.
2145
+ //!
2146
+ //! <b>Complexity</b>: Logarithmic.
2147
+ //!
2148
+ //! <b>Throws</b>: If the internal value_compare ordering function throws.
2149
+ std::pair<const_iterator, const_iterator>
2150
+ equal_range(const_reference value) const
2151
+ { return tree_.equal_range(value); }
2152
+
2153
+ //! <b>Requires</b>: comp must imply the same element order as
2154
+ //! value_compare. Usually key is the part of the value_type
2155
+ //! that is used in the ordering functor.
2156
+ //!
2157
+ //! <b>Effects</b>: Finds a range containing all elements whose key is k
2158
+ //! according to the comparison functor or an empty range
2159
+ //! that indicates the position where those elements would be
2160
+ //! if they there is no elements with key k.
2161
+ //!
2162
+ //! <b>Complexity</b>: Logarithmic.
2163
+ //!
2164
+ //! <b>Throws</b>: If comp ordering function throws.
2165
+ //!
2166
+ //! <b>Note</b>: This function is used when constructing a value_type
2167
+ //! is expensive and the value_type can be compared with a cheaper
2168
+ //! key type. Usually this key is part of the value_type.
2169
+ template<class KeyType, class KeyValueCompare>
2170
+ std::pair<const_iterator, const_iterator>
2171
+ equal_range(const KeyType& key, KeyValueCompare comp) const
2172
+ { return tree_.equal_range(key, comp); }
2173
+
2174
+ //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
2175
+ //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
2176
+ //!
2177
+ //! <b>Effects</b>: Returns an a pair with the following criteria:
2178
+ //!
2179
+ //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
2180
+ //!
2181
+ //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
2182
+ //!
2183
+ //! <b>Complexity</b>: Logarithmic.
2184
+ //!
2185
+ //! <b>Throws</b>: If the predicate throws.
2186
+ //!
2187
+ //! <b>Note</b>: This function can be more efficient than calling upper_bound
2188
+ //! and lower_bound for lower_value and upper_value.
2189
+ std::pair<iterator,iterator> bounded_range
2190
+ (const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed)
2191
+ { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); }
2192
+
2193
+ //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
2194
+ //! ordering compatible with the strict weak ordering used to create the
2195
+ //! the tree.
2196
+ //! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If
2197
+ //! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be false.
2198
+ //!
2199
+ //! <b>Effects</b>: Returns an a pair with the following criteria:
2200
+ //!
2201
+ //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
2202
+ //!
2203
+ //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
2204
+ //!
2205
+ //! <b>Complexity</b>: Logarithmic.
2206
+ //!
2207
+ //! <b>Throws</b>: If "comp" throws.
2208
+ //!
2209
+ //! <b>Note</b>: This function can be more efficient than calling upper_bound
2210
+ //! and lower_bound for lower_key and upper_key.
2211
+ template<class KeyType, class KeyValueCompare>
2212
+ std::pair<iterator,iterator> bounded_range
2213
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed)
2214
+ { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); }
2215
+
2216
+ //! <b>Requires</b>: 'lower_value' must not be greater than 'upper_value'. If
2217
+ //! 'lower_value' == 'upper_value', ('left_closed' || 'right_closed') must be false.
2218
+ //!
2219
+ //! <b>Effects</b>: Returns an a pair with the following criteria:
2220
+ //!
2221
+ //! first = lower_bound(lower_key) if left_closed, upper_bound(lower_key) otherwise
2222
+ //!
2223
+ //! second = upper_bound(upper_key) if right_closed, lower_bound(upper_key) otherwise
2224
+ //!
2225
+ //! <b>Complexity</b>: Logarithmic.
2226
+ //!
2227
+ //! <b>Throws</b>: If the predicate throws.
2228
+ //!
2229
+ //! <b>Note</b>: This function can be more efficient than calling upper_bound
2230
+ //! and lower_bound for lower_value and upper_value.
2231
+ std::pair<const_iterator, const_iterator>
2232
+ bounded_range(const_reference lower_value, const_reference upper_value, bool left_closed, bool right_closed) const
2233
+ { return tree_.bounded_range(lower_value, upper_value, left_closed, right_closed); }
2234
+
2235
+ //! <b>Requires</b>: KeyValueCompare is a function object that induces a strict weak
2236
+ //! ordering compatible with the strict weak ordering used to create the
2237
+ //! the tree.
2238
+ //! 'lower_key' must not be greater than 'upper_key' according to 'comp'. If
2239
+ //! 'lower_key' == 'upper_key', ('left_closed' || 'right_closed') must be false.
2240
+ //!
2241
+ //! <b>Effects</b>: Returns an a pair with the following criteria:
2242
+ //!
2243
+ //! first = lower_bound(lower_key, comp) if left_closed, upper_bound(lower_key, comp) otherwise
2244
+ //!
2245
+ //! second = upper_bound(upper_key, comp) if right_closed, lower_bound(upper_key, comp) otherwise
2246
+ //!
2247
+ //! <b>Complexity</b>: Logarithmic.
2248
+ //!
2249
+ //! <b>Throws</b>: If "comp" throws.
2250
+ //!
2251
+ //! <b>Note</b>: This function can be more efficient than calling upper_bound
2252
+ //! and lower_bound for lower_key and upper_key.
2253
+ template<class KeyType, class KeyValueCompare>
2254
+ std::pair<const_iterator, const_iterator>
2255
+ bounded_range
2256
+ (const KeyType& lower_key, const KeyType& upper_key, KeyValueCompare comp, bool left_closed, bool right_closed) const
2257
+ { return tree_.bounded_range(lower_key, upper_key, comp, left_closed, right_closed); }
2258
+
2259
+ //! <b>Requires</b>: value must be an lvalue and shall be in a avl_multiset of
2260
+ //! appropriate type. Otherwise the behavior is undefined.
2261
+ //!
2262
+ //! <b>Effects</b>: Returns: a valid iterator i belonging to the avl_multiset
2263
+ //! that points to the value
2264
+ //!
2265
+ //! <b>Complexity</b>: Constant.
2266
+ //!
2267
+ //! <b>Throws</b>: Nothing.
2268
+ //!
2269
+ //! <b>Note</b>: This static function is available only if the <i>value traits</i>
2270
+ //! is stateless.
2271
+ static iterator s_iterator_to(reference value)
2272
+ { return tree_type::s_iterator_to(value); }
2273
+
2274
+ //! <b>Requires</b>: value must be an lvalue and shall be in a avl_multiset of
2275
+ //! appropriate type. Otherwise the behavior is undefined.
2276
+ //!
2277
+ //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
2278
+ //! avl_multiset that points to the value
2279
+ //!
2280
+ //! <b>Complexity</b>: Constant.
2281
+ //!
2282
+ //! <b>Throws</b>: Nothing.
2283
+ //!
2284
+ //! <b>Note</b>: This static function is available only if the <i>value traits</i>
2285
+ //! is stateless.
2286
+ static const_iterator s_iterator_to(const_reference value)
2287
+ { return tree_type::s_iterator_to(value); }
2288
+
2289
+ //! <b>Requires</b>: value must be an lvalue and shall be in a avl_multiset of
2290
+ //! appropriate type. Otherwise the behavior is undefined.
2291
+ //!
2292
+ //! <b>Effects</b>: Returns: a valid iterator i belonging to the avl_multiset
2293
+ //! that points to the value
2294
+ //!
2295
+ //! <b>Complexity</b>: Constant.
2296
+ //!
2297
+ //! <b>Throws</b>: Nothing.
2298
+ iterator iterator_to(reference value)
2299
+ { return tree_.iterator_to(value); }
2300
+
2301
+ //! <b>Requires</b>: value must be an lvalue and shall be in a avl_multiset of
2302
+ //! appropriate type. Otherwise the behavior is undefined.
2303
+ //!
2304
+ //! <b>Effects</b>: Returns: a valid const_iterator i belonging to the
2305
+ //! avl_multiset that points to the value
2306
+ //!
2307
+ //! <b>Complexity</b>: Constant.
2308
+ //!
2309
+ //! <b>Throws</b>: Nothing.
2310
+ const_iterator iterator_to(const_reference value) const
2311
+ { return tree_.iterator_to(value); }
2312
+
2313
+ //! <b>Requires</b>: value shall not be in a avl_multiset/avl_multiset.
2314
+ //!
2315
+ //! <b>Effects</b>: init_node puts the hook of a value in a well-known default
2316
+ //! state.
2317
+ //!
2318
+ //! <b>Throws</b>: Nothing.
2319
+ //!
2320
+ //! <b>Complexity</b>: Constant time.
2321
+ //!
2322
+ //! <b>Note</b>: This function puts the hook in the well-known default state
2323
+ //! used by auto_unlink and safe hooks.
2324
+ static void init_node(reference value)
2325
+ { tree_type::init_node(value); }
2326
+
2327
+ //! <b>Effects</b>: Unlinks the leftmost node from the tree.
2328
+ //!
2329
+ //! <b>Complexity</b>: Average complexity is constant time.
2330
+ //!
2331
+ //! <b>Throws</b>: Nothing.
2332
+ //!
2333
+ //! <b>Notes</b>: This function breaks the tree and the tree can
2334
+ //! only be used for more unlink_leftmost_without_rebalance calls.
2335
+ //! This function is normally used to achieve a step by step
2336
+ //! controlled destruction of the tree.
2337
+ pointer unlink_leftmost_without_rebalance()
2338
+ { return tree_.unlink_leftmost_without_rebalance(); }
2339
+
2340
+ //! <b>Requires</b>: replace_this must be a valid iterator of *this
2341
+ //! and with_this must not be inserted in any tree.
2342
+ //!
2343
+ //! <b>Effects</b>: Replaces replace_this in its position in the
2344
+ //! tree with with_this. The tree does not need to be rebalanced.
2345
+ //!
2346
+ //! <b>Complexity</b>: Constant.
2347
+ //!
2348
+ //! <b>Throws</b>: Nothing.
2349
+ //!
2350
+ //! <b>Note</b>: This function will break container ordering invariants if
2351
+ //! with_this is not equivalent to *replace_this according to the
2352
+ //! ordering rules. This function is faster than erasing and inserting
2353
+ //! the node, since no rebalancing or comparison is needed.
2354
+ void replace_node(iterator replace_this, reference with_this)
2355
+ { tree_.replace_node(replace_this, with_this); }
2356
+
2357
+ /// @cond
2358
+ friend bool operator==(const avl_multiset_impl &x, const avl_multiset_impl &y)
2359
+ { return x.tree_ == y.tree_; }
2360
+
2361
+ friend bool operator<(const avl_multiset_impl &x, const avl_multiset_impl &y)
2362
+ { return x.tree_ < y.tree_; }
2363
+ /// @endcond
2364
+ };
2365
+
2366
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2367
+ template<class T, class ...Options>
2368
+ #else
2369
+ template<class Config>
2370
+ #endif
2371
+ inline bool operator!=
2372
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2373
+ (const avl_multiset_impl<T, Options...> &x, const avl_multiset_impl<T, Options...> &y)
2374
+ #else
2375
+ (const avl_multiset_impl<Config> &x, const avl_multiset_impl<Config> &y)
2376
+ #endif
2377
+ { return !(x == y); }
2378
+
2379
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2380
+ template<class T, class ...Options>
2381
+ #else
2382
+ template<class Config>
2383
+ #endif
2384
+ inline bool operator>
2385
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2386
+ (const avl_multiset_impl<T, Options...> &x, const avl_multiset_impl<T, Options...> &y)
2387
+ #else
2388
+ (const avl_multiset_impl<Config> &x, const avl_multiset_impl<Config> &y)
2389
+ #endif
2390
+ { return y < x; }
2391
+
2392
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2393
+ template<class T, class ...Options>
2394
+ #else
2395
+ template<class Config>
2396
+ #endif
2397
+ inline bool operator<=
2398
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2399
+ (const avl_multiset_impl<T, Options...> &x, const avl_multiset_impl<T, Options...> &y)
2400
+ #else
2401
+ (const avl_multiset_impl<Config> &x, const avl_multiset_impl<Config> &y)
2402
+ #endif
2403
+ { return !(y < x); }
2404
+
2405
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2406
+ template<class T, class ...Options>
2407
+ #else
2408
+ template<class Config>
2409
+ #endif
2410
+ inline bool operator>=
2411
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2412
+ (const avl_multiset_impl<T, Options...> &x, const avl_multiset_impl<T, Options...> &y)
2413
+ #else
2414
+ (const avl_multiset_impl<Config> &x, const avl_multiset_impl<Config> &y)
2415
+ #endif
2416
+ { return !(x < y); }
2417
+
2418
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2419
+ template<class T, class ...Options>
2420
+ #else
2421
+ template<class Config>
2422
+ #endif
2423
+ inline void swap
2424
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2425
+ (avl_multiset_impl<T, Options...> &x, avl_multiset_impl<T, Options...> &y)
2426
+ #else
2427
+ (avl_multiset_impl<Config> &x, avl_multiset_impl<Config> &y)
2428
+ #endif
2429
+ { x.swap(y); }
2430
+
2431
+ //! Helper metafunction to define a \c avl_multiset that yields to the same type when the
2432
+ //! same options (either explicitly or implicitly) are used.
2433
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
2434
+ template<class T, class ...Options>
2435
+ #else
2436
+ template<class T, class O1 = none, class O2 = none
2437
+ , class O3 = none, class O4 = none>
2438
+ #endif
2439
+ struct make_avl_multiset
2440
+ {
2441
+ /// @cond
2442
+ typedef avl_multiset_impl
2443
+ < typename make_avltree_opt
2444
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
2445
+ <T, O1, O2, O3, O4>
2446
+ #else
2447
+ <T, Options...>
2448
+ #endif
2449
+ ::type
2450
+ > implementation_defined;
2451
+ /// @endcond
2452
+ typedef implementation_defined type;
2453
+ };
2454
+
2455
+ #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
2456
+
2457
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
2458
+ template<class T, class O1, class O2, class O3, class O4>
2459
+ #else
2460
+ template<class T, class ...Options>
2461
+ #endif
2462
+ class avl_multiset
2463
+ : public make_avl_multiset<T,
2464
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
2465
+ O1, O2, O3, O4
2466
+ #else
2467
+ Options...
2468
+ #endif
2469
+ >::type
2470
+ {
2471
+ typedef typename make_avl_multiset
2472
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
2473
+ <T, O1, O2, O3, O4>
2474
+ #else
2475
+ <T, Options...>
2476
+ #endif
2477
+ ::type Base;
2478
+
2479
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(avl_multiset)
2480
+ public:
2481
+ typedef typename Base::value_compare value_compare;
2482
+ typedef typename Base::value_traits value_traits;
2483
+ typedef typename Base::iterator iterator;
2484
+ typedef typename Base::const_iterator const_iterator;
2485
+
2486
+ //Assert if passed value traits are compatible with the type
2487
+ BOOST_STATIC_ASSERT((detail::is_same<typename value_traits::value_type, T>::value));
2488
+
2489
+ avl_multiset( const value_compare &cmp = value_compare()
2490
+ , const value_traits &v_traits = value_traits())
2491
+ : Base(cmp, v_traits)
2492
+ {}
2493
+
2494
+ template<class Iterator>
2495
+ avl_multiset( Iterator b, Iterator e
2496
+ , const value_compare &cmp = value_compare()
2497
+ , const value_traits &v_traits = value_traits())
2498
+ : Base(b, e, cmp, v_traits)
2499
+ {}
2500
+
2501
+ avl_multiset(BOOST_RV_REF(avl_multiset) x)
2502
+ : Base(::boost::move(static_cast<Base&>(x)))
2503
+ {}
2504
+
2505
+ avl_multiset& operator=(BOOST_RV_REF(avl_multiset) x)
2506
+ { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
2507
+
2508
+ static avl_multiset &container_from_end_iterator(iterator end_iterator)
2509
+ { return static_cast<avl_multiset &>(Base::container_from_end_iterator(end_iterator)); }
2510
+
2511
+ static const avl_multiset &container_from_end_iterator(const_iterator end_iterator)
2512
+ { return static_cast<const avl_multiset &>(Base::container_from_end_iterator(end_iterator)); }
2513
+
2514
+ static avl_multiset &container_from_iterator(iterator end_iterator)
2515
+ { return static_cast<avl_multiset &>(Base::container_from_iterator(end_iterator)); }
2516
+
2517
+ static const avl_multiset &container_from_iterator(const_iterator end_iterator)
2518
+ { return static_cast<const avl_multiset &>(Base::container_from_iterator(end_iterator)); }
2519
+ };
2520
+
2521
+ #endif
2522
+
2523
+ } //namespace intrusive
2524
+ } //namespace boost
2525
+
2526
+ #include <boost/intrusive/detail/config_end.hpp>
2527
+
2528
+ #endif //BOOST_INTRUSIVE_AVL_SET_HPP