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,327 @@
1
+ /////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // (C) Copyright Olaf Krzikalla 2004-2006.
4
+ // (C) Copyright Ion Gaztanaga 2006-2012
5
+ //
6
+ // Distributed under the Boost Software License, Version 1.0.
7
+ // (See accompanying file LICENSE_1_0.txt or copy at
8
+ // http://www.boost.org/LICENSE_1_0.txt)
9
+ //
10
+ // See http://www.boost.org/libs/intrusive for documentation.
11
+ //
12
+ /////////////////////////////////////////////////////////////////////////////
13
+
14
+ #ifndef BOOST_INTRUSIVE_LINEAR_SLIST_ALGORITHMS_HPP
15
+ #define BOOST_INTRUSIVE_LINEAR_SLIST_ALGORITHMS_HPP
16
+
17
+ #include <boost/intrusive/detail/config_begin.hpp>
18
+ #include <boost/intrusive/intrusive_fwd.hpp>
19
+ #include <boost/intrusive/detail/common_slist_algorithms.hpp>
20
+ #include <cstddef>
21
+ #include <utility>
22
+
23
+ namespace boost {
24
+ namespace intrusive {
25
+
26
+ //! linear_slist_algorithms provides basic algorithms to manipulate nodes
27
+ //! forming a linear singly linked list.
28
+ //!
29
+ //! linear_slist_algorithms is configured with a NodeTraits class, which encapsulates the
30
+ //! information about the node to be manipulated. NodeTraits must support the
31
+ //! following interface:
32
+ //!
33
+ //! <b>Typedefs</b>:
34
+ //!
35
+ //! <tt>node</tt>: The type of the node that forms the linear list
36
+ //!
37
+ //! <tt>node_ptr</tt>: A pointer to a node
38
+ //!
39
+ //! <tt>const_node_ptr</tt>: A pointer to a const node
40
+ //!
41
+ //! <b>Static functions</b>:
42
+ //!
43
+ //! <tt>static node_ptr get_next(const_node_ptr n);</tt>
44
+ //!
45
+ //! <tt>static void set_next(node_ptr n, node_ptr next);</tt>
46
+ template<class NodeTraits>
47
+ class linear_slist_algorithms
48
+ /// @cond
49
+ : public detail::common_slist_algorithms<NodeTraits>
50
+ /// @endcond
51
+ {
52
+ /// @cond
53
+ typedef detail::common_slist_algorithms<NodeTraits> base_t;
54
+ /// @endcond
55
+ public:
56
+ typedef typename NodeTraits::node node;
57
+ typedef typename NodeTraits::node_ptr node_ptr;
58
+ typedef typename NodeTraits::const_node_ptr const_node_ptr;
59
+ typedef NodeTraits node_traits;
60
+
61
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
62
+
63
+ //! <b>Effects</b>: Constructs an non-used list element, putting the next
64
+ //! pointer to null:
65
+ //! <tt>NodeTraits::get_next(this_node) == node_ptr()</tt>
66
+ //!
67
+ //! <b>Complexity</b>: Constant
68
+ //!
69
+ //! <b>Throws</b>: Nothing.
70
+ static void init(const node_ptr & this_node);
71
+
72
+ //! <b>Requires</b>: this_node must be in a circular list or be an empty circular list.
73
+ //!
74
+ //! <b>Effects</b>: Returns true is "this_node" is the only node of a circular list:
75
+ //! or it's a not inserted node:
76
+ //! <tt>return node_ptr() == NodeTraits::get_next(this_node) || NodeTraits::get_next(this_node) == this_node</tt>
77
+ //!
78
+ //! <b>Complexity</b>: Constant
79
+ //!
80
+ //! <b>Throws</b>: Nothing.
81
+ static bool unique(const_node_ptr this_node);
82
+
83
+ //! <b>Effects</b>: Returns true is "this_node" has the same state as if
84
+ //! it was inited using "init(node_ptr)"
85
+ //!
86
+ //! <b>Complexity</b>: Constant
87
+ //!
88
+ //! <b>Throws</b>: Nothing.
89
+ static bool inited(const_node_ptr this_node);
90
+
91
+ //! <b>Requires</b>: prev_node must be in a circular list or be an empty circular list.
92
+ //!
93
+ //! <b>Effects</b>: Unlinks the next node of prev_node from the circular list.
94
+ //!
95
+ //! <b>Complexity</b>: Constant
96
+ //!
97
+ //! <b>Throws</b>: Nothing.
98
+ static void unlink_after(const node_ptr & prev_node);
99
+
100
+ //! <b>Requires</b>: prev_node and last_node must be in a circular list
101
+ //! or be an empty circular list.
102
+ //!
103
+ //! <b>Effects</b>: Unlinks the range (prev_node, last_node) from the linear list.
104
+ //!
105
+ //! <b>Complexity</b>: Constant
106
+ //!
107
+ //! <b>Throws</b>: Nothing.
108
+ static void unlink_after(const node_ptr & prev_node, const node_ptr & last_node);
109
+
110
+ //! <b>Requires</b>: prev_node must be a node of a linear list.
111
+ //!
112
+ //! <b>Effects</b>: Links this_node after prev_node in the linear list.
113
+ //!
114
+ //! <b>Complexity</b>: Constant
115
+ //!
116
+ //! <b>Throws</b>: Nothing.
117
+ static void link_after(const node_ptr & prev_node, const node_ptr & this_node);
118
+
119
+ //! <b>Requires</b>: b and e must be nodes of the same linear list or an empty range.
120
+ //! and p must be a node of a different linear list.
121
+ //!
122
+ //! <b>Effects</b>: Removes the nodes from (b, e] range from their linear list and inserts
123
+ //! them after p in p's linear list.
124
+ //!
125
+ //! <b>Complexity</b>: Constant
126
+ //!
127
+ //! <b>Throws</b>: Nothing.
128
+ static void transfer_after(const node_ptr & p, const node_ptr & b, const node_ptr & e);
129
+
130
+ #endif //#if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
131
+
132
+ //! <b>Effects</b>: Constructs an empty list, making this_node the only
133
+ //! node of the circular list:
134
+ //! <tt>NodeTraits::get_next(this_node) == this_node</tt>.
135
+ //!
136
+ //! <b>Complexity</b>: Constant
137
+ //!
138
+ //! <b>Throws</b>: Nothing.
139
+ static void init_header(const node_ptr & this_node)
140
+ { NodeTraits::set_next(this_node, node_ptr ()); }
141
+
142
+ //! <b>Requires</b>: this_node and prev_init_node must be in the same linear list.
143
+ //!
144
+ //! <b>Effects</b>: Returns the previous node of this_node in the linear list starting.
145
+ //! the search from prev_init_node. The first node checked for equality
146
+ //! is NodeTraits::get_next(prev_init_node).
147
+ //!
148
+ //! <b>Complexity</b>: Linear to the number of elements between prev_init_node and this_node.
149
+ //!
150
+ //! <b>Throws</b>: Nothing.
151
+ static node_ptr get_previous_node(const node_ptr & prev_init_node, const node_ptr & this_node)
152
+ { return base_t::get_previous_node(prev_init_node, this_node); }
153
+
154
+ //! <b>Requires</b>: this_node must be in a linear list or be an empty linear list.
155
+ //!
156
+ //! <b>Effects</b>: Returns the number of nodes in a linear list. If the linear list
157
+ //! is empty, returns 1.
158
+ //!
159
+ //! <b>Complexity</b>: Linear
160
+ //!
161
+ //! <b>Throws</b>: Nothing.
162
+ static std::size_t count(const const_node_ptr & this_node)
163
+ {
164
+ std::size_t result = 0;
165
+ const_node_ptr p = this_node;
166
+ do{
167
+ p = NodeTraits::get_next(p);
168
+ ++result;
169
+ } while (p);
170
+ return result;
171
+ }
172
+
173
+ //! <b>Requires</b>: this_node and other_node must be nodes inserted
174
+ //! in linear lists or be empty linear lists.
175
+ //!
176
+ //! <b>Effects</b>: Moves all the nodes previously chained after this_node after other_node
177
+ //! and vice-versa.
178
+ //!
179
+ //! <b>Complexity</b>: Constant
180
+ //!
181
+ //! <b>Throws</b>: Nothing.
182
+ static void swap_trailing_nodes(const node_ptr & this_node, const node_ptr & other_node)
183
+ {
184
+ node_ptr this_nxt = NodeTraits::get_next(this_node);
185
+ node_ptr other_nxt = NodeTraits::get_next(other_node);
186
+ NodeTraits::set_next(this_node, other_nxt);
187
+ NodeTraits::set_next(other_node, this_nxt);
188
+ }
189
+
190
+ //! <b>Effects</b>: Reverses the order of elements in the list.
191
+ //!
192
+ //! <b>Returns</b>: The new first node of the list.
193
+ //!
194
+ //! <b>Throws</b>: Nothing.
195
+ //!
196
+ //! <b>Complexity</b>: This function is linear to the contained elements.
197
+ static node_ptr reverse(const node_ptr & p)
198
+ {
199
+ if(!p) return node_ptr();
200
+ node_ptr i = NodeTraits::get_next(p);
201
+ node_ptr first(p);
202
+ while(i){
203
+ node_ptr nxti(NodeTraits::get_next(i));
204
+ base_t::unlink_after(p);
205
+ NodeTraits::set_next(i, first);
206
+ first = i;
207
+ i = nxti;
208
+ }
209
+ return first;
210
+ }
211
+
212
+ //! <b>Effects</b>: Moves the first n nodes starting at p to the end of the list.
213
+ //!
214
+ //! <b>Returns</b>: A pair containing the new first and last node of the list or
215
+ //! if there has been any movement, a null pair if n leads to no movement.
216
+ //!
217
+ //! <b>Throws</b>: Nothing.
218
+ //!
219
+ //! <b>Complexity</b>: Linear to the number of elements plus the number moved positions.
220
+ static std::pair<node_ptr, node_ptr> move_first_n_backwards(const node_ptr & p, std::size_t n)
221
+ {
222
+ std::pair<node_ptr, node_ptr> ret;
223
+ //Null shift, or count() == 0 or 1, nothing to do
224
+ if(!n || !p || !NodeTraits::get_next(p)){
225
+ return ret;
226
+ }
227
+
228
+ node_ptr first = p;
229
+ bool end_found = false;
230
+ node_ptr new_last = node_ptr();
231
+ node_ptr old_last = node_ptr();
232
+
233
+ //Now find the new last node according to the shift count.
234
+ //If we find 0 before finding the new last node
235
+ //unlink p, shortcut the search now that we know the size of the list
236
+ //and continue.
237
+ for(std::size_t i = 1; i <= n; ++i){
238
+ new_last = first;
239
+ first = NodeTraits::get_next(first);
240
+ if(first == node_ptr()){
241
+ //Shortcut the shift with the modulo of the size of the list
242
+ n %= i;
243
+ if(!n) return ret;
244
+ old_last = new_last;
245
+ i = 0;
246
+ //Unlink p and continue the new first node search
247
+ first = p;
248
+ //unlink_after(new_last);
249
+ end_found = true;
250
+ }
251
+ }
252
+
253
+ //If the p has not been found in the previous loop, find it
254
+ //starting in the new first node and unlink it
255
+ if(!end_found){
256
+ old_last = base_t::get_previous_node(first, node_ptr());
257
+ }
258
+
259
+ //Now link p after the new last node
260
+ NodeTraits::set_next(old_last, p);
261
+ NodeTraits::set_next(new_last, node_ptr());
262
+ ret.first = first;
263
+ ret.second = new_last;
264
+ return ret;
265
+ }
266
+
267
+ //! <b>Effects</b>: Moves the first n nodes starting at p to the beginning of the list.
268
+ //!
269
+ //! <b>Returns</b>: A pair containing the new first and last node of the list or
270
+ //! if there has been any movement, a null pair if n leads to no movement.
271
+ //!
272
+ //! <b>Throws</b>: Nothing.
273
+ //!
274
+ //! <b>Complexity</b>: Linear to the number of elements plus the number moved positions.
275
+ static std::pair<node_ptr, node_ptr> move_first_n_forward(const node_ptr & p, std::size_t n)
276
+ {
277
+ std::pair<node_ptr, node_ptr> ret;
278
+ //Null shift, or count() == 0 or 1, nothing to do
279
+ if(!n || !p || !NodeTraits::get_next(p))
280
+ return ret;
281
+
282
+ node_ptr first = p;
283
+
284
+ //Iterate until p is found to know where the current last node is.
285
+ //If the shift count is less than the size of the list, we can also obtain
286
+ //the position of the new last node after the shift.
287
+ node_ptr old_last(first), next_to_it, new_last(p);
288
+ std::size_t distance = 1;
289
+ while(!!(next_to_it = node_traits::get_next(old_last))){
290
+ if(distance++ > n)
291
+ new_last = node_traits::get_next(new_last);
292
+ old_last = next_to_it;
293
+ }
294
+ //If the shift was bigger or equal than the size, obtain the equivalent
295
+ //forward shifts and find the new last node.
296
+ if(distance <= n){
297
+ //Now find the equivalent forward shifts.
298
+ //Shortcut the shift with the modulo of the size of the list
299
+ std::size_t new_before_last_pos = (distance - (n % distance))% distance;
300
+ //If the shift is a multiple of the size there is nothing to do
301
+ if(!new_before_last_pos)
302
+ return ret;
303
+
304
+ for( new_last = p
305
+ ; --new_before_last_pos
306
+ ; new_last = node_traits::get_next(new_last)){
307
+ //empty
308
+ }
309
+ }
310
+
311
+ //Get the first new node
312
+ node_ptr new_first(node_traits::get_next(new_last));
313
+ //Now put the old beginning after the old end
314
+ NodeTraits::set_next(old_last, p);
315
+ NodeTraits::set_next(new_last, node_ptr());
316
+ ret.first = new_first;
317
+ ret.second = new_last;
318
+ return ret;
319
+ }
320
+ };
321
+
322
+ } //namespace intrusive
323
+ } //namespace boost
324
+
325
+ #include <boost/intrusive/detail/config_end.hpp>
326
+
327
+ #endif //BOOST_INTRUSIVE_LINEAR_SLIST_ALGORITHMS_HPP
@@ -0,0 +1,46 @@
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_VALUE_LINK_TYPE_HPP
14
+ #define BOOST_INTRUSIVE_VALUE_LINK_TYPE_HPP
15
+
16
+ namespace boost {
17
+ namespace intrusive {
18
+
19
+ //!This enumeration defines the type of value_traits that can be defined
20
+ //!for Boost.Intrusive containers
21
+ enum link_mode_type{
22
+ //!If this linking policy is specified in a value_traits class
23
+ //!as the link_mode, containers
24
+ //!configured with such value_traits won't set the hooks
25
+ //!of the erased values to a default state. Containers also won't
26
+ //!check that the hooks of the new values are default initialized.
27
+ normal_link,
28
+
29
+ //!If this linking policy is specified in a value_traits class
30
+ //!as the link_mode, containers
31
+ //!configured with such value_traits will set the hooks
32
+ //!of the erased values to a default state. Containers also will
33
+ //!check that the hooks of the new values are default initialized.
34
+ safe_link,
35
+
36
+ //!Same as "safe_link" but the user type is an auto-unlink
37
+ //!type, so the containers with constant-time size features won't be
38
+ //!compatible with value_traits configured with this policy.
39
+ //!Containers also know that the a value can be silently erased from
40
+ //!the container without using any function provided by the containers.
41
+ auto_unlink
42
+ };
43
+ } //namespace intrusive
44
+ } //namespace boost
45
+
46
+ #endif //BOOST_INTRUSIVE_VALUE_LINK_TYPE_HPP
@@ -0,0 +1,1525 @@
1
+ /////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // (C) Copyright Olaf Krzikalla 2004-2006.
4
+ // (C) Copyright Ion Gaztanaga 2006-2012
5
+ //
6
+ // Distributed under the Boost Software License, Version 1.0.
7
+ // (See accompanying file LICENSE_1_0.txt or copy at
8
+ // http://www.boost.org/LICENSE_1_0.txt)
9
+ //
10
+ // See http://www.boost.org/libs/intrusive for documentation.
11
+ //
12
+ /////////////////////////////////////////////////////////////////////////////
13
+
14
+ #ifndef BOOST_INTRUSIVE_LIST_HPP
15
+ #define BOOST_INTRUSIVE_LIST_HPP
16
+
17
+ #include <boost/intrusive/detail/config_begin.hpp>
18
+ #include <boost/intrusive/detail/assert.hpp>
19
+ #include <boost/intrusive/intrusive_fwd.hpp>
20
+ #include <boost/intrusive/list_hook.hpp>
21
+ #include <boost/intrusive/circular_list_algorithms.hpp>
22
+ #include <boost/intrusive/pointer_traits.hpp>
23
+ #include <boost/intrusive/detail/clear_on_destructor_base.hpp>
24
+ #include <boost/intrusive/detail/mpl.hpp>
25
+ #include <boost/intrusive/link_mode.hpp>
26
+ #include <boost/static_assert.hpp>
27
+ #include <boost/intrusive/options.hpp>
28
+ #include <boost/intrusive/pointer_traits.hpp>
29
+ #include <boost/intrusive/detail/utilities.hpp>
30
+ #include <iterator>
31
+ #include <algorithm>
32
+ #include <functional>
33
+ #include <cstddef>
34
+ #include <boost/move/move.hpp>
35
+
36
+ namespace boost {
37
+ namespace intrusive {
38
+
39
+ /// @cond
40
+
41
+ template <class ValueTraits, class SizeType, bool ConstantTimeSize>
42
+ struct listopt
43
+ {
44
+ typedef ValueTraits value_traits;
45
+ typedef SizeType size_type;
46
+ static const bool constant_time_size = ConstantTimeSize;
47
+ };
48
+
49
+
50
+ template <class T>
51
+ struct list_defaults
52
+ : pack_options
53
+ < none
54
+ , base_hook<detail::default_list_hook>
55
+ , constant_time_size<true>
56
+ , size_type<std::size_t>
57
+ >::type
58
+ {};
59
+
60
+ /// @endcond
61
+
62
+ //! The class template list is an intrusive container that mimics most of the
63
+ //! interface of std::list as described in the C++ standard.
64
+ //!
65
+ //! The template parameter \c T is the type to be managed by the container.
66
+ //! The user can specify additional options and if no options are provided
67
+ //! default options are used.
68
+ //!
69
+ //! The container supports the following options:
70
+ //! \c base_hook<>/member_hook<>/value_traits<>,
71
+ //! \c constant_time_size<> and \c size_type<>.
72
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
73
+ template<class T, class ...Options>
74
+ #else
75
+ template<class Config>
76
+ #endif
77
+ class list_impl
78
+ : private detail::clear_on_destructor_base< list_impl<Config> >
79
+ {
80
+ template<class C> friend class detail::clear_on_destructor_base;
81
+ //Public typedefs
82
+ public:
83
+ typedef typename Config::value_traits value_traits;
84
+ /// @cond
85
+ static const bool external_value_traits =
86
+ detail::external_value_traits_bool_is_true<value_traits>::value;
87
+ typedef typename detail::eval_if_c
88
+ < external_value_traits
89
+ , detail::eval_value_traits<value_traits>
90
+ , detail::identity<value_traits>
91
+ >::type real_value_traits;
92
+ /// @endcond
93
+ typedef typename real_value_traits::pointer pointer;
94
+ typedef typename real_value_traits::const_pointer const_pointer;
95
+ typedef typename pointer_traits<pointer>::element_type value_type;
96
+ typedef typename pointer_traits<pointer>::reference reference;
97
+ typedef typename pointer_traits<const_pointer>::reference const_reference;
98
+ typedef typename pointer_traits<pointer>::difference_type difference_type;
99
+ typedef typename Config::size_type size_type;
100
+ typedef list_iterator<list_impl, false> iterator;
101
+ typedef list_iterator<list_impl, true> const_iterator;
102
+ typedef boost::intrusive::detail::reverse_iterator<iterator> reverse_iterator;
103
+ typedef boost::intrusive::detail::reverse_iterator<const_iterator>const_reverse_iterator;
104
+ typedef typename real_value_traits::node_traits node_traits;
105
+ typedef typename node_traits::node node;
106
+ typedef typename node_traits::node_ptr node_ptr;
107
+ typedef typename node_traits::const_node_ptr const_node_ptr;
108
+ typedef circular_list_algorithms<node_traits> node_algorithms;
109
+
110
+ static const bool constant_time_size = Config::constant_time_size;
111
+ static const bool stateful_value_traits = detail::is_stateful_value_traits<real_value_traits>::value;
112
+
113
+ /// @cond
114
+
115
+ private:
116
+ typedef detail::size_holder<constant_time_size, size_type> size_traits;
117
+
118
+ //noncopyable
119
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(list_impl)
120
+
121
+ enum { safemode_or_autounlink =
122
+ (int)real_value_traits::link_mode == (int)auto_unlink ||
123
+ (int)real_value_traits::link_mode == (int)safe_link };
124
+
125
+ //Constant-time size is incompatible with auto-unlink hooks!
126
+ BOOST_STATIC_ASSERT(!(constant_time_size &&
127
+ ((int)real_value_traits::link_mode == (int)auto_unlink)
128
+ ));
129
+
130
+ //Const cast emulation for smart pointers
131
+ static node_ptr uncast(const const_node_ptr & ptr)
132
+ { return pointer_traits<node_ptr>::const_cast_from(ptr); }
133
+
134
+ node_ptr get_root_node()
135
+ { return pointer_traits<node_ptr>::pointer_to(data_.root_plus_size_.root_); }
136
+
137
+ const_node_ptr get_root_node() const
138
+ { return pointer_traits<const_node_ptr>::pointer_to(data_.root_plus_size_.root_); }
139
+
140
+ struct root_plus_size : public size_traits
141
+ {
142
+ node root_;
143
+ };
144
+
145
+ struct data_t : public value_traits
146
+ {
147
+ typedef typename list_impl::value_traits value_traits;
148
+ data_t(const value_traits &val_traits)
149
+ : value_traits(val_traits)
150
+ {}
151
+
152
+ root_plus_size root_plus_size_;
153
+ } data_;
154
+
155
+ size_traits &priv_size_traits()
156
+ { return data_.root_plus_size_; }
157
+
158
+ const size_traits &priv_size_traits() const
159
+ { return data_.root_plus_size_; }
160
+
161
+ const real_value_traits &get_real_value_traits(detail::bool_<false>) const
162
+ { return data_; }
163
+
164
+ const real_value_traits &get_real_value_traits(detail::bool_<true>) const
165
+ { return data_.get_value_traits(*this); }
166
+
167
+ real_value_traits &get_real_value_traits(detail::bool_<false>)
168
+ { return data_; }
169
+
170
+ real_value_traits &get_real_value_traits(detail::bool_<true>)
171
+ { return data_.get_value_traits(*this); }
172
+
173
+ const value_traits &priv_value_traits() const
174
+ { return data_; }
175
+
176
+ value_traits &priv_value_traits()
177
+ { return data_; }
178
+
179
+ protected:
180
+ node &prot_root_node()
181
+ { return data_.root_plus_size_.root_; }
182
+
183
+ node const &prot_root_node() const
184
+ { return data_.root_plus_size_.root_; }
185
+
186
+ void prot_set_size(size_type s)
187
+ { data_.root_plus_size_.set_size(s); }
188
+
189
+ /// @endcond
190
+
191
+ public:
192
+
193
+ const real_value_traits &get_real_value_traits() const
194
+ { return this->get_real_value_traits(detail::bool_<external_value_traits>()); }
195
+
196
+ real_value_traits &get_real_value_traits()
197
+ { return this->get_real_value_traits(detail::bool_<external_value_traits>()); }
198
+
199
+ //! <b>Effects</b>: constructs an empty list.
200
+ //!
201
+ //! <b>Complexity</b>: Constant
202
+ //!
203
+ //! <b>Throws</b>: If real_value_traits::node_traits::node
204
+ //! constructor throws (this does not happen with predefined Boost.Intrusive hooks).
205
+ explicit list_impl(const value_traits &v_traits = value_traits())
206
+ : data_(v_traits)
207
+ {
208
+ this->priv_size_traits().set_size(size_type(0));
209
+ node_algorithms::init_header(this->get_root_node());
210
+ }
211
+
212
+ //! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
213
+ //!
214
+ //! <b>Effects</b>: Constructs a list equal to the range [first,last).
215
+ //!
216
+ //! <b>Complexity</b>: Linear in std::distance(b, e). No copy constructors are called.
217
+ //!
218
+ //! <b>Throws</b>: If real_value_traits::node_traits::node
219
+ //! constructor throws (this does not happen with predefined Boost.Intrusive hooks).
220
+ template<class Iterator>
221
+ list_impl(Iterator b, Iterator e, const value_traits &v_traits = value_traits())
222
+ : data_(v_traits)
223
+ {
224
+ this->priv_size_traits().set_size(size_type(0));
225
+ node_algorithms::init_header(this->get_root_node());
226
+ this->insert(this->cend(), b, e);
227
+ }
228
+
229
+ //! <b>Effects</b>: to-do
230
+ //!
231
+ list_impl(BOOST_RV_REF(list_impl) x)
232
+ : data_(::boost::move(x.priv_value_traits()))
233
+ {
234
+ this->priv_size_traits().set_size(size_type(0));
235
+ node_algorithms::init_header(this->get_root_node());
236
+ this->swap(x);
237
+ }
238
+
239
+ //! <b>Effects</b>: to-do
240
+ //!
241
+ list_impl& operator=(BOOST_RV_REF(list_impl) x)
242
+ { this->swap(x); return *this; }
243
+
244
+ //! <b>Effects</b>: If it's not a safe-mode or an auto-unlink value_type
245
+ //! the destructor does nothing
246
+ //! (ie. no code is generated). Otherwise it detaches all elements from this.
247
+ //! In this case the objects in the list are not deleted (i.e. no destructors
248
+ //! are called), but the hooks according to the ValueTraits template parameter
249
+ //! are set to their default value.
250
+ //!
251
+ //! <b>Complexity</b>: Linear to the number of elements in the list, if
252
+ //! it's a safe-mode or auto-unlink value . Otherwise constant.
253
+ ~list_impl()
254
+ {}
255
+
256
+ //! <b>Requires</b>: value must be an lvalue.
257
+ //!
258
+ //! <b>Effects</b>: Inserts the value in the back of the list.
259
+ //! No copy constructors are called.
260
+ //!
261
+ //! <b>Throws</b>: Nothing.
262
+ //!
263
+ //! <b>Complexity</b>: Constant.
264
+ //!
265
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
266
+ void push_back(reference value)
267
+ {
268
+ node_ptr to_insert = get_real_value_traits().to_node_ptr(value);
269
+ if(safemode_or_autounlink)
270
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::inited(to_insert));
271
+ node_algorithms::link_before(this->get_root_node(), to_insert);
272
+ this->priv_size_traits().increment();
273
+ }
274
+
275
+ //! <b>Requires</b>: value must be an lvalue.
276
+ //!
277
+ //! <b>Effects</b>: Inserts the value in the front of the list.
278
+ //! No copy constructors are called.
279
+ //!
280
+ //! <b>Throws</b>: Nothing.
281
+ //!
282
+ //! <b>Complexity</b>: Constant.
283
+ //!
284
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
285
+ void push_front(reference value)
286
+ {
287
+ node_ptr to_insert = get_real_value_traits().to_node_ptr(value);
288
+ if(safemode_or_autounlink)
289
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::inited(to_insert));
290
+ node_algorithms::link_before(node_traits::get_next(this->get_root_node()), to_insert);
291
+ this->priv_size_traits().increment();
292
+ }
293
+
294
+ //! <b>Effects</b>: Erases the last element of the list.
295
+ //! No destructors are called.
296
+ //!
297
+ //! <b>Throws</b>: Nothing.
298
+ //!
299
+ //! <b>Complexity</b>: Constant.
300
+ //!
301
+ //! <b>Note</b>: Invalidates the iterators (but not the references) to the erased element.
302
+ void pop_back()
303
+ { return this->pop_back_and_dispose(detail::null_disposer()); }
304
+
305
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
306
+ //!
307
+ //! <b>Effects</b>: Erases the last element of the list.
308
+ //! No destructors are called.
309
+ //! Disposer::operator()(pointer) is called for the removed element.
310
+ //!
311
+ //! <b>Throws</b>: Nothing.
312
+ //!
313
+ //! <b>Complexity</b>: Constant.
314
+ //!
315
+ //! <b>Note</b>: Invalidates the iterators to the erased element.
316
+ template<class Disposer>
317
+ void pop_back_and_dispose(Disposer disposer)
318
+ {
319
+ node_ptr to_erase = node_traits::get_previous(this->get_root_node());
320
+ node_algorithms::unlink(to_erase);
321
+ this->priv_size_traits().decrement();
322
+ if(safemode_or_autounlink)
323
+ node_algorithms::init(to_erase);
324
+ disposer(get_real_value_traits().to_value_ptr(to_erase));
325
+ }
326
+
327
+ //! <b>Effects</b>: Erases the first element of the list.
328
+ //! No destructors are called.
329
+ //!
330
+ //! <b>Throws</b>: Nothing.
331
+ //!
332
+ //! <b>Complexity</b>: Constant.
333
+ //!
334
+ //! <b>Note</b>: Invalidates the iterators (but not the references) to the erased element.
335
+ void pop_front()
336
+ { return this->pop_front_and_dispose(detail::null_disposer()); }
337
+
338
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
339
+ //!
340
+ //! <b>Effects</b>: Erases the first element of the list.
341
+ //! No destructors are called.
342
+ //! Disposer::operator()(pointer) is called for the removed element.
343
+ //!
344
+ //! <b>Throws</b>: Nothing.
345
+ //!
346
+ //! <b>Complexity</b>: Constant.
347
+ //!
348
+ //! <b>Note</b>: Invalidates the iterators to the erased element.
349
+ template<class Disposer>
350
+ void pop_front_and_dispose(Disposer disposer)
351
+ {
352
+ node_ptr to_erase = node_traits::get_next(this->get_root_node());
353
+ node_algorithms::unlink(to_erase);
354
+ this->priv_size_traits().decrement();
355
+ if(safemode_or_autounlink)
356
+ node_algorithms::init(to_erase);
357
+ disposer(get_real_value_traits().to_value_ptr(to_erase));
358
+ }
359
+
360
+ //! <b>Effects</b>: Returns a reference to the first element of the list.
361
+ //!
362
+ //! <b>Throws</b>: Nothing.
363
+ //!
364
+ //! <b>Complexity</b>: Constant.
365
+ reference front()
366
+ { return *get_real_value_traits().to_value_ptr(node_traits::get_next(this->get_root_node())); }
367
+
368
+ //! <b>Effects</b>: Returns a const_reference to the first element of the list.
369
+ //!
370
+ //! <b>Throws</b>: Nothing.
371
+ //!
372
+ //! <b>Complexity</b>: Constant.
373
+ const_reference front() const
374
+ { return *get_real_value_traits().to_value_ptr(uncast(node_traits::get_next(this->get_root_node()))); }
375
+
376
+ //! <b>Effects</b>: Returns a reference to the last element of the list.
377
+ //!
378
+ //! <b>Throws</b>: Nothing.
379
+ //!
380
+ //! <b>Complexity</b>: Constant.
381
+ reference back()
382
+ { return *get_real_value_traits().to_value_ptr(node_traits::get_previous(this->get_root_node())); }
383
+
384
+ //! <b>Effects</b>: Returns a const_reference to the last element of the list.
385
+ //!
386
+ //! <b>Throws</b>: Nothing.
387
+ //!
388
+ //! <b>Complexity</b>: Constant.
389
+ const_reference back() const
390
+ { return *get_real_value_traits().to_value_ptr(uncast(node_traits::get_previous(this->get_root_node()))); }
391
+
392
+ //! <b>Effects</b>: Returns an iterator to the first element contained in the list.
393
+ //!
394
+ //! <b>Throws</b>: Nothing.
395
+ //!
396
+ //! <b>Complexity</b>: Constant.
397
+ iterator begin()
398
+ { return iterator(node_traits::get_next(this->get_root_node()), this); }
399
+
400
+ //! <b>Effects</b>: Returns a const_iterator to the first element contained in the list.
401
+ //!
402
+ //! <b>Throws</b>: Nothing.
403
+ //!
404
+ //! <b>Complexity</b>: Constant.
405
+ const_iterator begin() const
406
+ { return this->cbegin(); }
407
+
408
+ //! <b>Effects</b>: Returns a const_iterator to the first element contained in the list.
409
+ //!
410
+ //! <b>Throws</b>: Nothing.
411
+ //!
412
+ //! <b>Complexity</b>: Constant.
413
+ const_iterator cbegin() const
414
+ { return const_iterator(node_traits::get_next(this->get_root_node()), this); }
415
+
416
+ //! <b>Effects</b>: Returns an iterator to the end of the list.
417
+ //!
418
+ //! <b>Throws</b>: Nothing.
419
+ //!
420
+ //! <b>Complexity</b>: Constant.
421
+ iterator end()
422
+ { return iterator(this->get_root_node(), this); }
423
+
424
+ //! <b>Effects</b>: Returns a const_iterator to the end of the list.
425
+ //!
426
+ //! <b>Throws</b>: Nothing.
427
+ //!
428
+ //! <b>Complexity</b>: Constant.
429
+ const_iterator end() const
430
+ { return this->cend(); }
431
+
432
+ //! <b>Effects</b>: Returns a constant iterator to the end of the list.
433
+ //!
434
+ //! <b>Throws</b>: Nothing.
435
+ //!
436
+ //! <b>Complexity</b>: Constant.
437
+ const_iterator cend() const
438
+ { return const_iterator(uncast(this->get_root_node()), this); }
439
+
440
+ //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning
441
+ //! of the reversed list.
442
+ //!
443
+ //! <b>Throws</b>: Nothing.
444
+ //!
445
+ //! <b>Complexity</b>: Constant.
446
+ reverse_iterator rbegin()
447
+ { return reverse_iterator(this->end()); }
448
+
449
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
450
+ //! of the reversed list.
451
+ //!
452
+ //! <b>Throws</b>: Nothing.
453
+ //!
454
+ //! <b>Complexity</b>: Constant.
455
+ const_reverse_iterator rbegin() const
456
+ { return this->crbegin(); }
457
+
458
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
459
+ //! of the reversed list.
460
+ //!
461
+ //! <b>Throws</b>: Nothing.
462
+ //!
463
+ //! <b>Complexity</b>: Constant.
464
+ const_reverse_iterator crbegin() const
465
+ { return const_reverse_iterator(end()); }
466
+
467
+ //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
468
+ //! of the reversed list.
469
+ //!
470
+ //! <b>Throws</b>: Nothing.
471
+ //!
472
+ //! <b>Complexity</b>: Constant.
473
+ reverse_iterator rend()
474
+ { return reverse_iterator(begin()); }
475
+
476
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
477
+ //! of the reversed list.
478
+ //!
479
+ //! <b>Throws</b>: Nothing.
480
+ //!
481
+ //! <b>Complexity</b>: Constant.
482
+ const_reverse_iterator rend() const
483
+ { return this->crend(); }
484
+
485
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
486
+ //! of the reversed list.
487
+ //!
488
+ //! <b>Throws</b>: Nothing.
489
+ //!
490
+ //! <b>Complexity</b>: Constant.
491
+ const_reverse_iterator crend() const
492
+ { return const_reverse_iterator(this->begin()); }
493
+
494
+ //! <b>Precondition</b>: end_iterator must be a valid end iterator
495
+ //! of list.
496
+ //!
497
+ //! <b>Effects</b>: Returns a const reference to the list associated to the end iterator
498
+ //!
499
+ //! <b>Throws</b>: Nothing.
500
+ //!
501
+ //! <b>Complexity</b>: Constant.
502
+ static list_impl &container_from_end_iterator(iterator end_iterator)
503
+ { return list_impl::priv_container_from_end_iterator(end_iterator); }
504
+
505
+ //! <b>Precondition</b>: end_iterator must be a valid end const_iterator
506
+ //! of list.
507
+ //!
508
+ //! <b>Effects</b>: Returns a const reference to the list associated to the end iterator
509
+ //!
510
+ //! <b>Throws</b>: Nothing.
511
+ //!
512
+ //! <b>Complexity</b>: Constant.
513
+ static const list_impl &container_from_end_iterator(const_iterator end_iterator)
514
+ { return list_impl::priv_container_from_end_iterator(end_iterator); }
515
+
516
+ //! <b>Effects</b>: Returns the number of the elements contained in the list.
517
+ //!
518
+ //! <b>Throws</b>: Nothing.
519
+ //!
520
+ //! <b>Complexity</b>: Linear to the number of elements contained in the list.
521
+ //! if constant-time size option is disabled. Constant time otherwise.
522
+ //!
523
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
524
+ size_type size() const
525
+ {
526
+ if(constant_time_size)
527
+ return this->priv_size_traits().get_size();
528
+ else
529
+ return node_algorithms::count(this->get_root_node()) - 1;
530
+ }
531
+
532
+ //! <b>Effects</b>: Returns true if the list contains no elements.
533
+ //!
534
+ //! <b>Throws</b>: Nothing.
535
+ //!
536
+ //! <b>Complexity</b>: Constant.
537
+ //!
538
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
539
+ bool empty() const
540
+ { return node_algorithms::unique(this->get_root_node()); }
541
+
542
+ //! <b>Effects</b>: Swaps the elements of x and *this.
543
+ //!
544
+ //! <b>Throws</b>: Nothing.
545
+ //!
546
+ //! <b>Complexity</b>: Constant.
547
+ //!
548
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
549
+ void swap(list_impl& other)
550
+ {
551
+ node_algorithms::swap_nodes(this->get_root_node(), other.get_root_node());
552
+ if(constant_time_size){
553
+ size_type backup = this->priv_size_traits().get_size();
554
+ this->priv_size_traits().set_size(other.priv_size_traits().get_size());
555
+ other.priv_size_traits().set_size(backup);
556
+ }
557
+ }
558
+
559
+ //! <b>Effects</b>: Moves backwards all the elements, so that the first
560
+ //! element becomes the second, the second becomes the third...
561
+ //! the last element becomes the first one.
562
+ //!
563
+ //! <b>Throws</b>: Nothing.
564
+ //!
565
+ //! <b>Complexity</b>: Linear to the number of shifts.
566
+ //!
567
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
568
+ void shift_backwards(size_type n = 1)
569
+ { node_algorithms::move_forward(this->get_root_node(), n); }
570
+
571
+ //! <b>Effects</b>: Moves forward all the elements, so that the second
572
+ //! element becomes the first, the third becomes the second...
573
+ //! the first element becomes the last one.
574
+ //!
575
+ //! <b>Throws</b>: Nothing.
576
+ //!
577
+ //! <b>Complexity</b>: Linear to the number of shifts.
578
+ //!
579
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
580
+ void shift_forward(size_type n = 1)
581
+ { node_algorithms::move_backwards(this->get_root_node(), n); }
582
+
583
+ //! <b>Effects</b>: Erases the element pointed by i of the list.
584
+ //! No destructors are called.
585
+ //!
586
+ //! <b>Returns</b>: the first element remaining beyond the removed element,
587
+ //! or end() if no such element exists.
588
+ //!
589
+ //! <b>Throws</b>: Nothing.
590
+ //!
591
+ //! <b>Complexity</b>: Constant.
592
+ //!
593
+ //! <b>Note</b>: Invalidates the iterators (but not the references) to the
594
+ //! erased element.
595
+ iterator erase(const_iterator i)
596
+ { return this->erase_and_dispose(i, detail::null_disposer()); }
597
+
598
+ //! <b>Requires</b>: b and e must be valid iterators to elements in *this.
599
+ //!
600
+ //! <b>Effects</b>: Erases the element range pointed by b and e
601
+ //! No destructors are called.
602
+ //!
603
+ //! <b>Returns</b>: the first element remaining beyond the removed elements,
604
+ //! or end() if no such element exists.
605
+ //!
606
+ //! <b>Throws</b>: Nothing.
607
+ //!
608
+ //! <b>Complexity</b>: Linear to the number of erased elements if it's a safe-mode
609
+ //! or auto-unlink value, or constant-time size is enabled. Constant-time otherwise.
610
+ //!
611
+ //! <b>Note</b>: Invalidates the iterators (but not the references) to the
612
+ //! erased elements.
613
+ iterator erase(const_iterator b, const_iterator e)
614
+ {
615
+ if(safemode_or_autounlink || constant_time_size){
616
+ return this->erase_and_dispose(b, e, detail::null_disposer());
617
+ }
618
+ else{
619
+ node_algorithms::unlink(b.pointed_node(), e.pointed_node());
620
+ return e.unconst();
621
+ }
622
+ }
623
+
624
+ //! <b>Requires</b>: b and e must be valid iterators to elements in *this.
625
+ //! n must be std::distance(b, e).
626
+ //!
627
+ //! <b>Effects</b>: Erases the element range pointed by b and e
628
+ //! No destructors are called.
629
+ //!
630
+ //! <b>Returns</b>: the first element remaining beyond the removed elements,
631
+ //! or end() if no such element exists.
632
+ //!
633
+ //! <b>Throws</b>: Nothing.
634
+ //!
635
+ //! <b>Complexity</b>: Linear to the number of erased elements if it's a safe-mode
636
+ //! or auto-unlink value is enabled. Constant-time otherwise.
637
+ //!
638
+ //! <b>Note</b>: Invalidates the iterators (but not the references) to the
639
+ //! erased elements.
640
+ iterator erase(const_iterator b, const_iterator e, difference_type n)
641
+ {
642
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(std::distance(b, e) == difference_type(n));
643
+ if(safemode_or_autounlink || constant_time_size){
644
+ return this->erase_and_dispose(b, e, detail::null_disposer());
645
+ }
646
+ else{
647
+ if(constant_time_size){
648
+ this->priv_size_traits().decrease(n);
649
+ }
650
+ node_algorithms::unlink(b.pointed_node(), e.pointed_node());
651
+ return e.unconst();
652
+ }
653
+ }
654
+
655
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
656
+ //!
657
+ //! <b>Effects</b>: Erases the element pointed by i of the list.
658
+ //! No destructors are called.
659
+ //! Disposer::operator()(pointer) is called for the removed element.
660
+ //!
661
+ //! <b>Returns</b>: the first element remaining beyond the removed element,
662
+ //! or end() if no such element exists.
663
+ //!
664
+ //! <b>Throws</b>: Nothing.
665
+ //!
666
+ //! <b>Complexity</b>: Constant.
667
+ //!
668
+ //! <b>Note</b>: Invalidates the iterators to the erased element.
669
+ template <class Disposer>
670
+ iterator erase_and_dispose(const_iterator i, Disposer disposer)
671
+ {
672
+ node_ptr to_erase(i.pointed_node());
673
+ ++i;
674
+ node_algorithms::unlink(to_erase);
675
+ this->priv_size_traits().decrement();
676
+ if(safemode_or_autounlink)
677
+ node_algorithms::init(to_erase);
678
+ disposer(this->get_real_value_traits().to_value_ptr(to_erase));
679
+ return i.unconst();
680
+ }
681
+
682
+ #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
683
+ template<class Disposer>
684
+ iterator erase_and_dispose(iterator i, Disposer disposer)
685
+ { return this->erase_and_dispose(const_iterator(i), disposer); }
686
+ #endif
687
+
688
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
689
+ //!
690
+ //! <b>Effects</b>: Erases the element range pointed by b and e
691
+ //! No destructors are called.
692
+ //! Disposer::operator()(pointer) is called for the removed elements.
693
+ //!
694
+ //! <b>Returns</b>: the first element remaining beyond the removed elements,
695
+ //! or end() if no such element exists.
696
+ //!
697
+ //! <b>Throws</b>: Nothing.
698
+ //!
699
+ //! <b>Complexity</b>: Linear to the number of elements erased.
700
+ //!
701
+ //! <b>Note</b>: Invalidates the iterators to the erased elements.
702
+ template <class Disposer>
703
+ iterator erase_and_dispose(const_iterator b, const_iterator e, Disposer disposer)
704
+ {
705
+ node_ptr bp(b.pointed_node()), ep(e.pointed_node());
706
+ node_algorithms::unlink(bp, ep);
707
+ while(bp != ep){
708
+ node_ptr to_erase(bp);
709
+ bp = node_traits::get_next(bp);
710
+ if(safemode_or_autounlink)
711
+ node_algorithms::init(to_erase);
712
+ disposer(get_real_value_traits().to_value_ptr(to_erase));
713
+ this->priv_size_traits().decrement();
714
+ }
715
+ return e.unconst();
716
+ }
717
+
718
+ //! <b>Effects</b>: Erases all the elements of the container.
719
+ //! No destructors are called.
720
+ //!
721
+ //! <b>Throws</b>: Nothing.
722
+ //!
723
+ //! <b>Complexity</b>: Linear to the number of elements of the list.
724
+ //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
725
+ //!
726
+ //! <b>Note</b>: Invalidates the iterators (but not the references) to the erased elements.
727
+ void clear()
728
+ {
729
+ if(safemode_or_autounlink){
730
+ this->clear_and_dispose(detail::null_disposer());
731
+ }
732
+ else{
733
+ node_algorithms::init_header(this->get_root_node());
734
+ this->priv_size_traits().set_size(size_type(0));
735
+ }
736
+ }
737
+
738
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
739
+ //!
740
+ //! <b>Effects</b>: Erases all the elements of the container.
741
+ //! No destructors are called.
742
+ //! Disposer::operator()(pointer) is called for the removed elements.
743
+ //!
744
+ //! <b>Throws</b>: Nothing.
745
+ //!
746
+ //! <b>Complexity</b>: Linear to the number of elements of the list.
747
+ //!
748
+ //! <b>Note</b>: Invalidates the iterators to the erased elements.
749
+ template <class Disposer>
750
+ void clear_and_dispose(Disposer disposer)
751
+ {
752
+ const_iterator it(this->begin()), itend(this->end());
753
+ while(it != itend){
754
+ node_ptr to_erase(it.pointed_node());
755
+ ++it;
756
+ if(safemode_or_autounlink)
757
+ node_algorithms::init(to_erase);
758
+ disposer(get_real_value_traits().to_value_ptr(to_erase));
759
+ }
760
+ node_algorithms::init_header(this->get_root_node());
761
+ this->priv_size_traits().set_size(0);
762
+ }
763
+
764
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
765
+ //! Cloner should yield to nodes equivalent to the original nodes.
766
+ //!
767
+ //! <b>Effects</b>: Erases all the elements from *this
768
+ //! calling Disposer::operator()(pointer), clones all the
769
+ //! elements from src calling Cloner::operator()(const_reference )
770
+ //! and inserts them on *this.
771
+ //!
772
+ //! If cloner throws, all cloned elements are unlinked and disposed
773
+ //! calling Disposer::operator()(pointer).
774
+ //!
775
+ //! <b>Complexity</b>: Linear to erased plus inserted elements.
776
+ //!
777
+ //! <b>Throws</b>: If cloner throws. Basic guarantee.
778
+ template <class Cloner, class Disposer>
779
+ void clone_from(const list_impl &src, Cloner cloner, Disposer disposer)
780
+ {
781
+ this->clear_and_dispose(disposer);
782
+ detail::exception_disposer<list_impl, Disposer>
783
+ rollback(*this, disposer);
784
+ const_iterator b(src.begin()), e(src.end());
785
+ for(; b != e; ++b){
786
+ this->push_back(*cloner(*b));
787
+ }
788
+ rollback.release();
789
+ }
790
+
791
+ //! <b>Requires</b>: value must be an lvalue and p must be a valid iterator of *this.
792
+ //!
793
+ //! <b>Effects</b>: Inserts the value before the position pointed by p.
794
+ //!
795
+ //! <b>Returns</b>: An iterator to the inserted element.
796
+ //!
797
+ //! <b>Throws</b>: Nothing.
798
+ //!
799
+ //! <b>Complexity</b>: Constant time. No copy constructors are called.
800
+ //!
801
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
802
+ iterator insert(const_iterator p, reference value)
803
+ {
804
+ node_ptr to_insert = this->get_real_value_traits().to_node_ptr(value);
805
+ if(safemode_or_autounlink)
806
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::inited(to_insert));
807
+ node_algorithms::link_before(p.pointed_node(), to_insert);
808
+ this->priv_size_traits().increment();
809
+ return iterator(to_insert, this);
810
+ }
811
+
812
+ //! <b>Requires</b>: Dereferencing iterator must yield
813
+ //! an lvalue of type value_type and p must be a valid iterator of *this.
814
+ //!
815
+ //! <b>Effects</b>: Inserts the range pointed by b and e before the position p.
816
+ //! No copy constructors are called.
817
+ //!
818
+ //! <b>Throws</b>: Nothing.
819
+ //!
820
+ //! <b>Complexity</b>: Linear to the number of elements inserted.
821
+ //!
822
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
823
+ template<class Iterator>
824
+ void insert(const_iterator p, Iterator b, Iterator e)
825
+ {
826
+ for (; b != e; ++b)
827
+ this->insert(p, *b);
828
+ }
829
+
830
+ //! <b>Requires</b>: Dereferencing iterator must yield
831
+ //! an lvalue of type value_type.
832
+ //!
833
+ //! <b>Effects</b>: Clears the list and inserts the range pointed by b and e.
834
+ //! No destructors or copy constructors are called.
835
+ //!
836
+ //! <b>Throws</b>: Nothing.
837
+ //!
838
+ //! <b>Complexity</b>: Linear to the number of elements inserted plus
839
+ //! linear to the elements contained in the list if it's a safe-mode
840
+ //! or auto-unlink value.
841
+ //! Linear to the number of elements inserted in the list otherwise.
842
+ //!
843
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
844
+ //! to the erased elements.
845
+ template<class Iterator>
846
+ void assign(Iterator b, Iterator e)
847
+ {
848
+ this->clear();
849
+ this->insert(this->cend(), b, e);
850
+ }
851
+
852
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
853
+ //!
854
+ //! <b>Requires</b>: Dereferencing iterator must yield
855
+ //! an lvalue of type value_type.
856
+ //!
857
+ //! <b>Effects</b>: Clears the list and inserts the range pointed by b and e.
858
+ //! No destructors or copy constructors are called.
859
+ //! Disposer::operator()(pointer) is called for the removed elements.
860
+ //!
861
+ //! <b>Throws</b>: Nothing.
862
+ //!
863
+ //! <b>Complexity</b>: Linear to the number of elements inserted plus
864
+ //! linear to the elements contained in the list.
865
+ //!
866
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
867
+ //! to the erased elements.
868
+ template<class Iterator, class Disposer>
869
+ void dispose_and_assign(Disposer disposer, Iterator b, Iterator e)
870
+ {
871
+ this->clear_and_dispose(disposer);
872
+ this->insert(this->cend(), b, e);
873
+ }
874
+
875
+ //! <b>Requires</b>: p must be a valid iterator of *this.
876
+ //!
877
+ //! <b>Effects</b>: Transfers all the elements of list x to this list, before the
878
+ //! the element pointed by p. No destructors or copy constructors are called.
879
+ //!
880
+ //! <b>Throws</b>: Nothing.
881
+ //!
882
+ //! <b>Complexity</b>: Constant.
883
+ //!
884
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of
885
+ //! this list. Iterators of this list and all the references are not invalidated.
886
+ void splice(const_iterator p, list_impl& x)
887
+ {
888
+ if(!x.empty()){
889
+ node_algorithms::transfer
890
+ (p.pointed_node(), x.begin().pointed_node(), x.end().pointed_node());
891
+ size_traits &thist = this->priv_size_traits();
892
+ size_traits &xt = x.priv_size_traits();
893
+ thist.increase(xt.get_size());
894
+ xt.set_size(size_type(0));
895
+ }
896
+ }
897
+
898
+ //! <b>Requires</b>: p must be a valid iterator of *this.
899
+ //! new_ele must point to an element contained in list x.
900
+ //!
901
+ //! <b>Effects</b>: Transfers the value pointed by new_ele, from list x to this list,
902
+ //! before the the element pointed by p. No destructors or copy constructors are called.
903
+ //! If p == new_ele or p == ++new_ele, this function is a null operation.
904
+ //!
905
+ //! <b>Throws</b>: Nothing.
906
+ //!
907
+ //! <b>Complexity</b>: Constant.
908
+ //!
909
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
910
+ //! list. Iterators of this list and all the references are not invalidated.
911
+ void splice(const_iterator p, list_impl&x, const_iterator new_ele)
912
+ {
913
+ node_algorithms::transfer(p.pointed_node(), new_ele.pointed_node());
914
+ x.priv_size_traits().decrement();
915
+ this->priv_size_traits().increment();
916
+ }
917
+
918
+ //! <b>Requires</b>: p must be a valid iterator of *this.
919
+ //! f and e must point to elements contained in list x.
920
+ //!
921
+ //! <b>Effects</b>: Transfers the range pointed by f and e from list x to this list,
922
+ //! before the the element pointed by p. No destructors or copy constructors are called.
923
+ //!
924
+ //! <b>Throws</b>: Nothing.
925
+ //!
926
+ //! <b>Complexity</b>: Linear to the number of elements transferred
927
+ //! if constant-time size option is enabled. Constant-time otherwise.
928
+ //!
929
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
930
+ //! list. Iterators of this list and all the references are not invalidated.
931
+ void splice(const_iterator p, list_impl&x, const_iterator f, const_iterator e)
932
+ {
933
+ if(constant_time_size)
934
+ this->splice(p, x, f, e, std::distance(f, e));
935
+ else
936
+ this->splice(p, x, f, e, 1);//distance is a dummy value
937
+ }
938
+
939
+ //! <b>Requires</b>: p must be a valid iterator of *this.
940
+ //! f and e must point to elements contained in list x.
941
+ //! n == std::distance(f, e)
942
+ //!
943
+ //! <b>Effects</b>: Transfers the range pointed by f and e from list x to this list,
944
+ //! before the the element pointed by p. No destructors or copy constructors are called.
945
+ //!
946
+ //! <b>Throws</b>: Nothing.
947
+ //!
948
+ //! <b>Complexity</b>: Constant.
949
+ //!
950
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
951
+ //! list. Iterators of this list and all the references are not invalidated.
952
+ void splice(const_iterator p, list_impl&x, const_iterator f, const_iterator e, difference_type n)
953
+ {
954
+ if(n){
955
+ if(constant_time_size){
956
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(n == std::distance(f, e));
957
+ node_algorithms::transfer(p.pointed_node(), f.pointed_node(), e.pointed_node());
958
+ size_traits &thist = this->priv_size_traits();
959
+ size_traits &xt = x.priv_size_traits();
960
+ thist.increase(n);
961
+ xt.decrease(n);
962
+ }
963
+ else{
964
+ node_algorithms::transfer(p.pointed_node(), f.pointed_node(), e.pointed_node());
965
+ }
966
+ }
967
+ }
968
+
969
+ //! <b>Effects</b>: This function sorts the list *this according to std::less<value_type>.
970
+ //! The sort is stable, that is, the relative order of equivalent elements is preserved.
971
+ //!
972
+ //! <b>Throws</b>: If real_value_traits::node_traits::node
973
+ //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
974
+ //! or std::less<value_type> throws. Basic guarantee.
975
+ //!
976
+ //! <b>Notes</b>: Iterators and references are not invalidated.
977
+ //!
978
+ //! <b>Complexity</b>: The number of comparisons is approximately N log N, where N
979
+ //! is the list's size.
980
+ void sort()
981
+ { this->sort(std::less<value_type>()); }
982
+
983
+ //! <b>Requires</b>: p must be a comparison function that induces a strict weak ordering
984
+ //!
985
+ //! <b>Effects</b>: This function sorts the list *this according to p. The sort is
986
+ //! stable, that is, the relative order of equivalent elements is preserved.
987
+ //!
988
+ //! <b>Throws</b>: If real_value_traits::node_traits::node
989
+ //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
990
+ //! or the predicate throws. Basic guarantee.
991
+ //!
992
+ //! <b>Notes</b>: This won't throw if list_base_hook<> or
993
+ //! list_member_hook are used.
994
+ //! Iterators and references are not invalidated.
995
+ //!
996
+ //! <b>Complexity</b>: The number of comparisons is approximately N log N, where N
997
+ //! is the list's size.
998
+ template<class Predicate>
999
+ void sort(Predicate p)
1000
+ {
1001
+ if(node_traits::get_next(this->get_root_node())
1002
+ != node_traits::get_previous(this->get_root_node())){
1003
+ list_impl carry(this->priv_value_traits());
1004
+ detail::array_initializer<list_impl, 64> counter(this->priv_value_traits());
1005
+ int fill = 0;
1006
+ while(!this->empty()){
1007
+ carry.splice(carry.cbegin(), *this, this->cbegin());
1008
+ int i = 0;
1009
+ while(i < fill && !counter[i].empty()) {
1010
+ counter[i].merge(carry, p);
1011
+ carry.swap(counter[i++]);
1012
+ }
1013
+ carry.swap(counter[i]);
1014
+ if(i == fill)
1015
+ ++fill;
1016
+ }
1017
+ for (int i = 1; i < fill; ++i)
1018
+ counter[i].merge(counter[i-1], p);
1019
+ this->swap(counter[fill-1]);
1020
+ }
1021
+ }
1022
+
1023
+ //! <b>Effects</b>: This function removes all of x's elements and inserts them
1024
+ //! in order into *this according to std::less<value_type>. The merge is stable;
1025
+ //! that is, if an element from *this is equivalent to one from x, then the element
1026
+ //! from *this will precede the one from x.
1027
+ //!
1028
+ //! <b>Throws</b>: If std::less<value_type> throws. Basic guarantee.
1029
+ //!
1030
+ //! <b>Complexity</b>: This function is linear time: it performs at most
1031
+ //! size() + x.size() - 1 comparisons.
1032
+ //!
1033
+ //! <b>Note</b>: Iterators and references are not invalidated
1034
+ void merge(list_impl& x)
1035
+ { this->merge(x, std::less<value_type>()); }
1036
+
1037
+ //! <b>Requires</b>: p must be a comparison function that induces a strict weak
1038
+ //! ordering and both *this and x must be sorted according to that ordering
1039
+ //! The lists x and *this must be distinct.
1040
+ //!
1041
+ //! <b>Effects</b>: This function removes all of x's elements and inserts them
1042
+ //! in order into *this. The merge is stable; that is, if an element from *this is
1043
+ //! equivalent to one from x, then the element from *this will precede the one from x.
1044
+ //!
1045
+ //! <b>Throws</b>: If the predicate throws. Basic guarantee.
1046
+ //!
1047
+ //! <b>Complexity</b>: This function is linear time: it performs at most
1048
+ //! size() + x.size() - 1 comparisons.
1049
+ //!
1050
+ //! <b>Note</b>: Iterators and references are not invalidated.
1051
+ template<class Predicate>
1052
+ void merge(list_impl& x, Predicate p)
1053
+ {
1054
+ const_iterator e(this->cend()), ex(x.cend());
1055
+ const_iterator b(this->cbegin());
1056
+ while(!x.empty()){
1057
+ const_iterator ix(x.cbegin());
1058
+ while (b != e && !p(*ix, *b)){
1059
+ ++b;
1060
+ }
1061
+ if(b == e){
1062
+ //Now transfer the rest to the end of the container
1063
+ this->splice(e, x);
1064
+ break;
1065
+ }
1066
+ else{
1067
+ size_type n(0);
1068
+ do{
1069
+ ++ix; ++n;
1070
+ } while(ix != ex && p(*ix, *b));
1071
+ this->splice(b, x, x.begin(), ix, n);
1072
+ }
1073
+ }
1074
+ }
1075
+
1076
+ //! <b>Effects</b>: Reverses the order of elements in the list.
1077
+ //!
1078
+ //! <b>Throws</b>: Nothing.
1079
+ //!
1080
+ //! <b>Complexity</b>: This function is linear time.
1081
+ //!
1082
+ //! <b>Note</b>: Iterators and references are not invalidated
1083
+ void reverse()
1084
+ { node_algorithms::reverse(this->get_root_node()); }
1085
+
1086
+ //! <b>Effects</b>: Removes all the elements that compare equal to value.
1087
+ //! No destructors are called.
1088
+ //!
1089
+ //! <b>Throws</b>: If std::equal_to<value_type> throws. Basic guarantee.
1090
+ //!
1091
+ //! <b>Complexity</b>: Linear time. It performs exactly size() comparisons for equality.
1092
+ //!
1093
+ //! <b>Note</b>: The relative order of elements that are not removed is unchanged,
1094
+ //! and iterators to elements that are not removed remain valid.
1095
+ void remove(const_reference value)
1096
+ { this->remove_if(detail::equal_to_value<const_reference>(value)); }
1097
+
1098
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
1099
+ //!
1100
+ //! <b>Effects</b>: Removes all the elements that compare equal to value.
1101
+ //! Disposer::operator()(pointer) is called for every removed element.
1102
+ //!
1103
+ //! <b>Throws</b>: If std::equal_to<value_type> throws. Basic guarantee.
1104
+ //!
1105
+ //! <b>Complexity</b>: Linear time. It performs exactly size() comparisons for equality.
1106
+ //!
1107
+ //! <b>Note</b>: The relative order of elements that are not removed is unchanged,
1108
+ //! and iterators to elements that are not removed remain valid.
1109
+ template<class Disposer>
1110
+ void remove_and_dispose(const_reference value, Disposer disposer)
1111
+ { this->remove_and_dispose_if(detail::equal_to_value<const_reference>(value), disposer); }
1112
+
1113
+ //! <b>Effects</b>: Removes all the elements for which a specified
1114
+ //! predicate is satisfied. No destructors are called.
1115
+ //!
1116
+ //! <b>Throws</b>: If pred throws. Basic guarantee.
1117
+ //!
1118
+ //! <b>Complexity</b>: Linear time. It performs exactly size() calls to the predicate.
1119
+ //!
1120
+ //! <b>Note</b>: The relative order of elements that are not removed is unchanged,
1121
+ //! and iterators to elements that are not removed remain valid.
1122
+ template<class Pred>
1123
+ void remove_if(Pred pred)
1124
+ { this->remove_and_dispose_if(pred, detail::null_disposer()); }
1125
+
1126
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
1127
+ //!
1128
+ //! <b>Effects</b>: Removes all the elements for which a specified
1129
+ //! predicate is satisfied.
1130
+ //! Disposer::operator()(pointer) is called for every removed element.
1131
+ //!
1132
+ //! <b>Throws</b>: If pred throws. Basic guarantee.
1133
+ //!
1134
+ //! <b>Complexity</b>: Linear time. It performs exactly size() comparisons for equality.
1135
+ //!
1136
+ //! <b>Note</b>: The relative order of elements that are not removed is unchanged,
1137
+ //! and iterators to elements that are not removed remain valid.
1138
+ template<class Pred, class Disposer>
1139
+ void remove_and_dispose_if(Pred pred, Disposer disposer)
1140
+ {
1141
+ const_iterator cur(this->cbegin());
1142
+ const_iterator last(this->cend());
1143
+ while(cur != last) {
1144
+ if(pred(*cur)){
1145
+ cur = this->erase_and_dispose(cur, disposer);
1146
+ }
1147
+ else{
1148
+ ++cur;
1149
+ }
1150
+ }
1151
+ }
1152
+
1153
+ //! <b>Effects</b>: Removes adjacent duplicate elements or adjacent
1154
+ //! elements that are equal from the list. No destructors are called.
1155
+ //!
1156
+ //! <b>Throws</b>: If std::equal_to<value_type throws. Basic guarantee.
1157
+ //!
1158
+ //! <b>Complexity</b>: Linear time (size()-1 comparisons calls to pred()).
1159
+ //!
1160
+ //! <b>Note</b>: The relative order of elements that are not removed is unchanged,
1161
+ //! and iterators to elements that are not removed remain valid.
1162
+ void unique()
1163
+ { this->unique_and_dispose(std::equal_to<value_type>(), detail::null_disposer()); }
1164
+
1165
+ //! <b>Effects</b>: Removes adjacent duplicate elements or adjacent
1166
+ //! elements that satisfy some binary predicate from the list.
1167
+ //! No destructors are called.
1168
+ //!
1169
+ //! <b>Throws</b>: If pred throws. Basic guarantee.
1170
+ //!
1171
+ //! <b>Complexity</b>: Linear time (size()-1 comparisons equality comparisons).
1172
+ //!
1173
+ //! <b>Note</b>: The relative order of elements that are not removed is unchanged,
1174
+ //! and iterators to elements that are not removed remain valid.
1175
+ template<class BinaryPredicate>
1176
+ void unique(BinaryPredicate pred)
1177
+ { this->unique_and_dispose(pred, detail::null_disposer()); }
1178
+
1179
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
1180
+ //!
1181
+ //! <b>Effects</b>: Removes adjacent duplicate elements or adjacent
1182
+ //! elements that are equal from the list.
1183
+ //! Disposer::operator()(pointer) is called for every removed element.
1184
+ //!
1185
+ //! <b>Throws</b>: If std::equal_to<value_type throws. Basic guarantee.
1186
+ //!
1187
+ //! <b>Complexity</b>: Linear time (size()-1) comparisons equality comparisons.
1188
+ //!
1189
+ //! <b>Note</b>: The relative order of elements that are not removed is unchanged,
1190
+ //! and iterators to elements that are not removed remain valid.
1191
+ template<class Disposer>
1192
+ void unique_and_dispose(Disposer disposer)
1193
+ { this->unique_and_dispose(std::equal_to<value_type>(), disposer); }
1194
+
1195
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
1196
+ //!
1197
+ //! <b>Effects</b>: Removes adjacent duplicate elements or adjacent
1198
+ //! elements that satisfy some binary predicate from the list.
1199
+ //! Disposer::operator()(pointer) is called for every removed element.
1200
+ //!
1201
+ //! <b>Throws</b>: If pred throws. Basic guarantee.
1202
+ //!
1203
+ //! <b>Complexity</b>: Linear time (size()-1) comparisons equality comparisons.
1204
+ //!
1205
+ //! <b>Note</b>: The relative order of elements that are not removed is unchanged,
1206
+ //! and iterators to elements that are not removed remain valid.
1207
+ template<class BinaryPredicate, class Disposer>
1208
+ void unique_and_dispose(BinaryPredicate pred, Disposer disposer)
1209
+ {
1210
+ const_iterator itend(this->cend());
1211
+ const_iterator cur(this->cbegin());
1212
+
1213
+ if(cur != itend){
1214
+ const_iterator after(cur);
1215
+ ++after;
1216
+ while(after != itend){
1217
+ if(pred(*cur, *after)){
1218
+ after = this->erase_and_dispose(after, disposer);
1219
+ }
1220
+ else{
1221
+ cur = after;
1222
+ ++after;
1223
+ }
1224
+ }
1225
+ }
1226
+ }
1227
+
1228
+ //! <b>Requires</b>: value must be a reference to a value inserted in a list.
1229
+ //!
1230
+ //! <b>Effects</b>: This function returns a const_iterator pointing to the element
1231
+ //!
1232
+ //! <b>Throws</b>: Nothing.
1233
+ //!
1234
+ //! <b>Complexity</b>: Constant time.
1235
+ //!
1236
+ //! <b>Note</b>: Iterators and references are not invalidated.
1237
+ //! This static function is available only if the <i>value traits</i>
1238
+ //! is stateless.
1239
+ static iterator s_iterator_to(reference value)
1240
+ {
1241
+ BOOST_STATIC_ASSERT((!stateful_value_traits));
1242
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(!node_algorithms::inited(real_value_traits::to_node_ptr(value)));
1243
+ return iterator(real_value_traits::to_node_ptr(value), 0);
1244
+ }
1245
+
1246
+ //! <b>Requires</b>: value must be a const reference to a value inserted in a list.
1247
+ //!
1248
+ //! <b>Effects</b>: This function returns an iterator pointing to the element.
1249
+ //!
1250
+ //! <b>Throws</b>: Nothing.
1251
+ //!
1252
+ //! <b>Complexity</b>: Constant time.
1253
+ //!
1254
+ //! <b>Note</b>: Iterators and references are not invalidated.
1255
+ //! This static function is available only if the <i>value traits</i>
1256
+ //! is stateless.
1257
+ static const_iterator s_iterator_to(const_reference value)
1258
+ {
1259
+ BOOST_STATIC_ASSERT((!stateful_value_traits));
1260
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(!node_algorithms::inited(real_value_traits::to_node_ptr(const_cast<reference> (value))));
1261
+ return const_iterator(real_value_traits::to_node_ptr(const_cast<reference> (value)), 0);
1262
+ }
1263
+
1264
+ //! <b>Requires</b>: value must be a reference to a value inserted in a list.
1265
+ //!
1266
+ //! <b>Effects</b>: This function returns a const_iterator pointing to the element
1267
+ //!
1268
+ //! <b>Throws</b>: Nothing.
1269
+ //!
1270
+ //! <b>Complexity</b>: Constant time.
1271
+ //!
1272
+ //! <b>Note</b>: Iterators and references are not invalidated.
1273
+ iterator iterator_to(reference value)
1274
+ {
1275
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(!node_algorithms::inited(real_value_traits::to_node_ptr(value)));
1276
+ return iterator(real_value_traits::to_node_ptr(value), this);
1277
+ }
1278
+
1279
+ //! <b>Requires</b>: value must be a const reference to a value inserted in a list.
1280
+ //!
1281
+ //! <b>Effects</b>: This function returns an iterator pointing to the element.
1282
+ //!
1283
+ //! <b>Throws</b>: Nothing.
1284
+ //!
1285
+ //! <b>Complexity</b>: Constant time.
1286
+ //!
1287
+ //! <b>Note</b>: Iterators and references are not invalidated.
1288
+ const_iterator iterator_to(const_reference value) const
1289
+ {
1290
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(!node_algorithms::inited(real_value_traits::to_node_ptr(const_cast<reference> (value))));
1291
+ return const_iterator(real_value_traits::to_node_ptr(const_cast<reference> (value)), this);
1292
+ }
1293
+
1294
+ /// @cond
1295
+
1296
+ private:
1297
+ static list_impl &priv_container_from_end_iterator(const const_iterator &end_iterator)
1298
+ {
1299
+ root_plus_size *r = detail::parent_from_member<root_plus_size, node>
1300
+ ( boost::intrusive::detail::to_raw_pointer(end_iterator.pointed_node()), &root_plus_size::root_);
1301
+ data_t *d = detail::parent_from_member<data_t, root_plus_size>
1302
+ ( r, &data_t::root_plus_size_);
1303
+ list_impl *s = detail::parent_from_member<list_impl, data_t>(d, &list_impl::data_);
1304
+ return *s;
1305
+ }
1306
+ /// @endcond
1307
+ };
1308
+
1309
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1310
+ template<class T, class ...Options>
1311
+ #else
1312
+ template<class Config>
1313
+ #endif
1314
+ inline bool operator<
1315
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1316
+ (const list_impl<T, Options...> &x, const list_impl<T, Options...> &y)
1317
+ #else
1318
+ (const list_impl<Config> &x, const list_impl<Config> &y)
1319
+ #endif
1320
+ { return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
1321
+
1322
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1323
+ template<class T, class ...Options>
1324
+ #else
1325
+ template<class Config>
1326
+ #endif
1327
+ bool operator==
1328
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1329
+ (const list_impl<T, Options...> &x, const list_impl<T, Options...> &y)
1330
+ #else
1331
+ (const list_impl<Config> &x, const list_impl<Config> &y)
1332
+ #endif
1333
+ {
1334
+ typedef list_impl<Config> list_type;
1335
+ typedef typename list_type::const_iterator const_iterator;
1336
+ const bool C = list_type::constant_time_size;
1337
+ if(C && x.size() != y.size()){
1338
+ return false;
1339
+ }
1340
+ const_iterator end1 = x.end();
1341
+
1342
+ const_iterator i1 = x.begin();
1343
+ const_iterator i2 = y.begin();
1344
+ if(C){
1345
+ while (i1 != end1 && *i1 == *i2) {
1346
+ ++i1;
1347
+ ++i2;
1348
+ }
1349
+ return i1 == end1;
1350
+ }
1351
+ else{
1352
+ const_iterator end2 = y.end();
1353
+ while (i1 != end1 && i2 != end2 && *i1 == *i2) {
1354
+ ++i1;
1355
+ ++i2;
1356
+ }
1357
+ return i1 == end1 && i2 == end2;
1358
+ }
1359
+ }
1360
+
1361
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1362
+ template<class T, class ...Options>
1363
+ #else
1364
+ template<class Config>
1365
+ #endif
1366
+ inline bool operator!=
1367
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1368
+ (const list_impl<T, Options...> &x, const list_impl<T, Options...> &y)
1369
+ #else
1370
+ (const list_impl<Config> &x, const list_impl<Config> &y)
1371
+ #endif
1372
+ { return !(x == y); }
1373
+
1374
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1375
+ template<class T, class ...Options>
1376
+ #else
1377
+ template<class Config>
1378
+ #endif
1379
+ inline bool operator>
1380
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1381
+ (const list_impl<T, Options...> &x, const list_impl<T, Options...> &y)
1382
+ #else
1383
+ (const list_impl<Config> &x, const list_impl<Config> &y)
1384
+ #endif
1385
+ { return y < x; }
1386
+
1387
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1388
+ template<class T, class ...Options>
1389
+ #else
1390
+ template<class Config>
1391
+ #endif
1392
+ inline bool operator<=
1393
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1394
+ (const list_impl<T, Options...> &x, const list_impl<T, Options...> &y)
1395
+ #else
1396
+ (const list_impl<Config> &x, const list_impl<Config> &y)
1397
+ #endif
1398
+ { return !(y < x); }
1399
+
1400
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1401
+ template<class T, class ...Options>
1402
+ #else
1403
+ template<class Config>
1404
+ #endif
1405
+ inline bool operator>=
1406
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1407
+ (const list_impl<T, Options...> &x, const list_impl<T, Options...> &y)
1408
+ #else
1409
+ (const list_impl<Config> &x, const list_impl<Config> &y)
1410
+ #endif
1411
+ { return !(x < y); }
1412
+
1413
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1414
+ template<class T, class ...Options>
1415
+ #else
1416
+ template<class Config>
1417
+ #endif
1418
+ inline void swap
1419
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1420
+ (list_impl<T, Options...> &x, list_impl<T, Options...> &y)
1421
+ #else
1422
+ (list_impl<Config> &x, list_impl<Config> &y)
1423
+ #endif
1424
+ { x.swap(y); }
1425
+
1426
+ //! Helper metafunction to define a \c list that yields to the same type when the
1427
+ //! same options (either explicitly or implicitly) are used.
1428
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
1429
+ template<class T, class ...Options>
1430
+ #else
1431
+ template<class T, class O1 = none, class O2 = none, class O3 = none>
1432
+ #endif
1433
+ struct make_list
1434
+ {
1435
+ /// @cond
1436
+ typedef typename pack_options
1437
+ < list_defaults<T>,
1438
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
1439
+ O1, O2, O3
1440
+ #else
1441
+ Options...
1442
+ #endif
1443
+ >::type packed_options;
1444
+
1445
+ typedef typename detail::get_value_traits
1446
+ <T, typename packed_options::value_traits>::type value_traits;
1447
+
1448
+ typedef list_impl
1449
+ <
1450
+ listopt
1451
+ < value_traits
1452
+ , typename packed_options::size_type
1453
+ , packed_options::constant_time_size
1454
+ >
1455
+ > implementation_defined;
1456
+ /// @endcond
1457
+ typedef implementation_defined type;
1458
+ };
1459
+
1460
+
1461
+ #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
1462
+
1463
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
1464
+ template<class T, class O1, class O2, class O3>
1465
+ #else
1466
+ template<class T, class ...Options>
1467
+ #endif
1468
+ class list
1469
+ : public make_list<T,
1470
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
1471
+ O1, O2, O3
1472
+ #else
1473
+ Options...
1474
+ #endif
1475
+ >::type
1476
+ {
1477
+ typedef typename make_list
1478
+ <T,
1479
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
1480
+ O1, O2, O3
1481
+ #else
1482
+ Options...
1483
+ #endif
1484
+ >::type Base;
1485
+ typedef typename Base::real_value_traits real_value_traits;
1486
+ //Assert if passed value traits are compatible with the type
1487
+ BOOST_STATIC_ASSERT((detail::is_same<typename real_value_traits::value_type, T>::value));
1488
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(list)
1489
+
1490
+ public:
1491
+ typedef typename Base::value_traits value_traits;
1492
+ typedef typename Base::iterator iterator;
1493
+ typedef typename Base::const_iterator const_iterator;
1494
+
1495
+ list(const value_traits &v_traits = value_traits())
1496
+ : Base(v_traits)
1497
+ {}
1498
+
1499
+ template<class Iterator>
1500
+ list(Iterator b, Iterator e, const value_traits &v_traits = value_traits())
1501
+ : Base(b, e, v_traits)
1502
+ {}
1503
+
1504
+ list(BOOST_RV_REF(list) x)
1505
+ : Base(::boost::move(static_cast<Base&>(x)))
1506
+ {}
1507
+
1508
+ list& operator=(BOOST_RV_REF(list) x)
1509
+ { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
1510
+
1511
+ static list &container_from_end_iterator(iterator end_iterator)
1512
+ { return static_cast<list &>(Base::container_from_end_iterator(end_iterator)); }
1513
+
1514
+ static const list &container_from_end_iterator(const_iterator end_iterator)
1515
+ { return static_cast<const list &>(Base::container_from_end_iterator(end_iterator)); }
1516
+ };
1517
+
1518
+ #endif
1519
+
1520
+ } //namespace intrusive
1521
+ } //namespace boost
1522
+
1523
+ #include <boost/intrusive/detail/config_end.hpp>
1524
+
1525
+ #endif //BOOST_INTRUSIVE_LIST_HPP