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,2219 @@
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_SLIST_HPP
15
+ #define BOOST_INTRUSIVE_SLIST_HPP
16
+
17
+ #include <boost/intrusive/detail/config_begin.hpp>
18
+ #include <boost/static_assert.hpp>
19
+ #include <boost/intrusive/detail/assert.hpp>
20
+ #include <boost/intrusive/intrusive_fwd.hpp>
21
+ #include <boost/intrusive/slist_hook.hpp>
22
+ #include <boost/intrusive/circular_slist_algorithms.hpp>
23
+ #include <boost/intrusive/linear_slist_algorithms.hpp>
24
+ #include <boost/intrusive/pointer_traits.hpp>
25
+ #include <boost/intrusive/detail/clear_on_destructor_base.hpp>
26
+ #include <boost/intrusive/link_mode.hpp>
27
+ #include <boost/intrusive/options.hpp>
28
+ #include <boost/intrusive/detail/utilities.hpp>
29
+ #include <iterator>
30
+ #include <functional>
31
+ #include <algorithm>
32
+ #include <cstddef> //std::size_t
33
+ #include <utility> //std::pair
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, bool Linear, bool CacheLast>
42
+ struct slistopt
43
+ {
44
+ typedef ValueTraits value_traits;
45
+ typedef SizeType size_type;
46
+ static const bool constant_time_size = ConstantTimeSize;
47
+ static const bool linear = Linear;
48
+ static const bool cache_last = CacheLast;
49
+ };
50
+
51
+ template<class Node, class NodePtr, bool>
52
+ struct root_plus_last
53
+ {
54
+ Node root_;
55
+ NodePtr last_;
56
+ };
57
+
58
+ template<class Node, class NodePtr>
59
+ struct root_plus_last<Node, NodePtr, false>
60
+ {
61
+ Node root_;
62
+ };
63
+
64
+ template <class T>
65
+ struct slist_defaults
66
+ : pack_options
67
+ < none
68
+ , base_hook<detail::default_slist_hook>
69
+ , constant_time_size<true>
70
+ , linear<false>
71
+ , size_type<std::size_t>
72
+ , cache_last<false>
73
+ >::type
74
+ {};
75
+
76
+ /// @endcond
77
+
78
+ //! The class template slist is an intrusive container, that encapsulates
79
+ //! a singly-linked list. You can use such a list to squeeze the last bit
80
+ //! of performance from your application. Unfortunately, the little gains
81
+ //! come with some huge drawbacks. A lot of member functions can't be
82
+ //! implemented as efficiently as for standard containers. To overcome
83
+ //! this limitation some other member functions with rather unusual semantics
84
+ //! have to be introduced.
85
+ //!
86
+ //! The template parameter \c T is the type to be managed by the container.
87
+ //! The user can specify additional options and if no options are provided
88
+ //! default options are used.
89
+ //!
90
+ //! The container supports the following options:
91
+ //! \c base_hook<>/member_hook<>/value_traits<>,
92
+ //! \c constant_time_size<>, \c size_type<>,
93
+ //! \c linear<> and \c cache_last<>.
94
+ //!
95
+ //! The iterators of slist are forward iterators. slist provides a static
96
+ //! function called "previous" to compute the previous iterator of a given iterator.
97
+ //! This function has linear complexity. To improve the usability esp. with
98
+ //! the '*_after' functions, ++end() == begin() and previous(begin()) == end()
99
+ //! are defined. An new special function "before_begin()" is defined, which returns
100
+ //! an iterator that points one less the beginning of the list: ++before_begin() == begin()
101
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
102
+ template<class T, class ...Options>
103
+ #else
104
+ template<class Config>
105
+ #endif
106
+ class slist_impl
107
+ : private detail::clear_on_destructor_base<slist_impl<Config> >
108
+ {
109
+ template<class C> friend class detail::clear_on_destructor_base;
110
+ //Public typedefs
111
+ public:
112
+ typedef typename Config::value_traits value_traits;
113
+ /// @cond
114
+ static const bool external_value_traits =
115
+ detail::external_value_traits_bool_is_true<value_traits>::value;
116
+ typedef typename detail::eval_if_c
117
+ < external_value_traits
118
+ , detail::eval_value_traits<value_traits>
119
+ , detail::identity<value_traits>
120
+ >::type real_value_traits;
121
+ /// @endcond
122
+ typedef typename real_value_traits::pointer pointer;
123
+ typedef typename real_value_traits::const_pointer const_pointer;
124
+ typedef typename pointer_traits<pointer>::element_type value_type;
125
+ typedef typename pointer_traits<pointer>::reference reference;
126
+ typedef typename pointer_traits<const_pointer>::reference const_reference;
127
+ typedef typename pointer_traits<pointer>::difference_type difference_type;
128
+ typedef typename Config::size_type size_type;
129
+ typedef slist_iterator<slist_impl, false> iterator;
130
+ typedef slist_iterator<slist_impl, true> const_iterator;
131
+ typedef typename real_value_traits::node_traits node_traits;
132
+ typedef typename node_traits::node node;
133
+ typedef typename node_traits::node_ptr node_ptr;
134
+ typedef typename node_traits::const_node_ptr const_node_ptr;
135
+
136
+ typedef typename detail::if_c
137
+ < Config::linear
138
+ , linear_slist_algorithms<node_traits>
139
+ , circular_slist_algorithms<node_traits>
140
+ >::type node_algorithms;
141
+
142
+ static const bool constant_time_size = Config::constant_time_size;
143
+ static const bool stateful_value_traits = detail::is_stateful_value_traits<real_value_traits>::value;
144
+ static const bool linear = Config::linear;
145
+ static const bool cache_last = Config::cache_last;
146
+
147
+ /// @cond
148
+ private:
149
+ typedef detail::size_holder<constant_time_size, size_type> size_traits;
150
+
151
+ //noncopyable
152
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(slist_impl)
153
+
154
+ enum { safemode_or_autounlink =
155
+ (int)real_value_traits::link_mode == (int)auto_unlink ||
156
+ (int)real_value_traits::link_mode == (int)safe_link };
157
+
158
+ //Constant-time size is incompatible with auto-unlink hooks!
159
+ BOOST_STATIC_ASSERT(!(constant_time_size && ((int)real_value_traits::link_mode == (int)auto_unlink)));
160
+ //Linear singly linked lists are incompatible with auto-unlink hooks!
161
+ BOOST_STATIC_ASSERT(!(linear && ((int)real_value_traits::link_mode == (int)auto_unlink)));
162
+ //A list with cached last node is incompatible with auto-unlink hooks!
163
+ BOOST_STATIC_ASSERT(!(cache_last && ((int)real_value_traits::link_mode == (int)auto_unlink)));
164
+
165
+ node_ptr get_end_node()
166
+ { return node_ptr(linear ? node_ptr() : this->get_root_node()); }
167
+
168
+ const_node_ptr get_end_node() const
169
+ {
170
+ return const_node_ptr
171
+ (linear ? const_node_ptr() : this->get_root_node()); }
172
+
173
+ node_ptr get_root_node()
174
+ { return pointer_traits<node_ptr>::pointer_to(data_.root_plus_size_.root_); }
175
+
176
+ const_node_ptr get_root_node() const
177
+ { return pointer_traits<const_node_ptr>::pointer_to(data_.root_plus_size_.root_); }
178
+
179
+ node_ptr get_last_node()
180
+ { return this->get_last_node(detail::bool_<cache_last>()); }
181
+
182
+ const_node_ptr get_last_node() const
183
+ { return this->get_last_node(detail::bool_<cache_last>()); }
184
+
185
+ void set_last_node(const node_ptr &n)
186
+ { return this->set_last_node(n, detail::bool_<cache_last>()); }
187
+
188
+ static node_ptr get_last_node(detail::bool_<false>)
189
+ {
190
+ //This function shall not be used if cache_last is not true
191
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(cache_last);
192
+ return node_ptr();
193
+ }
194
+
195
+ static void set_last_node(const node_ptr &, detail::bool_<false>)
196
+ {
197
+ //This function shall not be used if cache_last is not true
198
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(cache_last);
199
+ }
200
+
201
+ node_ptr get_last_node(detail::bool_<true>)
202
+ { return node_ptr(data_.root_plus_size_.last_); }
203
+
204
+ const_node_ptr get_last_node(detail::bool_<true>) const
205
+ { return const_node_ptr(data_.root_plus_size_.last_); }
206
+
207
+ void set_last_node(const node_ptr & n, detail::bool_<true>)
208
+ { data_.root_plus_size_.last_ = n; }
209
+
210
+ static node_ptr uncast(const const_node_ptr & ptr)
211
+ { return pointer_traits<node_ptr>::const_cast_from(ptr); }
212
+
213
+ void set_default_constructed_state()
214
+ {
215
+ node_algorithms::init_header(this->get_root_node());
216
+ this->priv_size_traits().set_size(size_type(0));
217
+ if(cache_last){
218
+ this->set_last_node(this->get_root_node());
219
+ }
220
+ }
221
+
222
+ struct root_plus_size
223
+ : public size_traits
224
+ , public root_plus_last<node, node_ptr, cache_last>
225
+ {};
226
+
227
+ struct data_t
228
+ : public slist_impl::value_traits
229
+ {
230
+ typedef typename slist_impl::value_traits value_traits;
231
+ data_t(const value_traits &val_traits)
232
+ : value_traits(val_traits)
233
+ {}
234
+
235
+ root_plus_size root_plus_size_;
236
+ } data_;
237
+
238
+ size_traits &priv_size_traits()
239
+ { return data_.root_plus_size_; }
240
+
241
+ const size_traits &priv_size_traits() const
242
+ { return data_.root_plus_size_; }
243
+
244
+ const real_value_traits &get_real_value_traits(detail::bool_<false>) const
245
+ { return data_; }
246
+
247
+ const real_value_traits &get_real_value_traits(detail::bool_<true>) const
248
+ { return data_.get_value_traits(*this); }
249
+
250
+ real_value_traits &get_real_value_traits(detail::bool_<false>)
251
+ { return data_; }
252
+
253
+ real_value_traits &get_real_value_traits(detail::bool_<true>)
254
+ { return data_.get_value_traits(*this); }
255
+
256
+ const value_traits &priv_value_traits() const
257
+ { return data_; }
258
+
259
+ value_traits &priv_value_traits()
260
+ { return data_; }
261
+
262
+ protected:
263
+ node &prot_root_node()
264
+ { return data_.root_plus_size_.root_; }
265
+
266
+ node const &prot_root_node() const
267
+ { return data_.root_plus_size_.root_; }
268
+
269
+ void prot_set_size(size_type s)
270
+ { data_.root_plus_size_.set_size(s); }
271
+
272
+ /// @endcond
273
+
274
+ public:
275
+
276
+ const real_value_traits &get_real_value_traits() const
277
+ { return this->get_real_value_traits(detail::bool_<external_value_traits>()); }
278
+
279
+ real_value_traits &get_real_value_traits()
280
+ { return this->get_real_value_traits(detail::bool_<external_value_traits>()); }
281
+
282
+ public:
283
+
284
+ ///@cond
285
+
286
+ //! <b>Requires</b>: f and before_l belong to another slist.
287
+ //!
288
+ //! <b>Effects</b>: Transfers the range [f, before_l] to this
289
+ //! list, after the element pointed by prev_pos.
290
+ //! No destructors or copy constructors are called.
291
+ //!
292
+ //! <b>Throws</b>: Nothing.
293
+ //!
294
+ //! <b>Complexity</b>: Linear to the number of elements transferred
295
+ //! if constant_time_size is true. Constant-time otherwise.
296
+ //!
297
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
298
+ //! list. Iterators of this list and all the references are not invalidated.
299
+ //!
300
+ //! <b>Warning</b>: Experimental function, don't use it!
301
+ slist_impl( const node_ptr & f, const node_ptr & before_l
302
+ , size_type n, const value_traits &v_traits = value_traits())
303
+ : data_(v_traits)
304
+ {
305
+ if(n){
306
+ this->priv_size_traits().set_size(n);
307
+ if(cache_last){
308
+ this->set_last_node(before_l);
309
+ }
310
+ node_traits::set_next(this->get_root_node(), f);
311
+ node_traits::set_next(before_l, this->get_end_node());
312
+ }
313
+ else{
314
+ this->set_default_constructed_state();
315
+ }
316
+ }
317
+
318
+ ///@endcond
319
+
320
+ //! <b>Effects</b>: constructs an empty list.
321
+ //!
322
+ //! <b>Complexity</b>: Constant
323
+ //!
324
+ //! <b>Throws</b>: If value_traits::node_traits::node
325
+ //! constructor throws (this does not happen with predefined Boost.Intrusive hooks).
326
+ explicit slist_impl(const value_traits &v_traits = value_traits())
327
+ : data_(v_traits)
328
+ { this->set_default_constructed_state(); }
329
+
330
+ //! <b>Requires</b>: Dereferencing iterator must yield an lvalue of type value_type.
331
+ //!
332
+ //! <b>Effects</b>: Constructs a list equal to [b ,e).
333
+ //!
334
+ //! <b>Complexity</b>: Linear in std::distance(b, e). No copy constructors are called.
335
+ //!
336
+ //! <b>Throws</b>: If value_traits::node_traits::node
337
+ //! constructor throws (this does not happen with predefined Boost.Intrusive hooks).
338
+ template<class Iterator>
339
+ slist_impl(Iterator b, Iterator e, const value_traits &v_traits = value_traits())
340
+ : data_(v_traits)
341
+ {
342
+ this->set_default_constructed_state();
343
+ this->insert_after(this->cbefore_begin(), b, e);
344
+ }
345
+
346
+ //! <b>Effects</b>: to-do
347
+ //!
348
+ slist_impl(BOOST_RV_REF(slist_impl) x)
349
+ : data_(::boost::move(x.priv_value_traits()))
350
+ {
351
+ this->priv_size_traits().set_size(size_type(0));
352
+ node_algorithms::init_header(this->get_root_node());
353
+ this->swap(x);
354
+ }
355
+
356
+ //! <b>Effects</b>: to-do
357
+ //!
358
+ slist_impl& operator=(BOOST_RV_REF(slist_impl) x)
359
+ { this->swap(x); return *this; }
360
+
361
+ //! <b>Effects</b>: If it's a safe-mode
362
+ //! or auto-unlink value, the destructor does nothing
363
+ //! (ie. no code is generated). Otherwise it detaches all elements from this.
364
+ //! In this case the objects in the list are not deleted (i.e. no destructors
365
+ //! are called), but the hooks according to the value_traits template parameter
366
+ //! are set to their default value.
367
+ //!
368
+ //! <b>Complexity</b>: Linear to the number of elements in the list, if
369
+ //! it's a safe-mode or auto-unlink value. Otherwise constant.
370
+ ~slist_impl()
371
+ {}
372
+
373
+ //! <b>Effects</b>: Erases all the elements of the container.
374
+ //!
375
+ //! <b>Throws</b>: Nothing.
376
+ //!
377
+ //! <b>Complexity</b>: Linear to the number of elements of the list.
378
+ //! if it's a safe-mode or auto-unlink value_type. Constant time otherwise.
379
+ //!
380
+ //! <b>Note</b>: Invalidates the iterators (but not the references) to the erased elements.
381
+ void clear()
382
+ {
383
+ if(safemode_or_autounlink){
384
+ this->clear_and_dispose(detail::null_disposer());
385
+ }
386
+ else{
387
+ this->set_default_constructed_state();
388
+ }
389
+ }
390
+
391
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
392
+ //!
393
+ //! <b>Effects</b>: Erases all the elements of the container
394
+ //! Disposer::operator()(pointer) is called for the removed elements.
395
+ //!
396
+ //! <b>Throws</b>: Nothing.
397
+ //!
398
+ //! <b>Complexity</b>: Linear to the number of elements of the list.
399
+ //!
400
+ //! <b>Note</b>: Invalidates the iterators to the erased elements.
401
+ template <class Disposer>
402
+ void clear_and_dispose(Disposer disposer)
403
+ {
404
+ const_iterator it(this->begin()), itend(this->end());
405
+ while(it != itend){
406
+ node_ptr to_erase(it.pointed_node());
407
+ ++it;
408
+ if(safemode_or_autounlink)
409
+ node_algorithms::init(to_erase);
410
+ disposer(get_real_value_traits().to_value_ptr(to_erase));
411
+ }
412
+ this->set_default_constructed_state();
413
+ }
414
+
415
+ //! <b>Requires</b>: value must be an lvalue.
416
+ //!
417
+ //! <b>Effects</b>: Inserts the value in the front of the list.
418
+ //! No copy constructors are called.
419
+ //!
420
+ //! <b>Throws</b>: Nothing.
421
+ //!
422
+ //! <b>Complexity</b>: Constant.
423
+ //!
424
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
425
+ void push_front(reference value)
426
+ {
427
+ node_ptr to_insert = get_real_value_traits().to_node_ptr(value);
428
+ if(safemode_or_autounlink)
429
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::inited(to_insert));
430
+ if(cache_last){
431
+ if(this->empty()){
432
+ this->set_last_node(to_insert);
433
+ }
434
+ }
435
+ node_algorithms::link_after(this->get_root_node(), to_insert);
436
+ this->priv_size_traits().increment();
437
+ }
438
+
439
+ //! <b>Requires</b>: value must be an lvalue.
440
+ //!
441
+ //! <b>Effects</b>: Inserts the value in the back of the list.
442
+ //! No copy constructors are called.
443
+ //!
444
+ //! <b>Throws</b>: Nothing.
445
+ //!
446
+ //! <b>Complexity</b>: Constant.
447
+ //!
448
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
449
+ //! This function is only available is cache_last<> is true.
450
+ void push_back(reference value)
451
+ {
452
+ BOOST_STATIC_ASSERT((cache_last));
453
+ node_ptr n = get_real_value_traits().to_node_ptr(value);
454
+ if(safemode_or_autounlink)
455
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::inited(n));
456
+ node_algorithms::link_after(this->get_last_node(), n);
457
+ if(cache_last){
458
+ this->set_last_node(n);
459
+ }
460
+ this->priv_size_traits().increment();
461
+ }
462
+
463
+ //! <b>Effects</b>: Erases the first element of the list.
464
+ //! No destructors are called.
465
+ //!
466
+ //! <b>Throws</b>: Nothing.
467
+ //!
468
+ //! <b>Complexity</b>: Constant.
469
+ //!
470
+ //! <b>Note</b>: Invalidates the iterators (but not the references) to the erased element.
471
+ void pop_front()
472
+ { return this->pop_front_and_dispose(detail::null_disposer()); }
473
+
474
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
475
+ //!
476
+ //! <b>Effects</b>: Erases the first element of the list.
477
+ //! Disposer::operator()(pointer) is called for the removed element.
478
+ //!
479
+ //! <b>Throws</b>: Nothing.
480
+ //!
481
+ //! <b>Complexity</b>: Constant.
482
+ //!
483
+ //! <b>Note</b>: Invalidates the iterators to the erased element.
484
+ template<class Disposer>
485
+ void pop_front_and_dispose(Disposer disposer)
486
+ {
487
+ node_ptr to_erase = node_traits::get_next(this->get_root_node());
488
+ node_algorithms::unlink_after(this->get_root_node());
489
+ this->priv_size_traits().decrement();
490
+ if(safemode_or_autounlink)
491
+ node_algorithms::init(to_erase);
492
+ disposer(get_real_value_traits().to_value_ptr(to_erase));
493
+ if(cache_last){
494
+ if(this->empty()){
495
+ this->set_last_node(this->get_root_node());
496
+ }
497
+ }
498
+ }
499
+
500
+ //! <b>Effects</b>: Returns a reference to the first element of the list.
501
+ //!
502
+ //! <b>Throws</b>: Nothing.
503
+ //!
504
+ //! <b>Complexity</b>: Constant.
505
+ reference front()
506
+ { return *this->get_real_value_traits().to_value_ptr(node_traits::get_next(this->get_root_node())); }
507
+
508
+ //! <b>Effects</b>: Returns a const_reference to the first element of the list.
509
+ //!
510
+ //! <b>Throws</b>: Nothing.
511
+ //!
512
+ //! <b>Complexity</b>: Constant.
513
+ const_reference front() const
514
+ { return *this->get_real_value_traits().to_value_ptr(uncast(node_traits::get_next(this->get_root_node()))); }
515
+
516
+ //! <b>Effects</b>: Returns a reference to the last element of the list.
517
+ //!
518
+ //! <b>Throws</b>: Nothing.
519
+ //!
520
+ //! <b>Complexity</b>: Constant.
521
+ //!
522
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
523
+ //! This function is only available is cache_last<> is true.
524
+ reference back()
525
+ {
526
+ BOOST_STATIC_ASSERT((cache_last));
527
+ return *this->get_real_value_traits().to_value_ptr(this->get_last_node());
528
+ }
529
+
530
+ //! <b>Effects</b>: Returns a const_reference to the last element of the list.
531
+ //!
532
+ //! <b>Throws</b>: Nothing.
533
+ //!
534
+ //! <b>Complexity</b>: Constant.
535
+ //!
536
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
537
+ //! This function is only available is cache_last<> is true.
538
+ const_reference back() const
539
+ {
540
+ BOOST_STATIC_ASSERT((cache_last));
541
+ return *this->get_real_value_traits().to_value_ptr(this->get_last_node());
542
+ }
543
+
544
+ //! <b>Effects</b>: Returns an iterator to the first element contained in the list.
545
+ //!
546
+ //! <b>Throws</b>: Nothing.
547
+ //!
548
+ //! <b>Complexity</b>: Constant.
549
+ iterator begin()
550
+ { return iterator (node_traits::get_next(this->get_root_node()), this); }
551
+
552
+ //! <b>Effects</b>: Returns a const_iterator to the first element contained in the list.
553
+ //!
554
+ //! <b>Throws</b>: Nothing.
555
+ //!
556
+ //! <b>Complexity</b>: Constant.
557
+ const_iterator begin() const
558
+ { return const_iterator (node_traits::get_next(this->get_root_node()), this); }
559
+
560
+ //! <b>Effects</b>: Returns a const_iterator to the first element contained in the list.
561
+ //!
562
+ //! <b>Throws</b>: Nothing.
563
+ //!
564
+ //! <b>Complexity</b>: Constant.
565
+ const_iterator cbegin() const
566
+ { return const_iterator(node_traits::get_next(this->get_root_node()), this); }
567
+
568
+ //! <b>Effects</b>: Returns an iterator to the end of the list.
569
+ //!
570
+ //! <b>Throws</b>: Nothing.
571
+ //!
572
+ //! <b>Complexity</b>: Constant.
573
+ iterator end()
574
+ { return iterator(this->get_end_node(), this); }
575
+
576
+ //! <b>Effects</b>: Returns a const_iterator to the end of the list.
577
+ //!
578
+ //! <b>Throws</b>: Nothing.
579
+ //!
580
+ //! <b>Complexity</b>: Constant.
581
+ const_iterator end() const
582
+ { return const_iterator(uncast(this->get_end_node()), this); }
583
+
584
+ //! <b>Effects</b>: Returns a const_iterator to the end of the list.
585
+ //!
586
+ //! <b>Throws</b>: Nothing.
587
+ //!
588
+ //! <b>Complexity</b>: Constant.
589
+ const_iterator cend() const
590
+ { return this->end(); }
591
+
592
+ //! <b>Effects</b>: Returns an iterator that points to a position
593
+ //! before the first element. Equivalent to "end()"
594
+ //!
595
+ //! <b>Throws</b>: Nothing.
596
+ //!
597
+ //! <b>Complexity</b>: Constant.
598
+ iterator before_begin()
599
+ { return iterator(this->get_root_node(), this); }
600
+
601
+ //! <b>Effects</b>: Returns an iterator that points to a position
602
+ //! before the first element. Equivalent to "end()"
603
+ //!
604
+ //! <b>Throws</b>: Nothing.
605
+ //!
606
+ //! <b>Complexity</b>: Constant.
607
+ const_iterator before_begin() const
608
+ { return const_iterator(uncast(this->get_root_node()), this); }
609
+
610
+ //! <b>Effects</b>: Returns an iterator that points to a position
611
+ //! before the first element. Equivalent to "end()"
612
+ //!
613
+ //! <b>Throws</b>: Nothing.
614
+ //!
615
+ //! <b>Complexity</b>: Constant.
616
+ const_iterator cbefore_begin() const
617
+ { return this->before_begin(); }
618
+
619
+ //! <b>Effects</b>: Returns an iterator to the last element contained in the list.
620
+ //!
621
+ //! <b>Throws</b>: Nothing.
622
+ //!
623
+ //! <b>Complexity</b>: Constant.
624
+ //!
625
+ //! <b>Note</b>: This function is present only if cached_last<> option is true.
626
+ iterator last()
627
+ {
628
+ //This function shall not be used if cache_last is not true
629
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(cache_last);
630
+ return iterator (this->get_last_node(), this);
631
+ }
632
+
633
+ //! <b>Effects</b>: Returns a const_iterator to the last element contained in the list.
634
+ //!
635
+ //! <b>Throws</b>: Nothing.
636
+ //!
637
+ //! <b>Complexity</b>: Constant.
638
+ //!
639
+ //! <b>Note</b>: This function is present only if cached_last<> option is true.
640
+ const_iterator last() const
641
+ {
642
+ //This function shall not be used if cache_last is not true
643
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(cache_last);
644
+ return const_iterator (this->get_last_node(), this);
645
+ }
646
+
647
+ //! <b>Effects</b>: Returns a const_iterator to the last element contained in the list.
648
+ //!
649
+ //! <b>Throws</b>: Nothing.
650
+ //!
651
+ //! <b>Complexity</b>: Constant.
652
+ //!
653
+ //! <b>Note</b>: This function is present only if cached_last<> option is true.
654
+ const_iterator clast() const
655
+ { return const_iterator(this->get_last_node(), this); }
656
+
657
+ //! <b>Precondition</b>: end_iterator must be a valid end iterator
658
+ //! of slist.
659
+ //!
660
+ //! <b>Effects</b>: Returns a const reference to the slist associated to the end iterator
661
+ //!
662
+ //! <b>Throws</b>: Nothing.
663
+ //!
664
+ //! <b>Complexity</b>: Constant.
665
+ static slist_impl &container_from_end_iterator(iterator end_iterator)
666
+ { return slist_impl::priv_container_from_end_iterator(end_iterator); }
667
+
668
+ //! <b>Precondition</b>: end_iterator must be a valid end const_iterator
669
+ //! of slist.
670
+ //!
671
+ //! <b>Effects</b>: Returns a const reference to the slist associated to the end iterator
672
+ //!
673
+ //! <b>Throws</b>: Nothing.
674
+ //!
675
+ //! <b>Complexity</b>: Constant.
676
+ static const slist_impl &container_from_end_iterator(const_iterator end_iterator)
677
+ { return slist_impl::priv_container_from_end_iterator(end_iterator); }
678
+
679
+ //! <b>Effects</b>: Returns the number of the elements contained in the list.
680
+ //!
681
+ //! <b>Throws</b>: Nothing.
682
+ //!
683
+ //! <b>Complexity</b>: Linear to the number of elements contained in the list.
684
+ //! if constant_time_size is false. Constant time otherwise.
685
+ //!
686
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
687
+ size_type size() const
688
+ {
689
+ if(constant_time_size)
690
+ return this->priv_size_traits().get_size();
691
+ else
692
+ return node_algorithms::count(this->get_root_node()) - 1;
693
+ }
694
+
695
+ //! <b>Effects</b>: Returns true if the list contains no elements.
696
+ //!
697
+ //! <b>Throws</b>: Nothing.
698
+ //!
699
+ //! <b>Complexity</b>: Constant.
700
+ //!
701
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
702
+ bool empty() const
703
+ { return node_algorithms::unique(this->get_root_node()); }
704
+
705
+ //! <b>Effects</b>: Swaps the elements of x and *this.
706
+ //!
707
+ //! <b>Throws</b>: Nothing.
708
+ //!
709
+ //! <b>Complexity</b>: Linear to the number of elements of both lists.
710
+ //! Constant-time if linear<> and/or cache_last<> options are used.
711
+ //!
712
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
713
+ void swap(slist_impl& other)
714
+ {
715
+ if(cache_last){
716
+ priv_swap_cache_last(this, &other);
717
+ }
718
+ else{
719
+ this->priv_swap_lists(this->get_root_node(), other.get_root_node(), detail::bool_<linear>());
720
+ }
721
+ if(constant_time_size){
722
+ size_type backup = this->priv_size_traits().get_size();
723
+ this->priv_size_traits().set_size(other.priv_size_traits().get_size());
724
+ other.priv_size_traits().set_size(backup);
725
+ }
726
+ }
727
+
728
+ //! <b>Effects</b>: Moves backwards all the elements, so that the first
729
+ //! element becomes the second, the second becomes the third...
730
+ //! the last element becomes the first one.
731
+ //!
732
+ //! <b>Throws</b>: Nothing.
733
+ //!
734
+ //! <b>Complexity</b>: Linear to the number of elements plus the number shifts.
735
+ //!
736
+ //! <b>Note</b>: Iterators Does not affect the validity of iterators and references.
737
+ void shift_backwards(size_type n = 1)
738
+ { this->priv_shift_backwards(n, detail::bool_<linear>()); }
739
+
740
+ //! <b>Effects</b>: Moves forward all the elements, so that the second
741
+ //! element becomes the first, the third becomes the second...
742
+ //! the first element becomes the last one.
743
+ //!
744
+ //! <b>Throws</b>: Nothing.
745
+ //!
746
+ //! <b>Complexity</b>: Linear to the number of elements plus the number shifts.
747
+ //!
748
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
749
+ void shift_forward(size_type n = 1)
750
+ { this->priv_shift_forward(n, detail::bool_<linear>()); }
751
+
752
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
753
+ //! Cloner should yield to nodes equivalent to the original nodes.
754
+ //!
755
+ //! <b>Effects</b>: Erases all the elements from *this
756
+ //! calling Disposer::operator()(pointer), clones all the
757
+ //! elements from src calling Cloner::operator()(const_reference )
758
+ //! and inserts them on *this.
759
+ //!
760
+ //! If cloner throws, all cloned elements are unlinked and disposed
761
+ //! calling Disposer::operator()(pointer).
762
+ //!
763
+ //! <b>Complexity</b>: Linear to erased plus inserted elements.
764
+ //!
765
+ //! <b>Throws</b>: If cloner throws.
766
+ template <class Cloner, class Disposer>
767
+ void clone_from(const slist_impl &src, Cloner cloner, Disposer disposer)
768
+ {
769
+ this->clear_and_dispose(disposer);
770
+ detail::exception_disposer<slist_impl, Disposer>
771
+ rollback(*this, disposer);
772
+ const_iterator prev(this->cbefore_begin());
773
+ const_iterator b(src.begin()), e(src.end());
774
+ for(; b != e; ++b){
775
+ prev = this->insert_after(prev, *cloner(*b));
776
+ }
777
+ rollback.release();
778
+ }
779
+
780
+ //! <b>Requires</b>: value must be an lvalue and prev_p must point to an element
781
+ //! contained by the list or to end().
782
+ //!
783
+ //! <b>Effects</b>: Inserts the value after the position pointed by prev_p.
784
+ //! No copy constructor is called.
785
+ //!
786
+ //! <b>Returns</b>: An iterator to the inserted element.
787
+ //!
788
+ //! <b>Throws</b>: Nothing.
789
+ //!
790
+ //! <b>Complexity</b>: Constant.
791
+ //!
792
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
793
+ iterator insert_after(const_iterator prev_p, reference value)
794
+ {
795
+ node_ptr n = get_real_value_traits().to_node_ptr(value);
796
+ if(safemode_or_autounlink)
797
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::inited(n));
798
+ node_ptr prev_n(prev_p.pointed_node());
799
+ node_algorithms::link_after(prev_n, n);
800
+ if(cache_last && (this->get_last_node() == prev_n)){
801
+ this->set_last_node(n);
802
+ }
803
+ this->priv_size_traits().increment();
804
+ return iterator (n, this);
805
+ }
806
+
807
+ //! <b>Requires</b>: Dereferencing iterator must yield
808
+ //! an lvalue of type value_type and prev_p must point to an element
809
+ //! contained by the list or to the end node.
810
+ //!
811
+ //! <b>Effects</b>: Inserts the [f, l)
812
+ //! after the position prev_p.
813
+ //!
814
+ //! <b>Throws</b>: Nothing.
815
+ //!
816
+ //! <b>Complexity</b>: Linear to the number of elements inserted.
817
+ //!
818
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
819
+ template<class Iterator>
820
+ void insert_after(const_iterator prev_p, Iterator f, Iterator l)
821
+ {
822
+ //Insert first nodes avoiding cache and size checks
823
+ size_type count = 0;
824
+ node_ptr prev_n(prev_p.pointed_node());
825
+ for (; f != l; ++f, ++count){
826
+ const node_ptr n = get_real_value_traits().to_node_ptr(*f);
827
+ if(safemode_or_autounlink)
828
+ BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT(node_algorithms::inited(n));
829
+ node_algorithms::link_after(prev_n, n);
830
+ prev_n = n;
831
+ }
832
+ //Now fix special cases if needed
833
+ if(cache_last && (this->get_last_node() == prev_p.pointed_node())){
834
+ this->set_last_node(prev_n);
835
+ }
836
+ if(constant_time_size){
837
+ this->priv_size_traits().increase(count);
838
+ }
839
+ }
840
+
841
+ //! <b>Requires</b>: value must be an lvalue and p must point to an element
842
+ //! contained by the list or to end().
843
+ //!
844
+ //! <b>Effects</b>: Inserts the value before the position pointed by p.
845
+ //! No copy constructor is called.
846
+ //!
847
+ //! <b>Throws</b>: Nothing.
848
+ //!
849
+ //! <b>Complexity</b>: Linear to the number of elements before p.
850
+ //! Constant-time if cache_last<> is true and p == end().
851
+ //!
852
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
853
+ iterator insert(const_iterator p, reference value)
854
+ { return this->insert_after(this->previous(p), value); }
855
+
856
+ //! <b>Requires</b>: Dereferencing iterator must yield
857
+ //! an lvalue of type value_type and p must point to an element
858
+ //! contained by the list or to the end node.
859
+ //!
860
+ //! <b>Effects</b>: Inserts the pointed by b and e
861
+ //! before the position p. No copy constructors are called.
862
+ //!
863
+ //! <b>Throws</b>: Nothing.
864
+ //!
865
+ //! <b>Complexity</b>: Linear to the number of elements inserted plus linear
866
+ //! to the elements before b.
867
+ //! Linear to the number of elements to insert if cache_last<> option is true and p == end().
868
+ //!
869
+ //! <b>Note</b>: Does not affect the validity of iterators and references.
870
+ template<class Iterator>
871
+ void insert(const_iterator p, Iterator b, Iterator e)
872
+ { return this->insert_after(this->previous(p), b, e); }
873
+
874
+ //! <b>Effects</b>: Erases the element after the element pointed by prev of
875
+ //! the list. No destructors are called.
876
+ //!
877
+ //! <b>Returns</b>: the first element remaining beyond the removed elements,
878
+ //! or end() if no such element exists.
879
+ //!
880
+ //! <b>Throws</b>: Nothing.
881
+ //!
882
+ //! <b>Complexity</b>: Constant.
883
+ //!
884
+ //! <b>Note</b>: Invalidates the iterators (but not the references) to the
885
+ //! erased element.
886
+ iterator erase_after(const_iterator prev)
887
+ { return this->erase_after_and_dispose(prev, detail::null_disposer()); }
888
+
889
+ //! <b>Effects</b>: Erases the range (before_f, l) from
890
+ //! the list. No destructors are called.
891
+ //!
892
+ //! <b>Returns</b>: the first element remaining beyond the removed elements,
893
+ //! or end() if no such element exists.
894
+ //!
895
+ //! <b>Throws</b>: Nothing.
896
+ //!
897
+ //! <b>Complexity</b>: Linear to the number of erased elements if it's a safe-mode
898
+ //! , auto-unlink value or constant-time size is activated. Constant time otherwise.
899
+ //!
900
+ //! <b>Note</b>: Invalidates the iterators (but not the references) to the
901
+ //! erased element.
902
+ iterator erase_after(const_iterator before_f, const_iterator l)
903
+ {
904
+ if(safemode_or_autounlink || constant_time_size){
905
+ return this->erase_after_and_dispose(before_f, l, detail::null_disposer());
906
+ }
907
+ else{
908
+ const node_ptr bfp = before_f.pointed_node();
909
+ const node_ptr lp = l.pointed_node();
910
+ if(cache_last){
911
+ if(lp == this->get_end_node()){
912
+ this->set_last_node(bfp);
913
+ }
914
+ }
915
+ node_algorithms::unlink_after(bfp, lp);
916
+ return l.unconst();
917
+ }
918
+ }
919
+
920
+ //! <b>Effects</b>: Erases the range (before_f, l) from
921
+ //! the list. n must be std::distance(before_f, l) - 1.
922
+ //! No destructors are called.
923
+ //!
924
+ //! <b>Returns</b>: the first element remaining beyond the removed elements,
925
+ //! or end() if no such element exists.
926
+ //!
927
+ //! <b>Throws</b>: Nothing.
928
+ //!
929
+ //! <b>Complexity</b>: constant-time if link_mode is normal_link.
930
+ //! Linear to the elements (l - before_f) otherwise.
931
+ //!
932
+ //! <b>Note</b>: Invalidates the iterators (but not the references) to the
933
+ //! erased element.
934
+ iterator erase_after(const_iterator before_f, const_iterator l, size_type n)
935
+ {
936
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(std::distance(++const_iterator(before_f), l) == difference_type(n));
937
+ if(safemode_or_autounlink){
938
+ return this->erase_after(before_f, l);
939
+ }
940
+ else{
941
+ const node_ptr bfp = before_f.pointed_node();
942
+ const node_ptr lp = l.pointed_node();
943
+ if(cache_last){
944
+ if((lp == this->get_end_node())){
945
+ this->set_last_node(bfp);
946
+ }
947
+ }
948
+ node_algorithms::unlink_after(bfp, lp);
949
+ if(constant_time_size){
950
+ this->priv_size_traits().decrease(n);
951
+ }
952
+ return l.unconst();
953
+ }
954
+ }
955
+
956
+ //! <b>Effects</b>: Erases the element pointed by i of the list.
957
+ //! No destructors are called.
958
+ //!
959
+ //! <b>Returns</b>: the first element remaining beyond the removed element,
960
+ //! or end() if no such element exists.
961
+ //!
962
+ //! <b>Throws</b>: Nothing.
963
+ //!
964
+ //! <b>Complexity</b>: Linear to the elements before i.
965
+ //!
966
+ //! <b>Note</b>: Invalidates the iterators (but not the references) to the
967
+ //! erased element.
968
+ iterator erase(const_iterator i)
969
+ { return this->erase_after(this->previous(i)); }
970
+
971
+ //! <b>Requires</b>: f and l must be valid iterator to elements in *this.
972
+ //!
973
+ //! <b>Effects</b>: Erases the range pointed by b and e.
974
+ //! No destructors are called.
975
+ //!
976
+ //! <b>Returns</b>: the first element remaining beyond the removed elements,
977
+ //! or end() if no such element exists.
978
+ //!
979
+ //! <b>Throws</b>: Nothing.
980
+ //!
981
+ //! <b>Complexity</b>: Linear to the elements before l.
982
+ //!
983
+ //! <b>Note</b>: Invalidates the iterators (but not the references) to the
984
+ //! erased elements.
985
+ iterator erase(const_iterator f, const_iterator l)
986
+ { return this->erase_after(this->previous(f), l); }
987
+
988
+ //! <b>Effects</b>: Erases the range [f, l) from
989
+ //! the list. n must be std::distance(f, l).
990
+ //! No destructors are called.
991
+ //!
992
+ //! <b>Returns</b>: the first element remaining beyond the removed elements,
993
+ //! or end() if no such element exists.
994
+ //!
995
+ //! <b>Throws</b>: Nothing.
996
+ //!
997
+ //! <b>Complexity</b>: linear to the elements before f if link_mode is normal_link
998
+ //! and constant_time_size is activated. Linear to the elements before l otherwise.
999
+ //!
1000
+ //! <b>Note</b>: Invalidates the iterators (but not the references) to the
1001
+ //! erased element.
1002
+ iterator erase(const_iterator f, const_iterator l, size_type n)
1003
+ { return this->erase_after(this->previous(f), l, n); }
1004
+
1005
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
1006
+ //!
1007
+ //! <b>Effects</b>: Erases the element after the element pointed by prev of
1008
+ //! the list.
1009
+ //! Disposer::operator()(pointer) is called for the removed element.
1010
+ //!
1011
+ //! <b>Returns</b>: the first element remaining beyond the removed elements,
1012
+ //! or end() if no such element exists.
1013
+ //!
1014
+ //! <b>Throws</b>: Nothing.
1015
+ //!
1016
+ //! <b>Complexity</b>: Constant.
1017
+ //!
1018
+ //! <b>Note</b>: Invalidates the iterators to the erased element.
1019
+ template<class Disposer>
1020
+ iterator erase_after_and_dispose(const_iterator prev, Disposer disposer)
1021
+ {
1022
+ const_iterator it(prev);
1023
+ ++it;
1024
+ node_ptr to_erase(it.pointed_node());
1025
+ ++it;
1026
+ node_ptr prev_n(prev.pointed_node());
1027
+ node_algorithms::unlink_after(prev_n);
1028
+ if(cache_last && (to_erase == this->get_last_node())){
1029
+ this->set_last_node(prev_n);
1030
+ }
1031
+ if(safemode_or_autounlink)
1032
+ node_algorithms::init(to_erase);
1033
+ disposer(get_real_value_traits().to_value_ptr(to_erase));
1034
+ this->priv_size_traits().decrement();
1035
+ return it.unconst();
1036
+ }
1037
+
1038
+ /// @cond
1039
+
1040
+ template<class Disposer>
1041
+ static iterator s_erase_after_and_dispose(const_iterator prev, Disposer disposer)
1042
+ {
1043
+ BOOST_STATIC_ASSERT(((!cache_last)&&(!constant_time_size)&&(!stateful_value_traits)));
1044
+ const_iterator it(prev);
1045
+ ++it;
1046
+ node_ptr to_erase(it.pointed_node());
1047
+ ++it;
1048
+ node_ptr prev_n(prev.pointed_node());
1049
+ node_algorithms::unlink_after(prev_n);
1050
+ if(safemode_or_autounlink)
1051
+ node_algorithms::init(to_erase);
1052
+ disposer(real_value_traits::to_value_ptr(to_erase));
1053
+ return it.unconst();
1054
+ }
1055
+
1056
+ static iterator s_erase_after(const_iterator prev)
1057
+ { return s_erase_after_and_dispose(prev, detail::null_disposer()); }
1058
+
1059
+ /// @endcond
1060
+
1061
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
1062
+ //!
1063
+ //! <b>Effects</b>: Erases the range (before_f, l) from
1064
+ //! the list.
1065
+ //! Disposer::operator()(pointer) is called for the removed elements.
1066
+ //!
1067
+ //! <b>Returns</b>: the first element remaining beyond the removed elements,
1068
+ //! or end() if no such element exists.
1069
+ //!
1070
+ //! <b>Throws</b>: Nothing.
1071
+ //!
1072
+ //! <b>Complexity</b>: Lineal to the elements (l - before_f + 1).
1073
+ //!
1074
+ //! <b>Note</b>: Invalidates the iterators to the erased element.
1075
+ template<class Disposer>
1076
+ iterator erase_after_and_dispose(const_iterator before_f, const_iterator l, Disposer disposer)
1077
+ {
1078
+ node_ptr bfp(before_f.pointed_node()), lp(l.pointed_node());
1079
+ node_ptr fp(node_traits::get_next(bfp));
1080
+ node_algorithms::unlink_after(bfp, lp);
1081
+ while(fp != lp){
1082
+ node_ptr to_erase(fp);
1083
+ fp = node_traits::get_next(fp);
1084
+ if(safemode_or_autounlink)
1085
+ node_algorithms::init(to_erase);
1086
+ disposer(get_real_value_traits().to_value_ptr(to_erase));
1087
+ this->priv_size_traits().decrement();
1088
+ }
1089
+ if(cache_last && (node_traits::get_next(bfp) == this->get_end_node())){
1090
+ this->set_last_node(bfp);
1091
+ }
1092
+ return l.unconst();
1093
+ }
1094
+
1095
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
1096
+ //!
1097
+ //! <b>Effects</b>: Erases the element pointed by i of the list.
1098
+ //! No destructors are called.
1099
+ //! Disposer::operator()(pointer) is called for the removed element.
1100
+ //!
1101
+ //! <b>Returns</b>: the first element remaining beyond the removed element,
1102
+ //! or end() if no such element exists.
1103
+ //!
1104
+ //! <b>Throws</b>: Nothing.
1105
+ //!
1106
+ //! <b>Complexity</b>: Linear to the elements before i.
1107
+ //!
1108
+ //! <b>Note</b>: Invalidates the iterators (but not the references) to the
1109
+ //! erased element.
1110
+ template<class Disposer>
1111
+ iterator erase_and_dispose(const_iterator i, Disposer disposer)
1112
+ { return this->erase_after_and_dispose(this->previous(i), disposer); }
1113
+
1114
+ #if !defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1115
+ template<class Disposer>
1116
+ iterator erase_and_dispose(iterator i, Disposer disposer)
1117
+ { return this->erase_and_dispose(const_iterator(i), disposer); }
1118
+ #endif
1119
+
1120
+ //! <b>Requires</b>: f and l must be valid iterator to elements in *this.
1121
+ //! Disposer::operator()(pointer) shouldn't throw.
1122
+ //!
1123
+ //! <b>Effects</b>: Erases the range pointed by b and e.
1124
+ //! No destructors are called.
1125
+ //! Disposer::operator()(pointer) is called for the removed elements.
1126
+ //!
1127
+ //! <b>Returns</b>: the first element remaining beyond the removed elements,
1128
+ //! or end() if no such element exists.
1129
+ //!
1130
+ //! <b>Throws</b>: Nothing.
1131
+ //!
1132
+ //! <b>Complexity</b>: Linear to the number of erased elements plus linear
1133
+ //! to the elements before f.
1134
+ //!
1135
+ //! <b>Note</b>: Invalidates the iterators (but not the references) to the
1136
+ //! erased elements.
1137
+ template<class Disposer>
1138
+ iterator erase_and_dispose(const_iterator f, const_iterator l, Disposer disposer)
1139
+ { return this->erase_after_and_dispose(this->previous(f), l, disposer); }
1140
+
1141
+ //! <b>Requires</b>: Dereferencing iterator must yield
1142
+ //! an lvalue of type value_type.
1143
+ //!
1144
+ //! <b>Effects</b>: Clears the list and inserts the range pointed by b and e.
1145
+ //! No destructors or copy constructors are called.
1146
+ //!
1147
+ //! <b>Throws</b>: Nothing.
1148
+ //!
1149
+ //! <b>Complexity</b>: Linear to the number of elements inserted plus
1150
+ //! linear to the elements contained in the list if it's a safe-mode
1151
+ //! or auto-unlink value.
1152
+ //! Linear to the number of elements inserted in the list otherwise.
1153
+ //!
1154
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
1155
+ //! to the erased elements.
1156
+ template<class Iterator>
1157
+ void assign(Iterator b, Iterator e)
1158
+ {
1159
+ this->clear();
1160
+ this->insert_after(this->cbefore_begin(), b, e);
1161
+ }
1162
+
1163
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
1164
+ //!
1165
+ //! <b>Requires</b>: Dereferencing iterator must yield
1166
+ //! an lvalue of type value_type.
1167
+ //!
1168
+ //! <b>Effects</b>: Clears the list and inserts the range pointed by b and e.
1169
+ //! No destructors or copy constructors are called.
1170
+ //! Disposer::operator()(pointer) is called for the removed elements.
1171
+ //!
1172
+ //! <b>Throws</b>: Nothing.
1173
+ //!
1174
+ //! <b>Complexity</b>: Linear to the number of elements inserted plus
1175
+ //! linear to the elements contained in the list.
1176
+ //!
1177
+ //! <b>Note</b>: Invalidates the iterators (but not the references)
1178
+ //! to the erased elements.
1179
+ template<class Iterator, class Disposer>
1180
+ void dispose_and_assign(Disposer disposer, Iterator b, Iterator e)
1181
+ {
1182
+ this->clear_and_dispose(disposer);
1183
+ this->insert_after(this->cbefore_begin(), b, e, disposer);
1184
+ }
1185
+
1186
+ //! <b>Requires</b>: prev must point to an element contained by this list or
1187
+ //! to the before_begin() element
1188
+ //!
1189
+ //! <b>Effects</b>: Transfers all the elements of list x to this list, after the
1190
+ //! the element pointed by prev. No destructors or copy constructors are called.
1191
+ //!
1192
+ //! <b>Returns</b>: Nothing.
1193
+ //!
1194
+ //! <b>Throws</b>: Nothing.
1195
+ //!
1196
+ //! <b>Complexity</b>: In general, linear to the elements contained in x.
1197
+ //! Constant-time if cache_last<> option is true and also constant-time if
1198
+ //! linear<> option is true "this" is empty and "l" is not used.
1199
+ //!
1200
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
1201
+ //! list. Iterators of this list and all the references are not invalidated.
1202
+ //!
1203
+ //! <b>Additional note</b>: If the optional parameter "l" is provided, it will be
1204
+ //! assigned to the last spliced element or prev if x is empty.
1205
+ //! This iterator can be used as new "prev" iterator for a new splice_after call.
1206
+ //! that will splice new values after the previously spliced values.
1207
+ void splice_after(const_iterator prev, slist_impl &x, const_iterator *l = 0)
1208
+ {
1209
+ if(x.empty()){
1210
+ if(l) *l = prev;
1211
+ }
1212
+ else if(linear && this->empty()){
1213
+ this->swap(x);
1214
+ if(l) *l = this->previous(this->cend());
1215
+ }
1216
+ else{
1217
+ const_iterator last_x(x.previous(x.end())); //<- constant time if cache_last is active
1218
+ node_ptr prev_n(prev.pointed_node());
1219
+ node_ptr last_x_n(last_x.pointed_node());
1220
+ if(cache_last){
1221
+ x.set_last_node(x.get_root_node());
1222
+ if(node_traits::get_next(prev_n) == this->get_end_node()){
1223
+ this->set_last_node(last_x_n);
1224
+ }
1225
+ }
1226
+ node_algorithms::transfer_after( prev_n, x.before_begin().pointed_node(), last_x_n);
1227
+ this->priv_size_traits().increase(x.priv_size_traits().get_size());
1228
+ x.priv_size_traits().set_size(size_type(0));
1229
+ if(l) *l = last_x;
1230
+ }
1231
+ }
1232
+
1233
+ //! <b>Requires</b>: prev must point to an element contained by this list or
1234
+ //! to the before_begin() element. prev_ele must point to an element contained in list
1235
+ //! x or must be x.before_begin().
1236
+ //!
1237
+ //! <b>Effects</b>: Transfers the element after prev_ele, from list x to this list,
1238
+ //! after the element pointed by prev. No destructors or copy constructors are called.
1239
+ //!
1240
+ //! <b>Throws</b>: Nothing.
1241
+ //!
1242
+ //! <b>Complexity</b>: Constant.
1243
+ //!
1244
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
1245
+ //! list. Iterators of this list and all the references are not invalidated.
1246
+ void splice_after(const_iterator prev_pos, slist_impl &x, const_iterator prev_ele)
1247
+ {
1248
+ const_iterator elem = prev_ele;
1249
+ this->splice_after(prev_pos, x, prev_ele, ++elem, 1);
1250
+ }
1251
+
1252
+ //! <b>Requires</b>: prev_pos must be a dereferenceable iterator in *this or be
1253
+ //! before_begin(), and before_f and before_l belong to x and
1254
+ //! ++before_f != x.end() && before_l != x.end().
1255
+ //!
1256
+ //! <b>Effects</b>: Transfers the range (before_f, before_l] from list x to this
1257
+ //! list, after the element pointed by prev_pos.
1258
+ //! No destructors or copy constructors are called.
1259
+ //!
1260
+ //! <b>Throws</b>: Nothing.
1261
+ //!
1262
+ //! <b>Complexity</b>: Linear to the number of elements transferred
1263
+ //! if constant_time_size is true. Constant-time otherwise.
1264
+ //!
1265
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
1266
+ //! list. Iterators of this list and all the references are not invalidated.
1267
+ void splice_after(const_iterator prev_pos, slist_impl &x, const_iterator before_f, const_iterator before_l)
1268
+ {
1269
+ if(constant_time_size)
1270
+ this->splice_after(prev_pos, x, before_f, before_l, std::distance(before_f, before_l));
1271
+ else
1272
+ this->priv_splice_after
1273
+ (prev_pos.pointed_node(), x, before_f.pointed_node(), before_l.pointed_node());
1274
+ }
1275
+
1276
+ //! <b>Requires</b>: prev_pos must be a dereferenceable iterator in *this or be
1277
+ //! before_begin(), and before_f and before_l belong to x and
1278
+ //! ++before_f != x.end() && before_l != x.end() and
1279
+ //! n == std::distance(before_f, before_l).
1280
+ //!
1281
+ //! <b>Effects</b>: Transfers the range (before_f, before_l] from list x to this
1282
+ //! list, after the element pointed by p. No destructors or copy constructors are called.
1283
+ //!
1284
+ //! <b>Throws</b>: Nothing.
1285
+ //!
1286
+ //! <b>Complexity</b>: Constant time.
1287
+ //!
1288
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
1289
+ //! list. Iterators of this list and all the references are not invalidated.
1290
+ void splice_after(const_iterator prev_pos, slist_impl &x, const_iterator before_f, const_iterator before_l, size_type n)
1291
+ {
1292
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(std::distance(before_f, before_l) == difference_type(n));
1293
+ this->priv_splice_after
1294
+ (prev_pos.pointed_node(), x, before_f.pointed_node(), before_l.pointed_node());
1295
+ if(constant_time_size){
1296
+ this->priv_size_traits().increase(n);
1297
+ x.priv_size_traits().decrease(n);
1298
+ }
1299
+ }
1300
+
1301
+ //! <b>Requires</b>: it is an iterator to an element in *this.
1302
+ //!
1303
+ //! <b>Effects</b>: Transfers all the elements of list x to this list, before the
1304
+ //! the element pointed by it. No destructors or copy constructors are called.
1305
+ //!
1306
+ //! <b>Returns</b>: Nothing.
1307
+ //!
1308
+ //! <b>Throws</b>: Nothing.
1309
+ //!
1310
+ //! <b>Complexity</b>: Linear to the elements contained in x plus linear to
1311
+ //! the elements before it.
1312
+ //! Linear to the elements before it if cache_last<> option is true.
1313
+ //! Constant-time if cache_last<> option is true and it == end().
1314
+ //!
1315
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
1316
+ //! list. Iterators of this list and all the references are not invalidated.
1317
+ //!
1318
+ //! <b>Additional note</b>: If the optional parameter "l" is provided, it will be
1319
+ //! assigned to the last spliced element or prev if x is empty.
1320
+ //! This iterator can be used as new "prev" iterator for a new splice_after call.
1321
+ //! that will splice new values after the previously spliced values.
1322
+ void splice(const_iterator it, slist_impl &x, const_iterator *l = 0)
1323
+ { this->splice_after(this->previous(it), x, l); }
1324
+
1325
+ //! <b>Requires</b>: it p must be a valid iterator of *this.
1326
+ //! elem must point to an element contained in list
1327
+ //! x.
1328
+ //!
1329
+ //! <b>Effects</b>: Transfers the element elem, from list x to this list,
1330
+ //! before the element pointed by pos. No destructors or copy constructors are called.
1331
+ //!
1332
+ //! <b>Throws</b>: Nothing.
1333
+ //!
1334
+ //! <b>Complexity</b>: Linear to the elements before pos and before elem.
1335
+ //! Linear to the elements before elem if cache_last<> option is true and pos == end().
1336
+ //!
1337
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
1338
+ //! list. Iterators of this list and all the references are not invalidated.
1339
+ void splice(const_iterator pos, slist_impl &x, const_iterator elem)
1340
+ { return this->splice_after(this->previous(pos), x, x.previous(elem)); }
1341
+
1342
+ //! <b>Requires</b>: pos must be a dereferenceable iterator in *this
1343
+ //! and f and f belong to x and f and f a valid range on x.
1344
+ //!
1345
+ //! <b>Effects</b>: Transfers the range [f, l) from list x to this
1346
+ //! list, before the element pointed by pos.
1347
+ //! No destructors or copy constructors are called.
1348
+ //!
1349
+ //! <b>Throws</b>: Nothing.
1350
+ //!
1351
+ //! <b>Complexity</b>: Linear to the sum of elements before pos, f, and l
1352
+ //! plus linear to the number of elements transferred if constant_time_size is true.
1353
+ //! Linear to the sum of elements before f, and l
1354
+ //! plus linear to the number of elements transferred if constant_time_size is true
1355
+ //! if cache_last<> is true and pos == end()
1356
+ //!
1357
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
1358
+ //! list. Iterators of this list and all the references are not invalidated.
1359
+ void splice(const_iterator pos, slist_impl &x, const_iterator f, const_iterator l)
1360
+ { return this->splice_after(this->previous(pos), x, x.previous(f), x.previous(l)); }
1361
+
1362
+ //! <b>Requires</b>: pos must be a dereferenceable iterator in *this
1363
+ //! and f and l belong to x and f and l a valid range on x.
1364
+ //! n == std::distance(f, l).
1365
+ //!
1366
+ //! <b>Effects</b>: Transfers the range [f, l) from list x to this
1367
+ //! list, before the element pointed by pos.
1368
+ //! No destructors or copy constructors are called.
1369
+ //!
1370
+ //! <b>Throws</b>: Nothing.
1371
+ //!
1372
+ //! <b>Complexity</b>: Linear to the sum of elements before pos, f, and l.
1373
+ //! Linear to the sum of elements before f and l
1374
+ //! if cache_last<> is true and pos == end().
1375
+ //!
1376
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
1377
+ //! list. Iterators of this list and all the references are not invalidated.
1378
+ void splice(const_iterator pos, slist_impl &x, const_iterator f, const_iterator l, size_type n)
1379
+ { return this->splice_after(this->previous(pos), x, x.previous(f), x.previous(l), n); }
1380
+
1381
+ //! <b>Effects</b>: This function sorts the list *this according to std::less<value_type>.
1382
+ //! The sort is stable, that is, the relative order of equivalent elements is preserved.
1383
+ //!
1384
+ //! <b>Throws</b>: If value_traits::node_traits::node
1385
+ //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
1386
+ //! or the predicate throws. Basic guarantee.
1387
+ //!
1388
+ //! <b>Complexity</b>: The number of comparisons is approximately N log N, where N
1389
+ //! is the list's size.
1390
+ //!
1391
+ //! <b>Note</b>: Iterators and references are not invalidated
1392
+ template<class Predicate>
1393
+ void sort(Predicate p)
1394
+ {
1395
+ if (node_traits::get_next(node_traits::get_next(this->get_root_node()))
1396
+ != this->get_root_node()) {
1397
+
1398
+ slist_impl carry(this->priv_value_traits());
1399
+ detail::array_initializer<slist_impl, 64> counter(this->priv_value_traits());
1400
+ int fill = 0;
1401
+ const_iterator last_inserted;
1402
+ while(!this->empty()){
1403
+ last_inserted = this->cbegin();
1404
+ carry.splice_after(carry.cbefore_begin(), *this, this->cbefore_begin());
1405
+ int i = 0;
1406
+ while(i < fill && !counter[i].empty()) {
1407
+ carry.swap(counter[i]);
1408
+ carry.merge(counter[i++], p, &last_inserted);
1409
+ }
1410
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(counter[i].empty());
1411
+ const_iterator last_element(carry.previous(last_inserted, carry.end()));
1412
+
1413
+ if(constant_time_size){
1414
+ counter[i].splice_after( counter[i].cbefore_begin(), carry
1415
+ , carry.cbefore_begin(), last_element
1416
+ , carry.size());
1417
+ }
1418
+ else{
1419
+ counter[i].splice_after( counter[i].cbefore_begin(), carry
1420
+ , carry.cbefore_begin(), last_element);
1421
+ }
1422
+ if(i == fill)
1423
+ ++fill;
1424
+ }
1425
+
1426
+ for (int i = 1; i < fill; ++i)
1427
+ counter[i].merge(counter[i-1], p, &last_inserted);
1428
+ --fill;
1429
+ const_iterator last_element(counter[fill].previous(last_inserted, counter[fill].end()));
1430
+ if(constant_time_size){
1431
+ this->splice_after( cbefore_begin(), counter[fill], counter[fill].cbefore_begin()
1432
+ , last_element, counter[fill].size());
1433
+ }
1434
+ else{
1435
+ this->splice_after( cbefore_begin(), counter[fill], counter[fill].cbefore_begin()
1436
+ , last_element);
1437
+ }
1438
+ }
1439
+ }
1440
+
1441
+ //! <b>Requires</b>: p must be a comparison function that induces a strict weak
1442
+ //! ordering and both *this and x must be sorted according to that ordering
1443
+ //! The lists x and *this must be distinct.
1444
+ //!
1445
+ //! <b>Effects</b>: This function removes all of x's elements and inserts them
1446
+ //! in order into *this. The merge is stable; that is, if an element from *this is
1447
+ //! equivalent to one from x, then the element from *this will precede the one from x.
1448
+ //!
1449
+ //! <b>Throws</b>: If value_traits::node_traits::node
1450
+ //! constructor throws (this does not happen with predefined Boost.Intrusive hooks)
1451
+ //! or std::less<value_type> throws. Basic guarantee.
1452
+ //!
1453
+ //! <b>Complexity</b>: This function is linear time: it performs at most
1454
+ //! size() + x.size() - 1 comparisons.
1455
+ //!
1456
+ //! <b>Note</b>: Iterators and references are not invalidated.
1457
+ void sort()
1458
+ { this->sort(std::less<value_type>()); }
1459
+
1460
+ //! <b>Requires</b>: p must be a comparison function that induces a strict weak
1461
+ //! ordering and both *this and x must be sorted according to that ordering
1462
+ //! The lists x and *this must be distinct.
1463
+ //!
1464
+ //! <b>Effects</b>: This function removes all of x's elements and inserts them
1465
+ //! in order into *this. The merge is stable; that is, if an element from *this is
1466
+ //! equivalent to one from x, then the element from *this will precede the one from x.
1467
+ //!
1468
+ //! <b>Returns</b>: Nothing.
1469
+ //!
1470
+ //! <b>Throws</b>: If the predicate throws. Basic guarantee.
1471
+ //!
1472
+ //! <b>Complexity</b>: This function is linear time: it performs at most
1473
+ //! size() + x.size() - 1 comparisons.
1474
+ //!
1475
+ //! <b>Note</b>: Iterators and references are not invalidated.
1476
+ //!
1477
+ //! <b>Additional note</b>: If optional "l" argument is passed, it is assigned
1478
+ //! to an iterator to the last transferred value or end() is x is empty.
1479
+ template<class Predicate>
1480
+ void merge(slist_impl& x, Predicate p, const_iterator *l = 0)
1481
+ {
1482
+ const_iterator e(this->cend()), ex(x.cend()), bb(this->cbefore_begin()),
1483
+ bb_next;
1484
+ if(l) *l = e.unconst();
1485
+ while(!x.empty()){
1486
+ const_iterator ibx_next(x.cbefore_begin()), ibx(ibx_next++);
1487
+ while (++(bb_next = bb) != e && !p(*ibx_next, *bb_next)){
1488
+ bb = bb_next;
1489
+ }
1490
+ if(bb_next == e){
1491
+ //Now transfer the rest to the end of the container
1492
+ this->splice_after(bb, x, l);
1493
+ break;
1494
+ }
1495
+ else{
1496
+ size_type n(0);
1497
+ do{
1498
+ ibx = ibx_next; ++n;
1499
+ } while(++(ibx_next = ibx) != ex && p(*ibx_next, *bb_next));
1500
+ this->splice_after(bb, x, x.before_begin(), ibx, n);
1501
+ if(l) *l = ibx;
1502
+ }
1503
+ }
1504
+ }
1505
+
1506
+ //! <b>Effects</b>: This function removes all of x's elements and inserts them
1507
+ //! in order into *this according to std::less<value_type>. The merge is stable;
1508
+ //! that is, if an element from *this is equivalent to one from x, then the element
1509
+ //! from *this will precede the one from x.
1510
+ //!
1511
+ //! <b>Throws</b>: if std::less<value_type> throws. Basic guarantee.
1512
+ //!
1513
+ //! <b>Complexity</b>: This function is linear time: it performs at most
1514
+ //! size() + x.size() - 1 comparisons.
1515
+ //!
1516
+ //! <b>Note</b>: Iterators and references are not invalidated
1517
+ void merge(slist_impl& x)
1518
+ { this->merge(x, std::less<value_type>()); }
1519
+
1520
+ //! <b>Effects</b>: Reverses the order of elements in the list.
1521
+ //!
1522
+ //! <b>Throws</b>: Nothing.
1523
+ //!
1524
+ //! <b>Complexity</b>: This function is linear to the contained elements.
1525
+ //!
1526
+ //! <b>Note</b>: Iterators and references are not invalidated
1527
+ void reverse()
1528
+ {
1529
+ if(cache_last && !this->empty()){
1530
+ this->set_last_node(node_traits::get_next(this->get_root_node()));
1531
+ }
1532
+ this->priv_reverse(detail::bool_<linear>());
1533
+ }
1534
+
1535
+ //! <b>Effects</b>: Removes all the elements that compare equal to value.
1536
+ //! No destructors are called.
1537
+ //!
1538
+ //! <b>Throws</b>: If std::equal_to<value_type> throws. Basic guarantee.
1539
+ //!
1540
+ //! <b>Complexity</b>: Linear time. It performs exactly size() comparisons for equality.
1541
+ //!
1542
+ //! <b>Note</b>: The relative order of elements that are not removed is unchanged,
1543
+ //! and iterators to elements that are not removed remain valid. This function is
1544
+ //! linear time: it performs exactly size() comparisons for equality.
1545
+ void remove(const_reference value)
1546
+ { this->remove_if(detail::equal_to_value<const_reference>(value)); }
1547
+
1548
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
1549
+ //!
1550
+ //! <b>Effects</b>: Removes all the elements that compare equal to value.
1551
+ //! Disposer::operator()(pointer) is called for every removed element.
1552
+ //!
1553
+ //! <b>Throws</b>: If std::equal_to<value_type> throws. Basic guarantee.
1554
+ //!
1555
+ //! <b>Complexity</b>: Linear time. It performs exactly size() comparisons for equality.
1556
+ //!
1557
+ //! <b>Note</b>: The relative order of elements that are not removed is unchanged,
1558
+ //! and iterators to elements that are not removed remain valid.
1559
+ template<class Disposer>
1560
+ void remove_and_dispose(const_reference value, Disposer disposer)
1561
+ { this->remove_and_dispose_if(detail::equal_to_value<const_reference>(value), disposer); }
1562
+
1563
+ //! <b>Effects</b>: Removes all the elements for which a specified
1564
+ //! predicate is satisfied. No destructors are called.
1565
+ //!
1566
+ //! <b>Throws</b>: If pred throws. Basic guarantee.
1567
+ //!
1568
+ //! <b>Complexity</b>: Linear time. It performs exactly size() calls to the predicate.
1569
+ //!
1570
+ //! <b>Note</b>: The relative order of elements that are not removed is unchanged,
1571
+ //! and iterators to elements that are not removed remain valid.
1572
+ template<class Pred>
1573
+ void remove_if(Pred pred)
1574
+ { this->remove_and_dispose_if(pred, detail::null_disposer()); }
1575
+
1576
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
1577
+ //!
1578
+ //! <b>Effects</b>: Removes all the elements for which a specified
1579
+ //! predicate is satisfied.
1580
+ //! Disposer::operator()(pointer) is called for every removed element.
1581
+ //!
1582
+ //! <b>Throws</b>: If pred throws. Basic guarantee.
1583
+ //!
1584
+ //! <b>Complexity</b>: Linear time. It performs exactly size() comparisons for equality.
1585
+ //!
1586
+ //! <b>Note</b>: The relative order of elements that are not removed is unchanged,
1587
+ //! and iterators to elements that are not removed remain valid.
1588
+ template<class Pred, class Disposer>
1589
+ void remove_and_dispose_if(Pred pred, Disposer disposer)
1590
+ {
1591
+ const_iterator bcur(this->before_begin()), cur(this->begin()), e(this->end());
1592
+
1593
+ while(cur != e){
1594
+ if (pred(*cur)){
1595
+ cur = this->erase_after_and_dispose(bcur, disposer);
1596
+ }
1597
+ else{
1598
+ bcur = cur;
1599
+ ++cur;
1600
+ }
1601
+ }
1602
+ if(cache_last){
1603
+ this->set_last_node(bcur.pointed_node());
1604
+ }
1605
+ }
1606
+
1607
+ //! <b>Effects</b>: Removes adjacent duplicate elements or adjacent
1608
+ //! elements that are equal from the list. No destructors are called.
1609
+ //!
1610
+ //! <b>Throws</b>: If std::equal_to<value_type> throws. Basic guarantee.
1611
+ //!
1612
+ //! <b>Complexity</b>: Linear time (size()-1) comparisons calls to pred()).
1613
+ //!
1614
+ //! <b>Note</b>: The relative order of elements that are not removed is unchanged,
1615
+ //! and iterators to elements that are not removed remain valid.
1616
+ void unique()
1617
+ { this->unique_and_dispose(std::equal_to<value_type>(), detail::null_disposer()); }
1618
+
1619
+ //! <b>Effects</b>: Removes adjacent duplicate elements or adjacent
1620
+ //! elements that satisfy some binary predicate from the list.
1621
+ //! No destructors are called.
1622
+ //!
1623
+ //! <b>Throws</b>: If the predicate throws. Basic guarantee.
1624
+ //!
1625
+ //! <b>Complexity</b>: Linear time (size()-1) comparisons equality comparisons.
1626
+ //!
1627
+ //! <b>Note</b>: The relative order of elements that are not removed is unchanged,
1628
+ //! and iterators to elements that are not removed remain valid.
1629
+ template<class BinaryPredicate>
1630
+ void unique(BinaryPredicate pred)
1631
+ { this->unique_and_dispose(pred, detail::null_disposer()); }
1632
+
1633
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
1634
+ //!
1635
+ //! <b>Effects</b>: Removes adjacent duplicate elements or adjacent
1636
+ //! elements that satisfy some binary predicate from the list.
1637
+ //! Disposer::operator()(pointer) is called for every removed element.
1638
+ //!
1639
+ //! <b>Throws</b>: If std::equal_to<value_type> throws. Basic guarantee.
1640
+ //!
1641
+ //! <b>Complexity</b>: Linear time (size()-1) comparisons equality comparisons.
1642
+ //!
1643
+ //! <b>Note</b>: The relative order of elements that are not removed is unchanged,
1644
+ //! and iterators to elements that are not removed remain valid.
1645
+ template<class Disposer>
1646
+ void unique_and_dispose(Disposer disposer)
1647
+ { this->unique(std::equal_to<value_type>(), disposer); }
1648
+
1649
+ //! <b>Requires</b>: Disposer::operator()(pointer) shouldn't throw.
1650
+ //!
1651
+ //! <b>Effects</b>: Removes adjacent duplicate elements or adjacent
1652
+ //! elements that satisfy some binary predicate from the list.
1653
+ //! Disposer::operator()(pointer) is called for every removed element.
1654
+ //!
1655
+ //! <b>Throws</b>: If the predicate throws. Basic guarantee.
1656
+ //!
1657
+ //! <b>Complexity</b>: Linear time (size()-1) comparisons equality comparisons.
1658
+ //!
1659
+ //! <b>Note</b>: The relative order of elements that are not removed is unchanged,
1660
+ //! and iterators to elements that are not removed remain valid.
1661
+ template<class BinaryPredicate, class Disposer>
1662
+ void unique_and_dispose(BinaryPredicate pred, Disposer disposer)
1663
+ {
1664
+ const_iterator end_n(this->cend());
1665
+ const_iterator bcur(this->cbegin());
1666
+ if(bcur != end_n){
1667
+ const_iterator cur(bcur);
1668
+ ++cur;
1669
+ while(cur != end_n) {
1670
+ if (pred(*bcur, *cur)){
1671
+ cur = this->erase_after_and_dispose(bcur, disposer);
1672
+ }
1673
+ else{
1674
+ bcur = cur;
1675
+ ++cur;
1676
+ }
1677
+ }
1678
+ if(cache_last){
1679
+ this->set_last_node(bcur.pointed_node());
1680
+ }
1681
+ }
1682
+ }
1683
+
1684
+ //! <b>Requires</b>: value must be a reference to a value inserted in a list.
1685
+ //!
1686
+ //! <b>Effects</b>: This function returns a const_iterator pointing to the element
1687
+ //!
1688
+ //! <b>Throws</b>: Nothing.
1689
+ //!
1690
+ //! <b>Complexity</b>: Constant time.
1691
+ //!
1692
+ //! <b>Note</b>: Iterators and references are not invalidated.
1693
+ //! This static function is available only if the <i>value traits</i>
1694
+ //! is stateless.
1695
+ static iterator s_iterator_to(reference value)
1696
+ {
1697
+ BOOST_STATIC_ASSERT((!stateful_value_traits));
1698
+ //BOOST_INTRUSIVE_INVARIANT_ASSERT (!node_algorithms::inited(value_traits::to_node_ptr(value)));
1699
+ return iterator (value_traits::to_node_ptr(value), 0);
1700
+ }
1701
+
1702
+ //! <b>Requires</b>: value must be a const reference to a value inserted in a list.
1703
+ //!
1704
+ //! <b>Effects</b>: This function returns an iterator pointing to the element.
1705
+ //!
1706
+ //! <b>Throws</b>: Nothing.
1707
+ //!
1708
+ //! <b>Complexity</b>: Constant time.
1709
+ //!
1710
+ //! <b>Note</b>: Iterators and references are not invalidated.
1711
+ //! This static function is available only if the <i>value traits</i>
1712
+ //! is stateless.
1713
+ static const_iterator s_iterator_to(const_reference value)
1714
+ {
1715
+ BOOST_STATIC_ASSERT((!stateful_value_traits));
1716
+ //BOOST_INTRUSIVE_INVARIANT_ASSERT (!node_algorithms::inited(value_traits::to_node_ptr(const_cast<reference> (value))));
1717
+ return const_iterator (value_traits::to_node_ptr(const_cast<reference> (value)), 0);
1718
+ }
1719
+
1720
+ //! <b>Requires</b>: value must be a reference to a value inserted in a list.
1721
+ //!
1722
+ //! <b>Effects</b>: This function returns a const_iterator pointing to the element
1723
+ //!
1724
+ //! <b>Throws</b>: Nothing.
1725
+ //!
1726
+ //! <b>Complexity</b>: Constant time.
1727
+ //!
1728
+ //! <b>Note</b>: Iterators and references are not invalidated.
1729
+ iterator iterator_to(reference value)
1730
+ {
1731
+ //BOOST_INTRUSIVE_INVARIANT_ASSERT (!node_algorithms::inited(value_traits::to_node_ptr(value)));
1732
+ return iterator (value_traits::to_node_ptr(value), this);
1733
+ }
1734
+
1735
+ //! <b>Requires</b>: value must be a const reference to a value inserted in a list.
1736
+ //!
1737
+ //! <b>Effects</b>: This function returns an iterator pointing to the element.
1738
+ //!
1739
+ //! <b>Throws</b>: Nothing.
1740
+ //!
1741
+ //! <b>Complexity</b>: Constant time.
1742
+ //!
1743
+ //! <b>Note</b>: Iterators and references are not invalidated.
1744
+ const_iterator iterator_to(const_reference value) const
1745
+ {
1746
+ //BOOST_INTRUSIVE_INVARIANT_ASSERT (!node_algorithms::inited(value_traits::to_node_ptr(const_cast<reference> (value))));
1747
+ return const_iterator (value_traits::to_node_ptr(const_cast<reference> (value)), this);
1748
+ }
1749
+
1750
+ //! <b>Returns</b>: The iterator to the element before i in the list.
1751
+ //! Returns the end-iterator, if either i is the begin-iterator or the
1752
+ //! list is empty.
1753
+ //!
1754
+ //! <b>Throws</b>: Nothing.
1755
+ //!
1756
+ //! <b>Complexity</b>: Linear to the number of elements before i.
1757
+ //! Constant if cache_last<> is true and i == end().
1758
+ iterator previous(iterator i)
1759
+ { return this->previous(this->cbefore_begin(), i); }
1760
+
1761
+ //! <b>Returns</b>: The const_iterator to the element before i in the list.
1762
+ //! Returns the end-const_iterator, if either i is the begin-const_iterator or
1763
+ //! the list is empty.
1764
+ //!
1765
+ //! <b>Throws</b>: Nothing.
1766
+ //!
1767
+ //! <b>Complexity</b>: Linear to the number of elements before i.
1768
+ //! Constant if cache_last<> is true and i == end().
1769
+ const_iterator previous(const_iterator i) const
1770
+ { return this->previous(this->cbefore_begin(), i); }
1771
+
1772
+ //! <b>Returns</b>: The iterator to the element before i in the list,
1773
+ //! starting the search on element after prev_from.
1774
+ //! Returns the end-iterator, if either i is the begin-iterator or the
1775
+ //! list is empty.
1776
+ //!
1777
+ //! <b>Throws</b>: Nothing.
1778
+ //!
1779
+ //! <b>Complexity</b>: Linear to the number of elements before i.
1780
+ //! Constant if cache_last<> is true and i == end().
1781
+ iterator previous(const_iterator prev_from, iterator i)
1782
+ { return this->previous(prev_from, const_iterator(i)).unconst(); }
1783
+
1784
+ //! <b>Returns</b>: The const_iterator to the element before i in the list,
1785
+ //! starting the search on element after prev_from.
1786
+ //! Returns the end-const_iterator, if either i is the begin-const_iterator or
1787
+ //! the list is empty.
1788
+ //!
1789
+ //! <b>Throws</b>: Nothing.
1790
+ //!
1791
+ //! <b>Complexity</b>: Linear to the number of elements before i.
1792
+ //! Constant if cache_last<> is true and i == end().
1793
+ const_iterator previous(const_iterator prev_from, const_iterator i) const
1794
+ {
1795
+ if(cache_last && (i.pointed_node() == this->get_end_node())){
1796
+ return const_iterator(uncast(this->get_last_node()), this);
1797
+ }
1798
+ return const_iterator
1799
+ (node_algorithms::get_previous_node
1800
+ (prev_from.pointed_node(), i.pointed_node()), this);
1801
+ }
1802
+
1803
+ ///@cond
1804
+
1805
+ //! <b>Requires</b>: prev_pos must be a dereferenceable iterator in *this or be
1806
+ //! before_begin(), and f and before_l belong to another slist.
1807
+ //!
1808
+ //! <b>Effects</b>: Transfers the range [f, before_l] to this
1809
+ //! list, after the element pointed by prev_pos.
1810
+ //! No destructors or copy constructors are called.
1811
+ //!
1812
+ //! <b>Throws</b>: Nothing.
1813
+ //!
1814
+ //! <b>Complexity</b>: Linear to the number of elements transferred
1815
+ //! if constant_time_size is true. Constant-time otherwise.
1816
+ //!
1817
+ //! <b>Note</b>: Iterators of values obtained from the list that owned f and before_l now
1818
+ //! point to elements of this list. Iterators of this list and all the references are not invalidated.
1819
+ //!
1820
+ //! <b>Warning</b>: Experimental function, don't use it!
1821
+ void incorporate_after(const_iterator prev_pos, const node_ptr & f, const node_ptr & before_l)
1822
+ {
1823
+ if(constant_time_size)
1824
+ this->incorporate_after(prev_pos, f, before_l, std::distance(f, before_l)+1);
1825
+ else
1826
+ this->priv_incorporate_after(prev_pos.pointed_node(), f, before_l);
1827
+ }
1828
+
1829
+ //! <b>Requires</b>: prev_pos must be a dereferenceable iterator in *this or be
1830
+ //! before_begin(), and f and before_l belong to another slist.
1831
+ //! n == std::distance(f, before_l) + 1.
1832
+ //!
1833
+ //! <b>Effects</b>: Transfers the range [f, before_l] to this
1834
+ //! list, after the element pointed by prev_pos.
1835
+ //! No destructors or copy constructors are called.
1836
+ //!
1837
+ //! <b>Throws</b>: Nothing.
1838
+ //!
1839
+ //! <b>Complexity</b>: Constant time.
1840
+ //!
1841
+ //! <b>Note</b>: Iterators of values obtained from the list that owned f and before_l now
1842
+ //! point to elements of this list. Iterators of this list and all the references are not invalidated.
1843
+ //!
1844
+ //! <b>Warning</b>: Experimental function, don't use it!
1845
+ void incorporate_after(const_iterator prev_pos, const node_ptr & f, const node_ptr & before_l, size_type n)
1846
+ {
1847
+ if(n){
1848
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(n > 0);
1849
+ BOOST_INTRUSIVE_INVARIANT_ASSERT(size_type(std::distance(iterator(f, this), iterator(before_l, this)))+1 == n);
1850
+ this->priv_incorporate_after(prev_pos.pointed_node(), f, before_l);
1851
+ if(constant_time_size){
1852
+ this->priv_size_traits().increase(n);
1853
+ }
1854
+ }
1855
+ }
1856
+
1857
+ ///@endcond
1858
+
1859
+ private:
1860
+ void priv_splice_after(const node_ptr & prev_pos_n, slist_impl &x, const node_ptr & before_f_n, const node_ptr & before_l_n)
1861
+ {
1862
+ if (cache_last && (before_f_n != before_l_n)){
1863
+ if(prev_pos_n == this->get_last_node()){
1864
+ this->set_last_node(before_l_n);
1865
+ }
1866
+ if(&x != this && node_traits::get_next(before_l_n) == x.get_end_node()){
1867
+ x.set_last_node(before_f_n);
1868
+ }
1869
+ }
1870
+ node_algorithms::transfer_after(prev_pos_n, before_f_n, before_l_n);
1871
+ }
1872
+
1873
+ void priv_incorporate_after(const node_ptr & prev_pos_n, const node_ptr & first_n, const node_ptr & before_l_n)
1874
+ {
1875
+ if(cache_last){
1876
+ if(prev_pos_n == this->get_last_node()){
1877
+ this->set_last_node(before_l_n);
1878
+ }
1879
+ }
1880
+ node_algorithms::incorporate_after(prev_pos_n, first_n, before_l_n);
1881
+ }
1882
+
1883
+ void priv_reverse(detail::bool_<false>)
1884
+ { node_algorithms::reverse(this->get_root_node()); }
1885
+
1886
+ void priv_reverse(detail::bool_<true>)
1887
+ {
1888
+ node_ptr new_first = node_algorithms::reverse
1889
+ (node_traits::get_next(this->get_root_node()));
1890
+ node_traits::set_next(this->get_root_node(), new_first);
1891
+ }
1892
+
1893
+ void priv_shift_backwards(size_type n, detail::bool_<false>)
1894
+ {
1895
+ node_ptr l = node_algorithms::move_forward(this->get_root_node(), (std::size_t)n);
1896
+ if(cache_last && l){
1897
+ this->set_last_node(l);
1898
+ }
1899
+ }
1900
+
1901
+ void priv_shift_backwards(size_type n, detail::bool_<true>)
1902
+ {
1903
+ std::pair<node_ptr, node_ptr> ret(
1904
+ node_algorithms::move_first_n_forward
1905
+ (node_traits::get_next(this->get_root_node()), (std::size_t)n));
1906
+ if(ret.first){
1907
+ node_traits::set_next(this->get_root_node(), ret.first);
1908
+ if(cache_last){
1909
+ this->set_last_node(ret.second);
1910
+ }
1911
+ }
1912
+ }
1913
+
1914
+ void priv_shift_forward(size_type n, detail::bool_<false>)
1915
+ {
1916
+ node_ptr l = node_algorithms::move_backwards(this->get_root_node(), (std::size_t)n);
1917
+ if(cache_last && l){
1918
+ this->set_last_node(l);
1919
+ }
1920
+ }
1921
+
1922
+ void priv_shift_forward(size_type n, detail::bool_<true>)
1923
+ {
1924
+ std::pair<node_ptr, node_ptr> ret(
1925
+ node_algorithms::move_first_n_backwards
1926
+ (node_traits::get_next(this->get_root_node()), (std::size_t)n));
1927
+ if(ret.first){
1928
+ node_traits::set_next(this->get_root_node(), ret.first);
1929
+ if(cache_last){
1930
+ this->set_last_node(ret.second);
1931
+ }
1932
+ }
1933
+ }
1934
+
1935
+ static void priv_swap_cache_last(slist_impl *this_impl, slist_impl *other_impl)
1936
+ {
1937
+ bool other_was_empty = false;
1938
+ if(this_impl->empty()){
1939
+ //Check if both are empty or
1940
+ if(other_impl->empty())
1941
+ return;
1942
+ //If this is empty swap pointers
1943
+ slist_impl *tmp = this_impl;
1944
+ this_impl = other_impl;
1945
+ other_impl = tmp;
1946
+ other_was_empty = true;
1947
+ }
1948
+ else{
1949
+ other_was_empty = other_impl->empty();
1950
+ }
1951
+
1952
+ //Precondition: this is not empty
1953
+ node_ptr other_old_last(other_impl->get_last_node());
1954
+ node_ptr other_bfirst(other_impl->get_root_node());
1955
+ node_ptr this_bfirst(this_impl->get_root_node());
1956
+ node_ptr this_old_last(this_impl->get_last_node());
1957
+
1958
+ //Move all nodes from this to other's beginning
1959
+ node_algorithms::transfer_after(other_bfirst, this_bfirst, this_old_last);
1960
+ other_impl->set_last_node(this_old_last);
1961
+
1962
+ if(other_was_empty){
1963
+ this_impl->set_last_node(this_bfirst);
1964
+ }
1965
+ else{
1966
+ //Move trailing nodes from other to this
1967
+ node_algorithms::transfer_after(this_bfirst, this_old_last, other_old_last);
1968
+ this_impl->set_last_node(other_old_last);
1969
+ }
1970
+ }
1971
+
1972
+ //circular version
1973
+ static void priv_swap_lists(const node_ptr & this_node, const node_ptr & other_node, detail::bool_<false>)
1974
+ { node_algorithms::swap_nodes(this_node, other_node); }
1975
+
1976
+ //linear version
1977
+ static void priv_swap_lists(const node_ptr & this_node, const node_ptr & other_node, detail::bool_<true>)
1978
+ { node_algorithms::swap_trailing_nodes(this_node, other_node); }
1979
+
1980
+ static slist_impl &priv_container_from_end_iterator(const const_iterator &end_iterator)
1981
+ {
1982
+ //Obtaining the container from the end iterator is not possible with linear
1983
+ //singly linked lists (because "end" is represented by the null pointer)
1984
+ BOOST_STATIC_ASSERT(!linear);
1985
+ root_plus_size *r = detail::parent_from_member<root_plus_size, node>
1986
+ ( boost::intrusive::detail::to_raw_pointer(end_iterator.pointed_node()), (&root_plus_size::root_));
1987
+ data_t *d = detail::parent_from_member<data_t, root_plus_size>
1988
+ ( r, &data_t::root_plus_size_);
1989
+ slist_impl *s = detail::parent_from_member<slist_impl, data_t>(d, &slist_impl::data_);
1990
+ return *s;
1991
+ }
1992
+ };
1993
+
1994
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
1995
+ template<class T, class ...Options>
1996
+ #else
1997
+ template<class Config>
1998
+ #endif
1999
+ inline bool operator<
2000
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2001
+ (const slist_impl<T, Options...> &x, const slist_impl<T, Options...> &y)
2002
+ #else
2003
+ (const slist_impl<Config> &x, const slist_impl<Config> &y)
2004
+ #endif
2005
+ { return std::lexicographical_compare(x.begin(), x.end(), y.begin(), y.end()); }
2006
+
2007
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2008
+ template<class T, class ...Options>
2009
+ #else
2010
+ template<class Config>
2011
+ #endif
2012
+ bool operator==
2013
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2014
+ (const slist_impl<T, Options...> &x, const slist_impl<T, Options...> &y)
2015
+ #else
2016
+ (const slist_impl<Config> &x, const slist_impl<Config> &y)
2017
+ #endif
2018
+ {
2019
+ typedef slist_impl<Config> slist_type;
2020
+ typedef typename slist_type::const_iterator const_iterator;
2021
+ const bool C = slist_type::constant_time_size;
2022
+ if(C && x.size() != y.size()){
2023
+ return false;
2024
+ }
2025
+ const_iterator end1 = x.end();
2026
+
2027
+ const_iterator i1 = x.begin();
2028
+ const_iterator i2 = y.begin();
2029
+ if(C){
2030
+ while (i1 != end1 && *i1 == *i2) {
2031
+ ++i1;
2032
+ ++i2;
2033
+ }
2034
+ return i1 == end1;
2035
+ }
2036
+ else{
2037
+ const_iterator end2 = y.end();
2038
+ while (i1 != end1 && i2 != end2 && *i1 == *i2) {
2039
+ ++i1;
2040
+ ++i2;
2041
+ }
2042
+ return i1 == end1 && i2 == end2;
2043
+ }
2044
+ }
2045
+
2046
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2047
+ template<class T, class ...Options>
2048
+ #else
2049
+ template<class Config>
2050
+ #endif
2051
+ inline bool operator!=
2052
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2053
+ (const slist_impl<T, Options...> &x, const slist_impl<T, Options...> &y)
2054
+ #else
2055
+ (const slist_impl<Config> &x, const slist_impl<Config> &y)
2056
+ #endif
2057
+ { return !(x == y); }
2058
+
2059
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2060
+ template<class T, class ...Options>
2061
+ #else
2062
+ template<class Config>
2063
+ #endif
2064
+ inline bool operator>
2065
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2066
+ (const slist_impl<T, Options...> &x, const slist_impl<T, Options...> &y)
2067
+ #else
2068
+ (const slist_impl<Config> &x, const slist_impl<Config> &y)
2069
+ #endif
2070
+ { return y < x; }
2071
+
2072
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2073
+ template<class T, class ...Options>
2074
+ #else
2075
+ template<class Config>
2076
+ #endif
2077
+ inline bool operator<=
2078
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2079
+ (const slist_impl<T, Options...> &x, const slist_impl<T, Options...> &y)
2080
+ #else
2081
+ (const slist_impl<Config> &x, const slist_impl<Config> &y)
2082
+ #endif
2083
+ { return !(y < x); }
2084
+
2085
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2086
+ template<class T, class ...Options>
2087
+ #else
2088
+ template<class Config>
2089
+ #endif
2090
+ inline bool operator>=
2091
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2092
+ (const slist_impl<T, Options...> &x, const slist_impl<T, Options...> &y)
2093
+ #else
2094
+ (const slist_impl<Config> &x, const slist_impl<Config> &y)
2095
+ #endif
2096
+ { return !(x < y); }
2097
+
2098
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2099
+ template<class T, class ...Options>
2100
+ #else
2101
+ template<class Config>
2102
+ #endif
2103
+ inline void swap
2104
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED)
2105
+ (slist_impl<T, Options...> &x, slist_impl<T, Options...> &y)
2106
+ #else
2107
+ (slist_impl<Config> &x, slist_impl<Config> &y)
2108
+ #endif
2109
+ { x.swap(y); }
2110
+
2111
+ //! Helper metafunction to define a \c slist that yields to the same type when the
2112
+ //! same options (either explicitly or implicitly) are used.
2113
+ #if defined(BOOST_INTRUSIVE_DOXYGEN_INVOKED) || defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
2114
+ template<class T, class ...Options>
2115
+ #else
2116
+ template<class T, class O1 = none, class O2 = none, class O3 = none, class O4 = none, class O5 = none>
2117
+ #endif
2118
+ struct make_slist
2119
+ {
2120
+ /// @cond
2121
+ typedef typename pack_options
2122
+ < slist_defaults<T>,
2123
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
2124
+ O1, O2, O3, O4, O5
2125
+ #else
2126
+ Options...
2127
+ #endif
2128
+ >::type packed_options;
2129
+ typedef typename detail::get_value_traits
2130
+ <T, typename packed_options::value_traits>::type value_traits;
2131
+ typedef slist_impl
2132
+ <
2133
+ slistopt
2134
+ < value_traits
2135
+ , typename packed_options::size_type
2136
+ , packed_options::constant_time_size
2137
+ , packed_options::linear
2138
+ , packed_options::cache_last
2139
+ >
2140
+ > implementation_defined;
2141
+ /// @endcond
2142
+ typedef implementation_defined type;
2143
+ };
2144
+
2145
+
2146
+ #ifndef BOOST_INTRUSIVE_DOXYGEN_INVOKED
2147
+
2148
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
2149
+ template<class T, class O1, class O2, class O3, class O4, class O5>
2150
+ #else
2151
+ template<class T, class ...Options>
2152
+ #endif
2153
+ class slist
2154
+ : public make_slist<T,
2155
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
2156
+ O1, O2, O3, O4, O5
2157
+ #else
2158
+ Options...
2159
+ #endif
2160
+ >::type
2161
+ {
2162
+ typedef typename make_slist
2163
+ <T,
2164
+ #if !defined(BOOST_INTRUSIVE_VARIADIC_TEMPLATES)
2165
+ O1, O2, O3, O4, O5
2166
+ #else
2167
+ Options...
2168
+ #endif
2169
+ >::type Base;
2170
+ typedef typename Base::real_value_traits real_value_traits;
2171
+ //Assert if passed value traits are compatible with the type
2172
+ BOOST_STATIC_ASSERT((detail::is_same<typename real_value_traits::value_type, T>::value));
2173
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(slist)
2174
+
2175
+ public:
2176
+ typedef typename Base::value_traits value_traits;
2177
+ typedef typename Base::iterator iterator;
2178
+ typedef typename Base::const_iterator const_iterator;
2179
+ typedef typename Base::size_type size_type;
2180
+ typedef typename Base::node_ptr node_ptr;
2181
+
2182
+ explicit slist(const value_traits &v_traits = value_traits())
2183
+ : Base(v_traits)
2184
+ {}
2185
+
2186
+ struct incorporate_t{};
2187
+
2188
+ slist( const node_ptr & f, const node_ptr & before_l
2189
+ , size_type n, const value_traits &v_traits = value_traits())
2190
+ : Base(f, before_l, n, v_traits)
2191
+ {}
2192
+
2193
+ template<class Iterator>
2194
+ slist(Iterator b, Iterator e, const value_traits &v_traits = value_traits())
2195
+ : Base(b, e, v_traits)
2196
+ {}
2197
+
2198
+ slist(BOOST_RV_REF(slist) x)
2199
+ : Base(::boost::move(static_cast<Base&>(x)))
2200
+ {}
2201
+
2202
+ slist& operator=(BOOST_RV_REF(slist) x)
2203
+ { this->Base::operator=(::boost::move(static_cast<Base&>(x))); return *this; }
2204
+
2205
+ static slist &container_from_end_iterator(iterator end_iterator)
2206
+ { return static_cast<slist &>(Base::container_from_end_iterator(end_iterator)); }
2207
+
2208
+ static const slist &container_from_end_iterator(const_iterator end_iterator)
2209
+ { return static_cast<const slist &>(Base::container_from_end_iterator(end_iterator)); }
2210
+ };
2211
+
2212
+ #endif
2213
+
2214
+ } //namespace intrusive
2215
+ } //namespace boost
2216
+
2217
+ #include <boost/intrusive/detail/config_end.hpp>
2218
+
2219
+ #endif //BOOST_INTRUSIVE_SLIST_HPP