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,1706 @@
1
+ //////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // (C) Copyright Ion Gaztanaga 2004-2012. Distributed under the Boost
4
+ // Software License, Version 1.0. (See accompanying file
5
+ // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6
+ //
7
+ // See http://www.boost.org/libs/container for documentation.
8
+ //
9
+ //////////////////////////////////////////////////////////////////////////////
10
+
11
+ #ifndef BOOST_CONTAINER_SLIST_HPP
12
+ #define BOOST_CONTAINER_SLIST_HPP
13
+
14
+ #if (defined _MSC_VER) && (_MSC_VER >= 1200)
15
+ # pragma once
16
+ #endif
17
+
18
+ #include <boost/container/detail/config_begin.hpp>
19
+ #include <boost/container/detail/workaround.hpp>
20
+
21
+ #include <boost/container/container_fwd.hpp>
22
+ #include <boost/container/throw_exception.hpp>
23
+ #include <boost/move/utility.hpp>
24
+ #include <boost/move/detail/move_helpers.hpp>
25
+ #include <boost/intrusive/pointer_traits.hpp>
26
+ #include <boost/container/detail/utilities.hpp>
27
+ #include <boost/container/detail/mpl.hpp>
28
+ #include <boost/container/detail/type_traits.hpp>
29
+ #include <boost/type_traits/has_trivial_destructor.hpp>
30
+ #include <boost/detail/no_exceptions_support.hpp>
31
+ #include <boost/container/detail/node_alloc_holder.hpp>
32
+ #include <boost/intrusive/slist.hpp>
33
+
34
+
35
+ #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
36
+ //Preprocessor library to emulate perfect forwarding
37
+ #else
38
+ #include <boost/container/detail/preprocessor.hpp>
39
+ #endif
40
+
41
+ #include <iterator>
42
+ #include <utility>
43
+ #include <memory>
44
+ #include <functional>
45
+ #include <algorithm>
46
+
47
+ namespace boost {
48
+ namespace container {
49
+
50
+ /// @cond
51
+
52
+ template <class T, class Allocator>
53
+ class slist;
54
+
55
+ namespace container_detail {
56
+
57
+ template<class VoidPointer>
58
+ struct slist_hook
59
+ {
60
+ typedef typename container_detail::bi::make_slist_base_hook
61
+ <container_detail::bi::void_pointer<VoidPointer>, container_detail::bi::link_mode<container_detail::bi::normal_link> >::type type;
62
+ };
63
+
64
+ template <class T, class VoidPointer>
65
+ struct slist_node
66
+ : public slist_hook<VoidPointer>::type
67
+ {
68
+ private:
69
+ slist_node();
70
+
71
+ public:
72
+ typedef typename slist_hook<VoidPointer>::type hook_type;
73
+ T m_data;
74
+ };
75
+
76
+ template<class Allocator>
77
+ struct intrusive_slist_type
78
+ {
79
+ typedef boost::container::allocator_traits<Allocator> allocator_traits_type;
80
+ typedef typename allocator_traits_type::value_type value_type;
81
+ typedef typename boost::intrusive::pointer_traits
82
+ <typename allocator_traits_type::pointer>::template
83
+ rebind_pointer<void>::type
84
+ void_pointer;
85
+ typedef typename container_detail::slist_node
86
+ <value_type, void_pointer> node_type;
87
+
88
+ typedef typename container_detail::bi::make_slist
89
+ <node_type
90
+ ,container_detail::bi::base_hook<typename slist_hook<void_pointer>::type>
91
+ ,container_detail::bi::constant_time_size<true>
92
+ , container_detail::bi::size_type
93
+ <typename allocator_traits_type::size_type>
94
+ >::type container_type;
95
+ typedef container_type type ;
96
+ };
97
+
98
+ template<class T, class IIterator>
99
+ class slist_const_iterator
100
+ : public std::iterator< std::forward_iterator_tag, T
101
+ , typename iiterator_types<T, IIterator>::difference_type
102
+ , typename iiterator_types<T, IIterator>::const_pointer
103
+ , typename iiterator_types<T, IIterator>::const_reference>
104
+ {
105
+ protected:
106
+
107
+ IIterator m_it;
108
+
109
+ public:
110
+ typedef typename iiterator_types<T, IIterator>::const_pointer const_pointer;
111
+ typedef typename iiterator_types<T, IIterator>::const_reference const_reference;
112
+
113
+ //Constructors
114
+ slist_const_iterator()
115
+ : m_it()
116
+ {}
117
+
118
+ explicit slist_const_iterator(const IIterator &it)
119
+ : m_it(it)
120
+ {}
121
+
122
+ //Pointer like operators
123
+ const_reference operator*() const
124
+ { return this->m_it->m_data; }
125
+
126
+ const_pointer operator->() const
127
+ { return ::boost::intrusive::pointer_traits<const_pointer>::pointer_to(this->m_it->m_data); }
128
+
129
+ //Increment / Decrement
130
+ slist_const_iterator& operator++()
131
+ { ++this->m_it; return *this; }
132
+
133
+ slist_const_iterator operator++(int)
134
+ { IIterator tmp = this->m_it; ++*this; return slist_const_iterator(tmp); }
135
+
136
+ //Comparison operators
137
+ friend bool operator== (const slist_const_iterator& l, const slist_const_iterator& r)
138
+ { return l.m_it == r.m_it; }
139
+
140
+ friend bool operator!= (const slist_const_iterator& l, const slist_const_iterator& r)
141
+ { return l.m_it != r.m_it; }
142
+
143
+ const IIterator &get() const
144
+ { return this->m_it; }
145
+ };
146
+
147
+ template<class T, class IIterator>
148
+ class slist_iterator
149
+ : public slist_const_iterator<T, IIterator>
150
+ {
151
+ private:
152
+ typedef slist_const_iterator<T, IIterator> const_iterator;
153
+
154
+ public:
155
+ typedef typename iiterator_types<T, IIterator>::pointer pointer;
156
+ typedef typename iiterator_types<T, IIterator>::reference reference;
157
+
158
+ //Constructors
159
+ slist_iterator()
160
+ : const_iterator()
161
+ {}
162
+
163
+ explicit slist_iterator(const IIterator &it)
164
+ : const_iterator(it)
165
+ {}
166
+
167
+ //Pointer like operators
168
+ reference operator*() const
169
+ { return this->m_it->m_data; }
170
+
171
+ pointer operator->() const
172
+ { return ::boost::intrusive::pointer_traits<pointer>::pointer_to(this->m_it->m_data); }
173
+
174
+ //Increment / Decrement
175
+ slist_iterator& operator++()
176
+ { ++this->m_it; return *this; }
177
+
178
+ slist_iterator operator++(int)
179
+ { IIterator tmp = this->m_it; ++*this; return slist_iterator(tmp); }
180
+
181
+ const IIterator &get() const
182
+ { return this->m_it; }
183
+ };
184
+
185
+ } //namespace container_detail {
186
+
187
+ /// @endcond
188
+
189
+ //! An slist is a singly linked list: a list where each element is linked to the next
190
+ //! element, but not to the previous element. That is, it is a Sequence that
191
+ //! supports forward but not backward traversal, and (amortized) constant time
192
+ //! insertion and removal of elements. Slists, like lists, have the important
193
+ //! property that insertion and splicing do not invalidate iterators to list elements,
194
+ //! and that even removal invalidates only the iterators that point to the elements
195
+ //! that are removed. The ordering of iterators may be changed (that is,
196
+ //! slist<T>::iterator might have a different predecessor or successor after a list
197
+ //! operation than it did before), but the iterators themselves will not be invalidated
198
+ //! or made to point to different elements unless that invalidation or mutation is explicit.
199
+ //!
200
+ //! The main difference between slist and list is that list's iterators are bidirectional
201
+ //! iterators, while slist's iterators are forward iterators. This means that slist is
202
+ //! less versatile than list; frequently, however, bidirectional iterators are
203
+ //! unnecessary. You should usually use slist unless you actually need the extra
204
+ //! functionality of list, because singly linked lists are smaller and faster than double
205
+ //! linked lists.
206
+ //!
207
+ //! Important performance note: like every other Sequence, slist defines the member
208
+ //! functions insert and erase. Using these member functions carelessly, however, can
209
+ //! result in disastrously slow programs. The problem is that insert's first argument is
210
+ //! an iterator p, and that it inserts the new element(s) before p. This means that
211
+ //! insert must find the iterator just before p; this is a constant-time operation
212
+ //! for list, since list has bidirectional iterators, but for slist it must find that
213
+ //! iterator by traversing the list from the beginning up to p. In other words:
214
+ //! insert and erase are slow operations anywhere but near the beginning of the slist.
215
+ //!
216
+ //! Slist provides the member functions insert_after and erase_after, which are constant
217
+ //! time operations: you should always use insert_after and erase_after whenever
218
+ //! possible. If you find that insert_after and erase_after aren't adequate for your
219
+ //! needs, and that you often need to use insert and erase in the middle of the list,
220
+ //! then you should probably use list instead of slist.
221
+ #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
222
+ template <class T, class Allocator = std::allocator<T> >
223
+ #else
224
+ template <class T, class Allocator>
225
+ #endif
226
+ class slist
227
+ : protected container_detail::node_alloc_holder
228
+ <Allocator, typename container_detail::intrusive_slist_type<Allocator>::type>
229
+ {
230
+ /// @cond
231
+ typedef typename
232
+ container_detail::intrusive_slist_type<Allocator>::type Icont;
233
+ typedef container_detail::node_alloc_holder<Allocator, Icont> AllocHolder;
234
+ typedef typename AllocHolder::NodePtr NodePtr;
235
+ typedef typename AllocHolder::NodeAlloc NodeAlloc;
236
+ typedef typename AllocHolder::ValAlloc ValAlloc;
237
+ typedef typename AllocHolder::Node Node;
238
+ typedef container_detail::allocator_destroyer<NodeAlloc> Destroyer;
239
+ typedef typename AllocHolder::allocator_v1 allocator_v1;
240
+ typedef typename AllocHolder::allocator_v2 allocator_v2;
241
+ typedef typename AllocHolder::alloc_version alloc_version;
242
+ typedef boost::container::allocator_traits<Allocator> allocator_traits_type;
243
+
244
+ class equal_to_value
245
+ {
246
+ typedef typename AllocHolder::value_type value_type;
247
+ const value_type &t_;
248
+
249
+ public:
250
+ equal_to_value(const value_type &t)
251
+ : t_(t)
252
+ {}
253
+
254
+ bool operator()(const value_type &t)const
255
+ { return t_ == t; }
256
+ };
257
+
258
+ template<class Pred>
259
+ struct ValueCompareToNodeCompare
260
+ : Pred
261
+ {
262
+ ValueCompareToNodeCompare(Pred pred)
263
+ : Pred(pred)
264
+ {}
265
+
266
+ bool operator()(const Node &a, const Node &b) const
267
+ { return static_cast<const Pred&>(*this)(a.m_data, b.m_data); }
268
+
269
+ bool operator()(const Node &a) const
270
+ { return static_cast<const Pred&>(*this)(a.m_data); }
271
+ };
272
+
273
+ BOOST_COPYABLE_AND_MOVABLE(slist)
274
+ typedef container_detail::slist_iterator<T, typename Icont::iterator> iterator_impl;
275
+ typedef container_detail::slist_const_iterator<T, typename Icont::iterator>const_iterator_impl;
276
+ /// @endcond
277
+
278
+ public:
279
+ //////////////////////////////////////////////
280
+ //
281
+ // types
282
+ //
283
+ //////////////////////////////////////////////
284
+
285
+ typedef T value_type;
286
+ typedef typename ::boost::container::allocator_traits<Allocator>::pointer pointer;
287
+ typedef typename ::boost::container::allocator_traits<Allocator>::const_pointer const_pointer;
288
+ typedef typename ::boost::container::allocator_traits<Allocator>::reference reference;
289
+ typedef typename ::boost::container::allocator_traits<Allocator>::const_reference const_reference;
290
+ typedef typename ::boost::container::allocator_traits<Allocator>::size_type size_type;
291
+ typedef typename ::boost::container::allocator_traits<Allocator>::difference_type difference_type;
292
+ typedef Allocator allocator_type;
293
+ typedef BOOST_CONTAINER_IMPDEF(NodeAlloc) stored_allocator_type;
294
+ typedef BOOST_CONTAINER_IMPDEF(iterator_impl) iterator;
295
+ typedef BOOST_CONTAINER_IMPDEF(const_iterator_impl) const_iterator;
296
+
297
+ public:
298
+
299
+ //////////////////////////////////////////////
300
+ //
301
+ // construct/copy/destroy
302
+ //
303
+ //////////////////////////////////////////////
304
+
305
+ //! <b>Effects</b>: Constructs a list taking the allocator as parameter.
306
+ //!
307
+ //! <b>Throws</b>: If allocator_type's copy constructor throws.
308
+ //!
309
+ //! <b>Complexity</b>: Constant.
310
+ slist()
311
+ : AllocHolder()
312
+ {}
313
+
314
+ //! <b>Effects</b>: Constructs a list taking the allocator as parameter.
315
+ //!
316
+ //! <b>Throws</b>: Nothing
317
+ //!
318
+ //! <b>Complexity</b>: Constant.
319
+ explicit slist(const allocator_type& a) BOOST_CONTAINER_NOEXCEPT
320
+ : AllocHolder(a)
321
+ {}
322
+
323
+ explicit slist(size_type n)
324
+ : AllocHolder(allocator_type())
325
+ { this->resize(n); }
326
+
327
+ //! <b>Effects</b>: Constructs a list that will use a copy of allocator a
328
+ //! and inserts n copies of value.
329
+ //!
330
+ //! <b>Throws</b>: If allocator_type's default constructor or copy constructor
331
+ //! throws or T's default or copy constructor throws.
332
+ //!
333
+ //! <b>Complexity</b>: Linear to n.
334
+ explicit slist(size_type n, const value_type& x, const allocator_type& a = allocator_type())
335
+ : AllocHolder(a)
336
+ { this->insert_after(this->cbefore_begin(), n, x); }
337
+
338
+ //! <b>Effects</b>: Constructs a list that will use a copy of allocator a
339
+ //! and inserts a copy of the range [first, last) in the list.
340
+ //!
341
+ //! <b>Throws</b>: If allocator_type's default constructor or copy constructor
342
+ //! throws or T's constructor taking an dereferenced InIt throws.
343
+ //!
344
+ //! <b>Complexity</b>: Linear to the range [first, last).
345
+ template <class InpIt>
346
+ slist(InpIt first, InpIt last, const allocator_type& a = allocator_type())
347
+ : AllocHolder(a)
348
+ { this->insert_after(this->cbefore_begin(), first, last); }
349
+
350
+ //! <b>Effects</b>: Copy constructs a list.
351
+ //!
352
+ //! <b>Postcondition</b>: x == *this.
353
+ //!
354
+ //! <b>Throws</b>: If allocator_type's default constructor or copy constructor throws.
355
+ //!
356
+ //! <b>Complexity</b>: Linear to the elements x contains.
357
+ slist(const slist& x)
358
+ : AllocHolder(x)
359
+ { this->insert_after(this->cbefore_begin(), x.begin(), x.end()); }
360
+
361
+ //! <b>Effects</b>: Move constructor. Moves mx's resources to *this.
362
+ //!
363
+ //! <b>Throws</b>: If allocator_type's copy constructor throws.
364
+ //!
365
+ //! <b>Complexity</b>: Constant.
366
+ slist(BOOST_RV_REF(slist) x)
367
+ : AllocHolder(boost::move(static_cast<AllocHolder&>(x)))
368
+ {}
369
+
370
+ //! <b>Effects</b>: Copy constructs a list using the specified allocator.
371
+ //!
372
+ //! <b>Postcondition</b>: x == *this.
373
+ //!
374
+ //! <b>Throws</b>: If allocator_type's default constructor or copy constructor throws.
375
+ //!
376
+ //! <b>Complexity</b>: Linear to the elements x contains.
377
+ slist(const slist& x, const allocator_type &a)
378
+ : AllocHolder(a)
379
+ { this->insert_after(this->cbefore_begin(), x.begin(), x.end()); }
380
+
381
+ //! <b>Effects</b>: Move constructor using the specified allocator.
382
+ //! Moves x's resources to *this.
383
+ //!
384
+ //! <b>Throws</b>: If allocation or value_type's copy constructor throws.
385
+ //!
386
+ //! <b>Complexity</b>: Constant if a == x.get_allocator(), linear otherwise.
387
+ slist(BOOST_RV_REF(slist) x, const allocator_type &a)
388
+ : AllocHolder(a)
389
+ {
390
+ if(this->node_alloc() == x.node_alloc()){
391
+ this->icont().swap(x.icont());
392
+ }
393
+ else{
394
+ this->insert(this->cbegin(), x.begin(), x.end());
395
+ }
396
+ }
397
+
398
+ //! <b>Effects</b>: Destroys the list. All stored values are destroyed
399
+ //! and used memory is deallocated.
400
+ //!
401
+ //! <b>Throws</b>: Nothing.
402
+ //!
403
+ //! <b>Complexity</b>: Linear to the number of elements.
404
+ ~slist() BOOST_CONTAINER_NOEXCEPT
405
+ {} //AllocHolder clears the slist
406
+
407
+ //! <b>Effects</b>: Makes *this contain the same elements as x.
408
+ //!
409
+ //! <b>Postcondition</b>: this->size() == x.size(). *this contains a copy
410
+ //! of each of x's elements.
411
+ //!
412
+ //! <b>Throws</b>: If memory allocation throws or T's copy constructor throws.
413
+ //!
414
+ //! <b>Complexity</b>: Linear to the number of elements in x.
415
+ slist& operator= (BOOST_COPY_ASSIGN_REF(slist) x)
416
+ {
417
+ if (&x != this){
418
+ NodeAlloc &this_alloc = this->node_alloc();
419
+ const NodeAlloc &x_alloc = x.node_alloc();
420
+ container_detail::bool_<allocator_traits_type::
421
+ propagate_on_container_copy_assignment::value> flag;
422
+ if(flag && this_alloc != x_alloc){
423
+ this->clear();
424
+ }
425
+ this->AllocHolder::copy_assign_alloc(x);
426
+ this->assign(x.begin(), x.end());
427
+ }
428
+ return *this;
429
+ }
430
+
431
+ //! <b>Effects</b>: Makes *this contain the same elements as x.
432
+ //!
433
+ //! <b>Postcondition</b>: this->size() == x.size(). *this contains a copy
434
+ //! of each of x's elements.
435
+ //!
436
+ //! <b>Throws</b>: If memory allocation throws or T's copy constructor throws.
437
+ //!
438
+ //! <b>Complexity</b>: Linear to the number of elements in x.
439
+ slist& operator= (BOOST_RV_REF(slist) x)
440
+ {
441
+ if (&x != this){
442
+ NodeAlloc &this_alloc = this->node_alloc();
443
+ NodeAlloc &x_alloc = x.node_alloc();
444
+ //If allocators a re equal we can just swap pointers
445
+ if(this_alloc == x_alloc){
446
+ //Destroy and swap pointers
447
+ this->clear();
448
+ this->icont() = boost::move(x.icont());
449
+ //Move allocator if needed
450
+ this->AllocHolder::move_assign_alloc(x);
451
+ }
452
+ //If unequal allocators, then do a one by one move
453
+ else{
454
+ typedef typename std::iterator_traits<iterator>::iterator_category ItCat;
455
+ this->assign( boost::make_move_iterator(x.begin())
456
+ , boost::make_move_iterator(x.end()));
457
+ }
458
+ }
459
+ return *this;
460
+ }
461
+
462
+ //! <b>Effects</b>: Assigns the n copies of val to *this.
463
+ //!
464
+ //! <b>Throws</b>: If memory allocation throws or T's copy constructor throws.
465
+ //!
466
+ //! <b>Complexity</b>: Linear to n.
467
+ void assign(size_type n, const T& val)
468
+ {
469
+ typedef constant_iterator<value_type, difference_type> cvalue_iterator;
470
+ return this->assign(cvalue_iterator(val, n), cvalue_iterator());
471
+ }
472
+
473
+ //! <b>Effects</b>: Assigns the range [first, last) to *this.
474
+ //!
475
+ //! <b>Throws</b>: If memory allocation throws or
476
+ //! T's constructor from dereferencing InpIt throws.
477
+ //!
478
+ //! <b>Complexity</b>: Linear to n.
479
+ template <class InpIt>
480
+ void assign(InpIt first, InpIt last
481
+ #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
482
+ , typename container_detail::enable_if_c
483
+ < !container_detail::is_convertible<InpIt, size_type>::value
484
+ >::type * = 0
485
+ #endif
486
+ )
487
+ {
488
+ iterator end_n(this->end());
489
+ iterator prev(this->before_begin());
490
+ iterator node(this->begin());
491
+ while (node != end_n && first != last){
492
+ *node = *first;
493
+ prev = node;
494
+ ++node;
495
+ ++first;
496
+ }
497
+ if (first != last)
498
+ this->insert_after(prev, first, last);
499
+ else
500
+ this->erase_after(prev, end_n);
501
+ }
502
+
503
+ //! <b>Effects</b>: Returns a copy of the internal allocator.
504
+ //!
505
+ //! <b>Throws</b>: If allocator's copy constructor throws.
506
+ //!
507
+ //! <b>Complexity</b>: Constant.
508
+ allocator_type get_allocator() const BOOST_CONTAINER_NOEXCEPT
509
+ { return allocator_type(this->node_alloc()); }
510
+
511
+ //! <b>Effects</b>: Returns a reference to the internal allocator.
512
+ //!
513
+ //! <b>Throws</b>: Nothing
514
+ //!
515
+ //! <b>Complexity</b>: Constant.
516
+ //!
517
+ //! <b>Note</b>: Non-standard extension.
518
+ stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT
519
+ { return this->node_alloc(); }
520
+
521
+ //! <b>Effects</b>: Returns a reference to the internal allocator.
522
+ //!
523
+ //! <b>Throws</b>: Nothing
524
+ //!
525
+ //! <b>Complexity</b>: Constant.
526
+ //!
527
+ //! <b>Note</b>: Non-standard extension.
528
+ const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT
529
+ { return this->node_alloc(); }
530
+
531
+ //////////////////////////////////////////////
532
+ //
533
+ // iterators
534
+ //
535
+ //////////////////////////////////////////////
536
+
537
+ //! <b>Effects</b>: Returns a non-dereferenceable iterator that,
538
+ //! when incremented, yields begin(). This iterator may be used
539
+ //! as the argument to insert_after, erase_after, etc.
540
+ //!
541
+ //! <b>Throws</b>: Nothing.
542
+ //!
543
+ //! <b>Complexity</b>: Constant.
544
+ iterator before_begin() BOOST_CONTAINER_NOEXCEPT
545
+ { return iterator(end()); }
546
+
547
+ //! <b>Effects</b>: Returns a non-dereferenceable const_iterator
548
+ //! that, when incremented, yields begin(). This iterator may be used
549
+ //! as the argument to insert_after, erase_after, etc.
550
+ //!
551
+ //! <b>Throws</b>: Nothing.
552
+ //!
553
+ //! <b>Complexity</b>: Constant.
554
+ const_iterator before_begin() const BOOST_CONTAINER_NOEXCEPT
555
+ { return this->cbefore_begin(); }
556
+
557
+ //! <b>Effects</b>: Returns an iterator to the first element contained in the list.
558
+ //!
559
+ //! <b>Throws</b>: Nothing.
560
+ //!
561
+ //! <b>Complexity</b>: Constant.
562
+ iterator begin() BOOST_CONTAINER_NOEXCEPT
563
+ { return iterator(this->icont().begin()); }
564
+
565
+ //! <b>Effects</b>: Returns a const_iterator to the first element contained in the list.
566
+ //!
567
+ //! <b>Throws</b>: Nothing.
568
+ //!
569
+ //! <b>Complexity</b>: Constant.
570
+ const_iterator begin() const BOOST_CONTAINER_NOEXCEPT
571
+ { return this->cbegin(); }
572
+
573
+ //! <b>Effects</b>: Returns an iterator to the end of the list.
574
+ //!
575
+ //! <b>Throws</b>: Nothing.
576
+ //!
577
+ //! <b>Complexity</b>: Constant.
578
+ iterator end() BOOST_CONTAINER_NOEXCEPT
579
+ { return iterator(this->icont().end()); }
580
+
581
+ //! <b>Effects</b>: Returns a const_iterator to the end of the list.
582
+ //!
583
+ //! <b>Throws</b>: Nothing.
584
+ //!
585
+ //! <b>Complexity</b>: Constant.
586
+ const_iterator end() const BOOST_CONTAINER_NOEXCEPT
587
+ { return this->cend(); }
588
+
589
+ //! <b>Effects</b>: Returns a non-dereferenceable const_iterator
590
+ //! that, when incremented, yields begin(). This iterator may be used
591
+ //! as the argument to insert_after, erase_after, etc.
592
+ //!
593
+ //! <b>Throws</b>: Nothing.
594
+ //!
595
+ //! <b>Complexity</b>: Constant.
596
+ const_iterator cbefore_begin() const BOOST_CONTAINER_NOEXCEPT
597
+ { return const_iterator(end()); }
598
+
599
+ //! <b>Effects</b>: Returns a const_iterator to the first element contained in the list.
600
+ //!
601
+ //! <b>Throws</b>: Nothing.
602
+ //!
603
+ //! <b>Complexity</b>: Constant.
604
+ const_iterator cbegin() const BOOST_CONTAINER_NOEXCEPT
605
+ { return const_iterator(this->non_const_icont().begin()); }
606
+
607
+ //! <b>Effects</b>: Returns a const_iterator to the end of the list.
608
+ //!
609
+ //! <b>Throws</b>: Nothing.
610
+ //!
611
+ //! <b>Complexity</b>: Constant.
612
+ const_iterator cend() const BOOST_CONTAINER_NOEXCEPT
613
+ { return const_iterator(this->non_const_icont().end()); }
614
+
615
+ //! <b>Returns</b>: The iterator to the element before i in the sequence.
616
+ //! Returns the end-iterator, if either i is the begin-iterator or the
617
+ //! sequence is empty.
618
+ //!
619
+ //! <b>Throws</b>: Nothing.
620
+ //!
621
+ //! <b>Complexity</b>: Linear to the number of elements before i.
622
+ //!
623
+ //! <b>Note</b>: Non-standard extension.
624
+ iterator previous(iterator p) BOOST_CONTAINER_NOEXCEPT
625
+ { return iterator(this->icont().previous(p.get())); }
626
+
627
+ //! <b>Returns</b>: The const_iterator to the element before i in the sequence.
628
+ //! Returns the end-const_iterator, if either i is the begin-const_iterator or
629
+ //! the sequence is empty.
630
+ //!
631
+ //! <b>Throws</b>: Nothing.
632
+ //!
633
+ //! <b>Complexity</b>: Linear to the number of elements before i.
634
+ //!
635
+ //! <b>Note</b>: Non-standard extension.
636
+ const_iterator previous(const_iterator p)
637
+ { return const_iterator(this->icont().previous(p.get())); }
638
+
639
+ //////////////////////////////////////////////
640
+ //
641
+ // capacity
642
+ //
643
+ //////////////////////////////////////////////
644
+
645
+ //! <b>Effects</b>: Returns true if the list contains no elements.
646
+ //!
647
+ //! <b>Throws</b>: Nothing.
648
+ //!
649
+ //! <b>Complexity</b>: Constant.
650
+ bool empty() const
651
+ { return !this->size(); }
652
+
653
+ //! <b>Effects</b>: Returns the number of the elements contained in the list.
654
+ //!
655
+ //! <b>Throws</b>: Nothing.
656
+ //!
657
+ //! <b>Complexity</b>: Constant.
658
+ size_type size() const
659
+ { return this->icont().size(); }
660
+
661
+ //! <b>Effects</b>: Returns the largest possible size of the list.
662
+ //!
663
+ //! <b>Throws</b>: Nothing.
664
+ //!
665
+ //! <b>Complexity</b>: Constant.
666
+ size_type max_size() const
667
+ { return AllocHolder::max_size(); }
668
+
669
+ //! <b>Effects</b>: Inserts or erases elements at the end such that
670
+ //! the size becomes n. New elements are default constructed.
671
+ //!
672
+ //! <b>Throws</b>: If memory allocation throws, or T's copy constructor throws.
673
+ //!
674
+ //! <b>Complexity</b>: Linear to the difference between size() and new_size.
675
+ void resize(size_type new_size)
676
+ {
677
+ const_iterator last_pos;
678
+ if(!priv_try_shrink(new_size, last_pos)){
679
+ typedef default_construct_iterator<value_type, difference_type> default_iterator;
680
+ this->insert_after(last_pos, default_iterator(new_size - this->size()), default_iterator());
681
+ }
682
+ }
683
+
684
+ //! <b>Effects</b>: Inserts or erases elements at the end such that
685
+ //! the size becomes n. New elements are copy constructed from x.
686
+ //!
687
+ //! <b>Throws</b>: If memory allocation throws, or T's copy constructor throws.
688
+ //!
689
+ //! <b>Complexity</b>: Linear to the difference between size() and new_size.
690
+ void resize(size_type new_size, const T& x)
691
+ {
692
+ const_iterator last_pos;
693
+ if(!priv_try_shrink(new_size, last_pos)){
694
+ this->insert_after(last_pos, new_size, x);
695
+ }
696
+ }
697
+
698
+ //////////////////////////////////////////////
699
+ //
700
+ // element access
701
+ //
702
+ //////////////////////////////////////////////
703
+
704
+ //! <b>Requires</b>: !empty()
705
+ //!
706
+ //! <b>Effects</b>: Returns a reference to the first element
707
+ //! from the beginning of the container.
708
+ //!
709
+ //! <b>Throws</b>: Nothing.
710
+ //!
711
+ //! <b>Complexity</b>: Constant.
712
+ reference front()
713
+ { return *this->begin(); }
714
+
715
+ //! <b>Requires</b>: !empty()
716
+ //!
717
+ //! <b>Effects</b>: Returns a const reference to the first element
718
+ //! from the beginning of the container.
719
+ //!
720
+ //! <b>Throws</b>: Nothing.
721
+ //!
722
+ //! <b>Complexity</b>: Constant.
723
+ const_reference front() const
724
+ { return *this->begin(); }
725
+
726
+ //////////////////////////////////////////////
727
+ //
728
+ // modifiers
729
+ //
730
+ //////////////////////////////////////////////
731
+
732
+ #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
733
+
734
+ //! <b>Effects</b>: Inserts an object of type T constructed with
735
+ //! std::forward<Args>(args)... in the front of the list
736
+ //!
737
+ //! <b>Throws</b>: If memory allocation throws or
738
+ //! T's copy constructor throws.
739
+ //!
740
+ //! <b>Complexity</b>: Amortized constant time.
741
+ template <class... Args>
742
+ void emplace_front(Args&&... args)
743
+ { this->emplace_after(this->cbefore_begin(), boost::forward<Args>(args)...); }
744
+
745
+ //! <b>Effects</b>: Inserts an object of type T constructed with
746
+ //! std::forward<Args>(args)... after prev
747
+ //!
748
+ //! <b>Throws</b>: If memory allocation throws or
749
+ //! T's in-place constructor throws.
750
+ //!
751
+ //! <b>Complexity</b>: Constant
752
+ template <class... Args>
753
+ iterator emplace_after(const_iterator prev, Args&&... args)
754
+ {
755
+ NodePtr pnode(AllocHolder::create_node(boost::forward<Args>(args)...));
756
+ return iterator(this->icont().insert_after(prev.get(), *pnode));
757
+ }
758
+
759
+ #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING
760
+
761
+ #define BOOST_PP_LOCAL_MACRO(n) \
762
+ BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \
763
+ void emplace_front(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \
764
+ { \
765
+ this->emplace(this->cbegin() \
766
+ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \
767
+ } \
768
+ \
769
+ BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \
770
+ iterator emplace_after(const_iterator prev \
771
+ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \
772
+ { \
773
+ NodePtr pnode (AllocHolder::create_node \
774
+ (BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _))); \
775
+ return iterator(this->icont().insert_after(prev.get(), *pnode)); \
776
+ } \
777
+ //!
778
+ #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
779
+ #include BOOST_PP_LOCAL_ITERATE()
780
+
781
+ #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING
782
+
783
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
784
+ //! <b>Effects</b>: Inserts a copy of x at the beginning of the list.
785
+ //!
786
+ //! <b>Throws</b>: If memory allocation throws or
787
+ //! T's copy constructor throws.
788
+ //!
789
+ //! <b>Complexity</b>: Amortized constant time.
790
+ void push_front(const T &x);
791
+
792
+ //! <b>Effects</b>: Constructs a new element in the beginning of the list
793
+ //! and moves the resources of mx to this new element.
794
+ //!
795
+ //! <b>Throws</b>: If memory allocation throws.
796
+ //!
797
+ //! <b>Complexity</b>: Amortized constant time.
798
+ void push_front(T &&x);
799
+ #else
800
+ BOOST_MOVE_CONVERSION_AWARE_CATCH(push_front, T, void, priv_push_front)
801
+ #endif
802
+
803
+
804
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
805
+ //! <b>Requires</b>: p must be a valid iterator of *this.
806
+ //!
807
+ //! <b>Effects</b>: Inserts a copy of the value after the position pointed
808
+ //! by prev_p.
809
+ //!
810
+ //! <b>Returns</b>: An iterator to the inserted element.
811
+ //!
812
+ //! <b>Throws</b>: If memory allocation throws or T's copy constructor throws.
813
+ //!
814
+ //! <b>Complexity</b>: Amortized constant time.
815
+ //!
816
+ //! <b>Note</b>: Does not affect the validity of iterators and references of
817
+ //! previous values.
818
+ iterator insert_after(const_iterator prev_pos, const T &x);
819
+
820
+ //! <b>Requires</b>: prev_pos must be a valid iterator of *this.
821
+ //!
822
+ //! <b>Effects</b>: Inserts a move constructed copy object from the value after the
823
+ //! p pointed by prev_pos.
824
+ //!
825
+ //! <b>Returns</b>: An iterator to the inserted element.
826
+ //!
827
+ //! <b>Throws</b>: If memory allocation throws.
828
+ //!
829
+ //! <b>Complexity</b>: Amortized constant time.
830
+ //!
831
+ //! <b>Note</b>: Does not affect the validity of iterators and references of
832
+ //! previous values.
833
+ iterator insert_after(const_iterator prev_pos, T &&x);
834
+ #else
835
+ BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert_after, T, iterator, priv_insert_after, const_iterator)
836
+ #endif
837
+
838
+ //! <b>Requires</b>: prev_pos must be a valid iterator of *this.
839
+ //!
840
+ //! <b>Effects</b>: Inserts n copies of x after prev_pos.
841
+ //!
842
+ //! <b>Returns</b>: an iterator to the last inserted element or prev_pos if n is 0.
843
+ //!
844
+ //! <b>Throws</b>: If memory allocation throws or T's copy constructor throws.
845
+ //!
846
+ //!
847
+ //! <b>Complexity</b>: Linear to n.
848
+ //!
849
+ //! <b>Note</b>: Does not affect the validity of iterators and references of
850
+ //! previous values.
851
+ iterator insert_after(const_iterator prev_pos, size_type n, const value_type& x)
852
+ {
853
+ typedef constant_iterator<value_type, difference_type> cvalue_iterator;
854
+ return this->insert_after(prev_pos, cvalue_iterator(x, n), cvalue_iterator());
855
+ }
856
+
857
+ //! <b>Requires</b>: prev_pos must be a valid iterator of *this.
858
+ //!
859
+ //! <b>Effects</b>: Inserts the range pointed by [first, last)
860
+ //! after the position prev_pos.
861
+ //!
862
+ //! <b>Returns</b>: an iterator to the last inserted element or prev_pos if first == last.
863
+ //!
864
+ //! <b>Throws</b>: If memory allocation throws, T's constructor from a
865
+ //! dereferenced InpIt throws.
866
+ //!
867
+ //! <b>Complexity</b>: Linear to the number of elements inserted.
868
+ //!
869
+ //! <b>Note</b>: Does not affect the validity of iterators and references of
870
+ //! previous values.
871
+ template <class InpIt>
872
+ iterator insert_after(const_iterator prev_pos, InpIt first, InpIt last
873
+ #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
874
+ , typename container_detail::enable_if_c
875
+ < !container_detail::is_convertible<InpIt, size_type>::value
876
+ && (container_detail::is_input_iterator<InpIt>::value
877
+ || container_detail::is_same<alloc_version, allocator_v1>::value
878
+ )
879
+ >::type * = 0
880
+ #endif
881
+ )
882
+ {
883
+ iterator ret_it(prev_pos.get());
884
+ for (; first != last; ++first){
885
+ ret_it = iterator(this->icont().insert_after(ret_it.get(), *this->create_node_from_it(first)));
886
+ }
887
+ return ret_it;
888
+ }
889
+
890
+ #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
891
+ template <class FwdIt>
892
+ iterator insert_after(const_iterator prev, FwdIt first, FwdIt last
893
+ , typename container_detail::enable_if_c
894
+ < !container_detail::is_convertible<FwdIt, size_type>::value
895
+ && !(container_detail::is_input_iterator<FwdIt>::value
896
+ || container_detail::is_same<alloc_version, allocator_v1>::value
897
+ )
898
+ >::type * = 0
899
+ )
900
+ {
901
+ //Optimized allocation and construction
902
+ insertion_functor func(this->icont(), prev.get());
903
+ this->allocate_many_and_construct(first, std::distance(first, last), func);
904
+ return iterator(func.inserted_first());
905
+ }
906
+ #endif
907
+
908
+ //! <b>Effects</b>: Removes the first element from the list.
909
+ //!
910
+ //! <b>Throws</b>: Nothing.
911
+ //!
912
+ //! <b>Complexity</b>: Amortized constant time.
913
+ void pop_front()
914
+ { this->icont().pop_front_and_dispose(Destroyer(this->node_alloc())); }
915
+
916
+ //! <b>Effects</b>: Erases the element after the element pointed by prev_pos
917
+ //! of the list.
918
+ //!
919
+ //! <b>Returns</b>: the first element remaining beyond the removed elements,
920
+ //! or end() if no such element exists.
921
+ //!
922
+ //! <b>Throws</b>: Nothing.
923
+ //!
924
+ //! <b>Complexity</b>: Constant.
925
+ //!
926
+ //! <b>Note</b>: Does not invalidate iterators or references to non erased elements.
927
+ iterator erase_after(const_iterator prev_pos)
928
+ {
929
+ return iterator(this->icont().erase_after_and_dispose(prev_pos.get(), Destroyer(this->node_alloc())));
930
+ }
931
+
932
+ //! <b>Effects</b>: Erases the range (before_first, last) from
933
+ //! the list.
934
+ //!
935
+ //! <b>Returns</b>: the first element remaining beyond the removed elements,
936
+ //! or end() if no such element exists.
937
+ //!
938
+ //! <b>Throws</b>: Nothing.
939
+ //!
940
+ //! <b>Complexity</b>: Linear to the number of erased elements.
941
+ //!
942
+ //! <b>Note</b>: Does not invalidate iterators or references to non erased elements.
943
+ iterator erase_after(const_iterator before_first, const_iterator last)
944
+ {
945
+ return iterator(this->icont().erase_after_and_dispose(before_first.get(), last.get(), Destroyer(this->node_alloc())));
946
+ }
947
+
948
+ //! <b>Effects</b>: Swaps the contents of *this and x.
949
+ //!
950
+ //! <b>Throws</b>: Nothing.
951
+ //!
952
+ //! <b>Complexity</b>: Linear to the number of elements on *this and x.
953
+ void swap(slist& x)
954
+ { AllocHolder::swap(x); }
955
+
956
+ //! <b>Effects</b>: Erases all the elements of the list.
957
+ //!
958
+ //! <b>Throws</b>: Nothing.
959
+ //!
960
+ //! <b>Complexity</b>: Linear to the number of elements in the list.
961
+ void clear()
962
+ { this->icont().clear_and_dispose(Destroyer(this->node_alloc())); }
963
+
964
+ //////////////////////////////////////////////
965
+ //
966
+ // slist operations
967
+ //
968
+ //////////////////////////////////////////////
969
+
970
+ //! <b>Requires</b>: p must point to an element contained
971
+ //! by the list. x != *this
972
+ //!
973
+ //! <b>Effects</b>: Transfers all the elements of list x to this list, after the
974
+ //! the element pointed by p. No destructors or copy constructors are called.
975
+ //!
976
+ //! <b>Throws</b>: std::runtime_error if this' allocator and x's allocator
977
+ //! are not equal.
978
+ //!
979
+ //! <b>Complexity</b>: Linear to the elements in x.
980
+ //!
981
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of
982
+ //! this list. Iterators of this list and all the references are not invalidated.
983
+ void splice_after(const_iterator prev_pos, slist& x) BOOST_CONTAINER_NOEXCEPT
984
+ {
985
+ BOOST_ASSERT(this != &x);
986
+ BOOST_ASSERT(this->node_alloc() == x.node_alloc());
987
+ this->icont().splice_after(prev_pos.get(), x.icont());
988
+ }
989
+
990
+ //! <b>Requires</b>: p must point to an element contained
991
+ //! by the list. x != *this
992
+ //!
993
+ //! <b>Effects</b>: Transfers all the elements of list x to this list, after the
994
+ //! the element pointed by p. No destructors or copy constructors are called.
995
+ //!
996
+ //! <b>Throws</b>: std::runtime_error if this' allocator and x's allocator
997
+ //! are not equal.
998
+ //!
999
+ //! <b>Complexity</b>: Linear to the elements in x.
1000
+ //!
1001
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of
1002
+ //! this list. Iterators of this list and all the references are not invalidated.
1003
+ void splice_after(const_iterator prev_pos, BOOST_RV_REF(slist) x) BOOST_CONTAINER_NOEXCEPT
1004
+ { this->splice_after(prev_pos, static_cast<slist&>(x)); }
1005
+
1006
+ //! <b>Requires</b>: prev_pos must be a valid iterator of this.
1007
+ //! i must point to an element contained in list x.
1008
+ //! this' allocator and x's allocator shall compare equal.
1009
+ //!
1010
+ //! <b>Effects</b>: Transfers the value pointed by i, from list x to this list,
1011
+ //! after the element pointed by prev_pos.
1012
+ //! If prev_pos == prev or prev_pos == ++prev, this function is a null operation.
1013
+ //!
1014
+ //! <b>Throws</b>: Nothing
1015
+ //!
1016
+ //! <b>Complexity</b>: Constant.
1017
+ //!
1018
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
1019
+ //! list. Iterators of this list and all the references are not invalidated.
1020
+ void splice_after(const_iterator prev_pos, slist& x, const_iterator prev) BOOST_CONTAINER_NOEXCEPT
1021
+ {
1022
+ BOOST_ASSERT(this->node_alloc() == x.node_alloc());
1023
+ this->icont().splice_after(prev_pos.get(), x.icont(), prev.get());
1024
+ }
1025
+
1026
+ //! <b>Requires</b>: prev_pos must be a valid iterator of this.
1027
+ //! i must point to an element contained in list x.
1028
+ //! this' allocator and x's allocator shall compare equal.
1029
+ //!
1030
+ //! <b>Effects</b>: Transfers the value pointed by i, from list x to this list,
1031
+ //! after the element pointed by prev_pos.
1032
+ //! If prev_pos == prev or prev_pos == ++prev, this function is a null operation.
1033
+ //!
1034
+ //! <b>Throws</b>: Nothing
1035
+ //!
1036
+ //! <b>Complexity</b>: Constant.
1037
+ //!
1038
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
1039
+ //! list. Iterators of this list and all the references are not invalidated.
1040
+ void splice_after(const_iterator prev_pos, BOOST_RV_REF(slist) x, const_iterator prev) BOOST_CONTAINER_NOEXCEPT
1041
+ { this->splice_after(prev_pos, static_cast<slist&>(x), prev); }
1042
+
1043
+ //! <b>Requires</b>: prev_pos must be a valid iterator of this.
1044
+ //! before_first and before_last must be valid iterators of x.
1045
+ //! prev_pos must not be contained in [before_first, before_last) range.
1046
+ //! this' allocator and x's allocator shall compare equal.
1047
+ //!
1048
+ //! <b>Effects</b>: Transfers the range [before_first + 1, before_last + 1)
1049
+ //! from list x to this list, after the element pointed by prev_pos.
1050
+ //!
1051
+ //! <b>Throws</b>: Nothing
1052
+ //!
1053
+ //! <b>Complexity</b>: Linear to the number of transferred elements.
1054
+ //!
1055
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
1056
+ //! list. Iterators of this list and all the references are not invalidated.
1057
+ void splice_after(const_iterator prev_pos, slist& x,
1058
+ const_iterator before_first, const_iterator before_last) BOOST_CONTAINER_NOEXCEPT
1059
+ {
1060
+ BOOST_ASSERT(this->node_alloc() == x.node_alloc());
1061
+ this->icont().splice_after
1062
+ (prev_pos.get(), x.icont(), before_first.get(), before_last.get());
1063
+ }
1064
+
1065
+ //! <b>Requires</b>: prev_pos must be a valid iterator of this.
1066
+ //! before_first and before_last must be valid iterators of x.
1067
+ //! prev_pos must not be contained in [before_first, before_last) range.
1068
+ //! this' allocator and x's allocator shall compare equal.
1069
+ //!
1070
+ //! <b>Effects</b>: Transfers the range [before_first + 1, before_last + 1)
1071
+ //! from list x to this list, after the element pointed by prev_pos.
1072
+ //!
1073
+ //! <b>Throws</b>: Nothing
1074
+ //!
1075
+ //! <b>Complexity</b>: Linear to the number of transferred elements.
1076
+ //!
1077
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
1078
+ //! list. Iterators of this list and all the references are not invalidated.
1079
+ void splice_after(const_iterator prev_pos, BOOST_RV_REF(slist) x,
1080
+ const_iterator before_first, const_iterator before_last) BOOST_CONTAINER_NOEXCEPT
1081
+ { this->splice_after(prev_pos, static_cast<slist&>(x), before_first, before_last); }
1082
+
1083
+ //! <b>Requires</b>: prev_pos must be a valid iterator of this.
1084
+ //! before_first and before_last must be valid iterators of x.
1085
+ //! prev_pos must not be contained in [before_first, before_last) range.
1086
+ //! n == std::distance(before_first, before_last).
1087
+ //! this' allocator and x's allocator shall compare equal.
1088
+ //!
1089
+ //! <b>Effects</b>: Transfers the range [before_first + 1, before_last + 1)
1090
+ //! from list x to this list, after the element pointed by prev_pos.
1091
+ //!
1092
+ //! <b>Throws</b>: Nothing
1093
+ //!
1094
+ //! <b>Complexity</b>: Constant.
1095
+ //!
1096
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
1097
+ //! list. Iterators of this list and all the references are not invalidated.
1098
+ void splice_after(const_iterator prev_pos, slist& x,
1099
+ const_iterator before_first, const_iterator before_last,
1100
+ size_type n) BOOST_CONTAINER_NOEXCEPT
1101
+ {
1102
+ BOOST_ASSERT(this->node_alloc() == x.node_alloc());
1103
+ this->icont().splice_after
1104
+ (prev_pos.get(), x.icont(), before_first.get(), before_last.get(), n);
1105
+ }
1106
+
1107
+ //! <b>Requires</b>: prev_pos must be a valid iterator of this.
1108
+ //! before_first and before_last must be valid iterators of x.
1109
+ //! prev_pos must not be contained in [before_first, before_last) range.
1110
+ //! n == std::distance(before_first, before_last).
1111
+ //! this' allocator and x's allocator shall compare equal.
1112
+ //!
1113
+ //! <b>Effects</b>: Transfers the range [before_first + 1, before_last + 1)
1114
+ //! from list x to this list, after the element pointed by prev_pos.
1115
+ //!
1116
+ //! <b>Throws</b>: Nothing
1117
+ //!
1118
+ //! <b>Complexity</b>: Constant.
1119
+ //!
1120
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
1121
+ //! list. Iterators of this list and all the references are not invalidated.
1122
+ void splice_after(const_iterator prev_pos, BOOST_RV_REF(slist) x,
1123
+ const_iterator before_first, const_iterator before_last,
1124
+ size_type n) BOOST_CONTAINER_NOEXCEPT
1125
+ { this->splice_after(prev_pos, static_cast<slist&>(x), before_first, before_last, n); }
1126
+
1127
+ //! <b>Effects</b>: Removes all the elements that compare equal to value.
1128
+ //!
1129
+ //! <b>Throws</b>: Nothing.
1130
+ //!
1131
+ //! <b>Complexity</b>: Linear time. It performs exactly size() comparisons for equality.
1132
+ //!
1133
+ //! <b>Note</b>: The relative order of elements that are not removed is unchanged,
1134
+ //! and iterators to elements that are not removed remain valid.
1135
+ void remove(const T& value)
1136
+ { this->remove_if(equal_to_value(value)); }
1137
+
1138
+ //! <b>Effects</b>: Removes all the elements for which a specified
1139
+ //! predicate is satisfied.
1140
+ //!
1141
+ //! <b>Throws</b>: If pred throws.
1142
+ //!
1143
+ //! <b>Complexity</b>: Linear time. It performs exactly size() calls to the predicate.
1144
+ //!
1145
+ //! <b>Note</b>: The relative order of elements that are not removed is unchanged,
1146
+ //! and iterators to elements that are not removed remain valid.
1147
+ template <class Pred>
1148
+ void remove_if(Pred pred)
1149
+ {
1150
+ typedef ValueCompareToNodeCompare<Pred> Predicate;
1151
+ this->icont().remove_and_dispose_if(Predicate(pred), Destroyer(this->node_alloc()));
1152
+ }
1153
+
1154
+ //! <b>Effects</b>: Removes adjacent duplicate elements or adjacent
1155
+ //! elements that are equal from the list.
1156
+ //!
1157
+ //! <b>Throws</b>: If comparison throws.
1158
+ //!
1159
+ //! <b>Complexity</b>: Linear time (size()-1 comparisons equality comparisons).
1160
+ //!
1161
+ //! <b>Note</b>: The relative order of elements that are not removed is unchanged,
1162
+ //! and iterators to elements that are not removed remain valid.
1163
+ void unique()
1164
+ { this->unique(value_equal()); }
1165
+
1166
+ //! <b>Effects</b>: Removes adjacent duplicate elements or adjacent
1167
+ //! elements that satisfy some binary predicate from the list.
1168
+ //!
1169
+ //! <b>Throws</b>: If pred throws.
1170
+ //!
1171
+ //! <b>Complexity</b>: Linear time (size()-1 comparisons calls to pred()).
1172
+ //!
1173
+ //! <b>Note</b>: The relative order of elements that are not removed is unchanged,
1174
+ //! and iterators to elements that are not removed remain valid.
1175
+ template <class Pred>
1176
+ void unique(Pred pred)
1177
+ {
1178
+ typedef ValueCompareToNodeCompare<Pred> Predicate;
1179
+ this->icont().unique_and_dispose(Predicate(pred), Destroyer(this->node_alloc()));
1180
+ }
1181
+
1182
+ //! <b>Requires</b>: The lists x and *this must be distinct.
1183
+ //!
1184
+ //! <b>Effects</b>: This function removes all of x's elements and inserts them
1185
+ //! in order into *this according to std::less<value_type>. The merge is stable;
1186
+ //! that is, if an element from *this is equivalent to one from x, then the element
1187
+ //! from *this will precede the one from x.
1188
+ //!
1189
+ //! <b>Throws</b>: If comparison throws.
1190
+ //!
1191
+ //! <b>Complexity</b>: This function is linear time: it performs at most
1192
+ //! size() + x.size() - 1 comparisons.
1193
+ void merge(slist & x)
1194
+ { this->merge(x, value_less()); }
1195
+
1196
+ //! <b>Requires</b>: The lists x and *this must be distinct.
1197
+ //!
1198
+ //! <b>Effects</b>: This function removes all of x's elements and inserts them
1199
+ //! in order into *this according to std::less<value_type>. The merge is stable;
1200
+ //! that is, if an element from *this is equivalent to one from x, then the element
1201
+ //! from *this will precede the one from x.
1202
+ //!
1203
+ //! <b>Throws</b>: If comparison throws.
1204
+ //!
1205
+ //! <b>Complexity</b>: This function is linear time: it performs at most
1206
+ //! size() + x.size() - 1 comparisons.
1207
+ void merge(BOOST_RV_REF(slist) x)
1208
+ { this->merge(static_cast<slist&>(x)); }
1209
+
1210
+ //! <b>Requires</b>: p must be a comparison function that induces a strict weak
1211
+ //! ordering and both *this and x must be sorted according to that ordering
1212
+ //! The lists x and *this must be distinct.
1213
+ //!
1214
+ //! <b>Effects</b>: This function removes all of x's elements and inserts them
1215
+ //! in order into *this. The merge is stable; that is, if an element from *this is
1216
+ //! equivalent to one from x, then the element from *this will precede the one from x.
1217
+ //!
1218
+ //! <b>Throws</b>: If comp throws.
1219
+ //!
1220
+ //! <b>Complexity</b>: This function is linear time: it performs at most
1221
+ //! size() + x.size() - 1 comparisons.
1222
+ //!
1223
+ //! <b>Note</b>: Iterators and references to *this are not invalidated.
1224
+ template <class StrictWeakOrdering>
1225
+ void merge(slist& x, StrictWeakOrdering comp)
1226
+ {
1227
+ BOOST_ASSERT(this->node_alloc() == x.node_alloc());
1228
+ this->icont().merge(x.icont(),
1229
+ ValueCompareToNodeCompare<StrictWeakOrdering>(comp));
1230
+ }
1231
+
1232
+ //! <b>Requires</b>: p must be a comparison function that induces a strict weak
1233
+ //! ordering and both *this and x must be sorted according to that ordering
1234
+ //! The lists x and *this must be distinct.
1235
+ //!
1236
+ //! <b>Effects</b>: This function removes all of x's elements and inserts them
1237
+ //! in order into *this. The merge is stable; that is, if an element from *this is
1238
+ //! equivalent to one from x, then the element from *this will precede the one from x.
1239
+ //!
1240
+ //! <b>Throws</b>: If comp throws.
1241
+ //!
1242
+ //! <b>Complexity</b>: This function is linear time: it performs at most
1243
+ //! size() + x.size() - 1 comparisons.
1244
+ //!
1245
+ //! <b>Note</b>: Iterators and references to *this are not invalidated.
1246
+ template <class StrictWeakOrdering>
1247
+ void merge(BOOST_RV_REF(slist) x, StrictWeakOrdering comp)
1248
+ { this->merge(static_cast<slist&>(x), comp); }
1249
+
1250
+ //! <b>Effects</b>: This function sorts the list *this according to std::less<value_type>.
1251
+ //! The sort is stable, that is, the relative order of equivalent elements is preserved.
1252
+ //!
1253
+ //! <b>Throws</b>: If comparison throws.
1254
+ //!
1255
+ //! <b>Notes</b>: Iterators and references are not invalidated.
1256
+ //!
1257
+ //! <b>Complexity</b>: The number of comparisons is approximately N log N, where N
1258
+ //! is the list's size.
1259
+ void sort()
1260
+ { this->sort(value_less()); }
1261
+
1262
+ //! <b>Effects</b>: This function sorts the list *this according to std::less<value_type>.
1263
+ //! The sort is stable, that is, the relative order of equivalent elements is preserved.
1264
+ //!
1265
+ //! <b>Throws</b>: If comp throws.
1266
+ //!
1267
+ //! <b>Notes</b>: Iterators and references are not invalidated.
1268
+ //!
1269
+ //! <b>Complexity</b>: The number of comparisons is approximately N log N, where N
1270
+ //! is the list's size.
1271
+ template <class StrictWeakOrdering>
1272
+ void sort(StrictWeakOrdering comp)
1273
+ {
1274
+ // nothing if the slist has length 0 or 1.
1275
+ if (this->size() < 2)
1276
+ return;
1277
+ this->icont().sort(ValueCompareToNodeCompare<StrictWeakOrdering>(comp));
1278
+ }
1279
+
1280
+ //! <b>Effects</b>: Reverses the order of elements in the list.
1281
+ //!
1282
+ //! <b>Throws</b>: Nothing.
1283
+ //!
1284
+ //! <b>Complexity</b>: This function is linear time.
1285
+ //!
1286
+ //! <b>Note</b>: Iterators and references are not invalidated
1287
+ void reverse() BOOST_CONTAINER_NOEXCEPT
1288
+ { this->icont().reverse(); }
1289
+
1290
+ //////////////////////////////////////////////
1291
+ //
1292
+ // list compatibility interface
1293
+ //
1294
+ //////////////////////////////////////////////
1295
+
1296
+ #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1297
+
1298
+ //! <b>Effects</b>: Inserts an object of type T constructed with
1299
+ //! std::forward<Args>(args)... before p
1300
+ //!
1301
+ //! <b>Throws</b>: If memory allocation throws or
1302
+ //! T's in-place constructor throws.
1303
+ //!
1304
+ //! <b>Complexity</b>: Linear to the elements before p
1305
+ template <class... Args>
1306
+ iterator emplace(const_iterator p, Args&&... args)
1307
+ { return this->emplace_after(this->previous(p), boost::forward<Args>(args)...); }
1308
+
1309
+ #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING
1310
+
1311
+ #define BOOST_PP_LOCAL_MACRO(n) \
1312
+ BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \
1313
+ iterator emplace (const_iterator p \
1314
+ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \
1315
+ { \
1316
+ return this->emplace_after \
1317
+ (this->previous(p) \
1318
+ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \
1319
+ } \
1320
+ //!
1321
+ #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
1322
+ #include BOOST_PP_LOCAL_ITERATE()
1323
+ #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING
1324
+
1325
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1326
+ //! <b>Requires</b>: p must be a valid iterator of *this.
1327
+ //!
1328
+ //! <b>Effects</b>: Insert a copy of x before p.
1329
+ //!
1330
+ //! <b>Returns</b>: an iterator to the inserted element.
1331
+ //!
1332
+ //! <b>Throws</b>: If memory allocation throws or x's copy constructor throws.
1333
+ //!
1334
+ //! <b>Complexity</b>: Linear to the elements before p.
1335
+ iterator insert(const_iterator position, const T &x);
1336
+
1337
+ //! <b>Requires</b>: p must be a valid iterator of *this.
1338
+ //!
1339
+ //! <b>Effects</b>: Insert a new element before p with mx's resources.
1340
+ //!
1341
+ //! <b>Returns</b>: an iterator to the inserted element.
1342
+ //!
1343
+ //! <b>Throws</b>: If memory allocation throws.
1344
+ //!
1345
+ //! <b>Complexity</b>: Linear to the elements before p.
1346
+ iterator insert(const_iterator prev_pos, T &&x);
1347
+ #else
1348
+ BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator)
1349
+ #endif
1350
+
1351
+ //! <b>Requires</b>: p must be a valid iterator of *this.
1352
+ //!
1353
+ //! <b>Effects</b>: Inserts n copies of x before p.
1354
+ //!
1355
+ //! <b>Returns</b>: an iterator to the first inserted element or p if n == 0.
1356
+ //!
1357
+ //! <b>Throws</b>: If memory allocation throws or T's copy constructor throws.
1358
+ //!
1359
+ //! <b>Complexity</b>: Linear to n plus linear to the elements before p.
1360
+ iterator insert(const_iterator p, size_type n, const value_type& x)
1361
+ {
1362
+ const_iterator prev(this->previous(p));
1363
+ this->insert_after(prev, n, x);
1364
+ return ++iterator(prev.get());
1365
+ }
1366
+
1367
+ //! <b>Requires</b>: p must be a valid iterator of *this.
1368
+ //!
1369
+ //! <b>Effects</b>: Insert a copy of the [first, last) range before p.
1370
+ //!
1371
+ //! <b>Returns</b>: an iterator to the first inserted element or p if first == last.
1372
+ //!
1373
+ //! <b>Throws</b>: If memory allocation throws, T's constructor from a
1374
+ //! dereferenced InpIt throws.
1375
+ //!
1376
+ //! <b>Complexity</b>: Linear to std::distance [first, last) plus
1377
+ //! linear to the elements before p.
1378
+ template <class InIter>
1379
+ iterator insert(const_iterator p, InIter first, InIter last)
1380
+ {
1381
+ const_iterator prev(this->previous(p));
1382
+ this->insert_after(prev, first, last);
1383
+ return ++iterator(prev.get());
1384
+ }
1385
+
1386
+ //! <b>Requires</b>: p must be a valid iterator of *this.
1387
+ //!
1388
+ //! <b>Effects</b>: Erases the element at p p.
1389
+ //!
1390
+ //! <b>Throws</b>: Nothing.
1391
+ //!
1392
+ //! <b>Complexity</b>: Linear to the number of elements before p.
1393
+ iterator erase(const_iterator p) BOOST_CONTAINER_NOEXCEPT
1394
+ { return iterator(this->erase_after(previous(p))); }
1395
+
1396
+ //! <b>Requires</b>: first and last must be valid iterator to elements in *this.
1397
+ //!
1398
+ //! <b>Effects</b>: Erases the elements pointed by [first, last).
1399
+ //!
1400
+ //! <b>Throws</b>: Nothing.
1401
+ //!
1402
+ //! <b>Complexity</b>: Linear to the distance between first and last plus
1403
+ //! linear to the elements before first.
1404
+ iterator erase(const_iterator first, const_iterator last) BOOST_CONTAINER_NOEXCEPT
1405
+ { return iterator(this->erase_after(previous(first), last)); }
1406
+
1407
+ //! <b>Requires</b>: p must point to an element contained
1408
+ //! by the list. x != *this. this' allocator and x's allocator shall compare equal
1409
+ //!
1410
+ //! <b>Effects</b>: Transfers all the elements of list x to this list, before the
1411
+ //! the element pointed by p. No destructors or copy constructors are called.
1412
+ //!
1413
+ //! <b>Throws</b>: Nothing
1414
+ //!
1415
+ //! <b>Complexity</b>: Linear in distance(begin(), p), and linear in x.size().
1416
+ //!
1417
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of
1418
+ //! this list. Iterators of this list and all the references are not invalidated.
1419
+ void splice(const_iterator p, slist& x) BOOST_CONTAINER_NOEXCEPT
1420
+ { this->splice_after(this->previous(p), x); }
1421
+
1422
+ //! <b>Requires</b>: p must point to an element contained
1423
+ //! by the list. x != *this. this' allocator and x's allocator shall compare equal
1424
+ //!
1425
+ //! <b>Effects</b>: Transfers all the elements of list x to this list, before the
1426
+ //! the element pointed by p. No destructors or copy constructors are called.
1427
+ //!
1428
+ //! <b>Throws</b>: Nothing
1429
+ //!
1430
+ //! <b>Complexity</b>: Linear in distance(begin(), p), and linear in x.size().
1431
+ //!
1432
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of
1433
+ //! this list. Iterators of this list and all the references are not invalidated.
1434
+ void splice(const_iterator p, BOOST_RV_REF(slist) x) BOOST_CONTAINER_NOEXCEPT
1435
+ { this->splice(p, static_cast<slist&>(x)); }
1436
+
1437
+ //! <b>Requires</b>: p must point to an element contained
1438
+ //! by this list. i must point to an element contained in list x.
1439
+ //! this' allocator and x's allocator shall compare equal
1440
+ //!
1441
+ //! <b>Effects</b>: Transfers the value pointed by i, from list x to this list,
1442
+ //! before the the element pointed by p. No destructors or copy constructors are called.
1443
+ //! If p == i or p == ++i, this function is a null operation.
1444
+ //!
1445
+ //! <b>Throws</b>: Nothing
1446
+ //!
1447
+ //! <b>Complexity</b>: Linear in distance(begin(), p), and in distance(x.begin(), i).
1448
+ //!
1449
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
1450
+ //! list. Iterators of this list and all the references are not invalidated.
1451
+ void splice(const_iterator p, slist& x, const_iterator i) BOOST_CONTAINER_NOEXCEPT
1452
+ { this->splice_after(this->previous(p), x, this->previous(i)); }
1453
+
1454
+ //! <b>Requires</b>: p must point to an element contained
1455
+ //! by this list. i must point to an element contained in list x.
1456
+ //! this' allocator and x's allocator shall compare equal.
1457
+ //!
1458
+ //! <b>Effects</b>: Transfers the value pointed by i, from list x to this list,
1459
+ //! before the the element pointed by p. No destructors or copy constructors are called.
1460
+ //! If p == i or p == ++i, this function is a null operation.
1461
+ //!
1462
+ //! <b>Throws</b>: Nothing
1463
+ //!
1464
+ //! <b>Complexity</b>: Linear in distance(begin(), p), and in distance(x.begin(), i).
1465
+ //!
1466
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
1467
+ //! list. Iterators of this list and all the references are not invalidated.
1468
+ void splice(const_iterator p, BOOST_RV_REF(slist) x, const_iterator i) BOOST_CONTAINER_NOEXCEPT
1469
+ { this->splice(p, static_cast<slist&>(x), i); }
1470
+
1471
+ //! <b>Requires</b>: p must point to an element contained
1472
+ //! by this list. first and last must point to elements contained in list x.
1473
+ //!
1474
+ //! <b>Effects</b>: Transfers the range pointed by first and last from list x to this list,
1475
+ //! before the the element pointed by p. No destructors or copy constructors are called.
1476
+ //! this' allocator and x's allocator shall compare equal.
1477
+ //!
1478
+ //! <b>Throws</b>: Nothing
1479
+ //!
1480
+ //! <b>Complexity</b>: Linear in distance(begin(), p), in distance(x.begin(), first),
1481
+ //! and in distance(first, last).
1482
+ //!
1483
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
1484
+ //! list. Iterators of this list and all the references are not invalidated.
1485
+ void splice(const_iterator p, slist& x, const_iterator first, const_iterator last) BOOST_CONTAINER_NOEXCEPT
1486
+ { this->splice_after(this->previous(p), x, this->previous(first), this->previous(last)); }
1487
+
1488
+ //! <b>Requires</b>: p must point to an element contained
1489
+ //! by this list. first and last must point to elements contained in list x.
1490
+ //! this' allocator and x's allocator shall compare equal
1491
+ //!
1492
+ //! <b>Effects</b>: Transfers the range pointed by first and last from list x to this list,
1493
+ //! before the the element pointed by p. No destructors or copy constructors are called.
1494
+ //!
1495
+ //! <b>Throws</b>: Nothing
1496
+ //!
1497
+ //! <b>Complexity</b>: Linear in distance(begin(), p), in distance(x.begin(), first),
1498
+ //! and in distance(first, last).
1499
+ //!
1500
+ //! <b>Note</b>: Iterators of values obtained from list x now point to elements of this
1501
+ //! list. Iterators of this list and all the references are not invalidated.
1502
+ void splice(const_iterator p, BOOST_RV_REF(slist) x, const_iterator first, const_iterator last) BOOST_CONTAINER_NOEXCEPT
1503
+ { this->splice(p, static_cast<slist&>(x), first, last); }
1504
+
1505
+ /// @cond
1506
+ private:
1507
+
1508
+ void priv_push_front (const T &x)
1509
+ { this->insert(this->cbegin(), x); }
1510
+
1511
+ void priv_push_front (BOOST_RV_REF(T) x)
1512
+ { this->insert(this->cbegin(), ::boost::move(x)); }
1513
+
1514
+ bool priv_try_shrink(size_type new_size, const_iterator &last_pos)
1515
+ {
1516
+ typename Icont::iterator end_n(this->icont().end()), cur(this->icont().before_begin()), cur_next;
1517
+ while (++(cur_next = cur) != end_n && new_size > 0){
1518
+ --new_size;
1519
+ cur = cur_next;
1520
+ }
1521
+ last_pos = const_iterator(cur);
1522
+ if (cur_next != end_n){
1523
+ this->erase_after(last_pos, const_iterator(end_n));
1524
+ return true;
1525
+ }
1526
+ else{
1527
+ return false;
1528
+ }
1529
+ }
1530
+
1531
+ template<class U>
1532
+ iterator priv_insert(const_iterator p, BOOST_FWD_REF(U) x)
1533
+ { return this->insert_after(previous(p), ::boost::forward<U>(x)); }
1534
+
1535
+ template<class U>
1536
+ iterator priv_insert_after(const_iterator prev_pos, BOOST_FWD_REF(U) x)
1537
+ { return iterator(this->icont().insert_after(prev_pos.get(), *this->create_node(::boost::forward<U>(x)))); }
1538
+
1539
+ class insertion_functor;
1540
+ friend class insertion_functor;
1541
+
1542
+ class insertion_functor
1543
+ {
1544
+ Icont &icont_;
1545
+ typedef typename Icont::iterator iiterator;
1546
+ typedef typename Icont::const_iterator iconst_iterator;
1547
+ const iconst_iterator prev_;
1548
+ iiterator ret_;
1549
+
1550
+ public:
1551
+ insertion_functor(Icont &icont, typename Icont::const_iterator prev)
1552
+ : icont_(icont), prev_(prev), ret_(prev.unconst())
1553
+ {}
1554
+
1555
+ void operator()(Node &n)
1556
+ {
1557
+ ret_ = this->icont_.insert_after(prev_, n);
1558
+ }
1559
+
1560
+ iiterator inserted_first() const
1561
+ { return ret_; }
1562
+ };
1563
+
1564
+ //Functors for member algorithm defaults
1565
+ struct value_less
1566
+ {
1567
+ bool operator()(const value_type &a, const value_type &b) const
1568
+ { return a < b; }
1569
+ };
1570
+
1571
+ struct value_equal
1572
+ {
1573
+ bool operator()(const value_type &a, const value_type &b) const
1574
+ { return a == b; }
1575
+ };
1576
+
1577
+ struct value_equal_to_this
1578
+ {
1579
+ explicit value_equal_to_this(const value_type &ref)
1580
+ : m_ref(ref){}
1581
+
1582
+ bool operator()(const value_type &val) const
1583
+ { return m_ref == val; }
1584
+
1585
+ const value_type &m_ref;
1586
+ };
1587
+ /// @endcond
1588
+ };
1589
+
1590
+ template <class T, class Allocator>
1591
+ inline bool
1592
+ operator==(const slist<T,Allocator>& x, const slist<T,Allocator>& y)
1593
+ {
1594
+ if(x.size() != y.size()){
1595
+ return false;
1596
+ }
1597
+ typedef typename slist<T,Allocator>::const_iterator const_iterator;
1598
+ const_iterator end1 = x.end();
1599
+
1600
+ const_iterator i1 = x.begin();
1601
+ const_iterator i2 = y.begin();
1602
+ while (i1 != end1 && *i1 == *i2){
1603
+ ++i1;
1604
+ ++i2;
1605
+ }
1606
+ return i1 == end1;
1607
+ }
1608
+
1609
+ template <class T, class Allocator>
1610
+ inline bool
1611
+ operator<(const slist<T,Allocator>& sL1, const slist<T,Allocator>& sL2)
1612
+ {
1613
+ return std::lexicographical_compare
1614
+ (sL1.begin(), sL1.end(), sL2.begin(), sL2.end());
1615
+ }
1616
+
1617
+ template <class T, class Allocator>
1618
+ inline bool
1619
+ operator!=(const slist<T,Allocator>& sL1, const slist<T,Allocator>& sL2)
1620
+ { return !(sL1 == sL2); }
1621
+
1622
+ template <class T, class Allocator>
1623
+ inline bool
1624
+ operator>(const slist<T,Allocator>& sL1, const slist<T,Allocator>& sL2)
1625
+ { return sL2 < sL1; }
1626
+
1627
+ template <class T, class Allocator>
1628
+ inline bool
1629
+ operator<=(const slist<T,Allocator>& sL1, const slist<T,Allocator>& sL2)
1630
+ { return !(sL2 < sL1); }
1631
+
1632
+ template <class T, class Allocator>
1633
+ inline bool
1634
+ operator>=(const slist<T,Allocator>& sL1, const slist<T,Allocator>& sL2)
1635
+ { return !(sL1 < sL2); }
1636
+
1637
+ template <class T, class Allocator>
1638
+ inline void swap(slist<T,Allocator>& x, slist<T,Allocator>& y)
1639
+ { x.swap(y); }
1640
+
1641
+ }}
1642
+
1643
+ /// @cond
1644
+
1645
+ namespace boost {
1646
+
1647
+ //!has_trivial_destructor_after_move<> == true_type
1648
+ //!specialization for optimizations
1649
+ template <class T, class Allocator>
1650
+ struct has_trivial_destructor_after_move<boost::container::slist<T, Allocator> >
1651
+ : public ::boost::has_trivial_destructor_after_move<Allocator>
1652
+ {};
1653
+
1654
+ namespace container {
1655
+
1656
+ /// @endcond
1657
+
1658
+ }} //namespace boost{ namespace container {
1659
+
1660
+ // Specialization of insert_iterator so that insertions will be constant
1661
+ // time rather than linear time.
1662
+
1663
+ ///@cond
1664
+
1665
+ //Ummm, I don't like to define things in namespace std, but
1666
+ //there is no other way
1667
+ namespace std {
1668
+
1669
+ template <class T, class Allocator>
1670
+ class insert_iterator<boost::container::slist<T, Allocator> >
1671
+ {
1672
+ protected:
1673
+ typedef boost::container::slist<T, Allocator> Container;
1674
+ Container* container;
1675
+ typename Container::iterator iter;
1676
+ public:
1677
+ typedef Container container_type;
1678
+ typedef output_iterator_tag iterator_category;
1679
+ typedef void value_type;
1680
+ typedef void difference_type;
1681
+ typedef void pointer;
1682
+ typedef void reference;
1683
+
1684
+ insert_iterator(Container& x,
1685
+ typename Container::iterator i,
1686
+ bool is_previous = false)
1687
+ : container(&x), iter(is_previous ? i : x.previous(i)){ }
1688
+
1689
+ insert_iterator<Container>&
1690
+ operator=(const typename Container::value_type& value)
1691
+ {
1692
+ iter = container->insert_after(iter, value);
1693
+ return *this;
1694
+ }
1695
+ insert_iterator<Container>& operator*(){ return *this; }
1696
+ insert_iterator<Container>& operator++(){ return *this; }
1697
+ insert_iterator<Container>& operator++(int){ return *this; }
1698
+ };
1699
+
1700
+ } //namespace std;
1701
+
1702
+ ///@endcond
1703
+
1704
+ #include <boost/container/detail/config_end.hpp>
1705
+
1706
+ #endif // BOOST_CONTAINER_SLIST_HPP