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,1869 @@
1
+ //////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // (C) Copyright Ion Gaztanaga 2008-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
+ // Stable vector.
11
+ //
12
+ // Copyright 2008 Joaquin M Lopez Munoz.
13
+ // Distributed under the Boost Software License, Version 1.0.
14
+ // (See accompanying file LICENSE_1_0.txt or copy at
15
+ // http://www.boost.org/LICENSE_1_0.txt)
16
+ //
17
+ //////////////////////////////////////////////////////////////////////////////
18
+
19
+ #ifndef BOOST_CONTAINER_STABLE_VECTOR_HPP
20
+ #define BOOST_CONTAINER_STABLE_VECTOR_HPP
21
+
22
+ #if (defined _MSC_VER) && (_MSC_VER >= 1200)
23
+ # pragma once
24
+ #endif
25
+
26
+ #include <boost/container/detail/config_begin.hpp>
27
+ #include <boost/container/detail/workaround.hpp>
28
+ #include <boost/container/container_fwd.hpp>
29
+ #include <boost/mpl/bool.hpp>
30
+ #include <boost/mpl/not.hpp>
31
+ #include <boost/assert.hpp>
32
+ #include <boost/container/throw_exception.hpp>
33
+ #include <boost/container/detail/allocator_version_traits.hpp>
34
+ #include <boost/container/detail/utilities.hpp>
35
+ #include <boost/container/detail/iterators.hpp>
36
+ #include <boost/container/detail/algorithms.hpp>
37
+ #include <boost/container/allocator_traits.hpp>
38
+ #include <boost/container/throw_exception.hpp>
39
+ #include <boost/intrusive/pointer_traits.hpp>
40
+ #include <boost/detail/no_exceptions_support.hpp>
41
+ #include <boost/aligned_storage.hpp>
42
+ #include <boost/move/utility.hpp>
43
+ #include <boost/move/iterator.hpp>
44
+ #include <boost/move/detail/move_helpers.hpp>
45
+ #include <algorithm> //max
46
+
47
+ #include <memory>
48
+ #include <new> //placement new
49
+
50
+ ///@cond
51
+
52
+ #include <boost/container/vector.hpp>
53
+
54
+ //#define STABLE_VECTOR_ENABLE_INVARIANT_CHECKING
55
+
56
+ ///@endcond
57
+
58
+ namespace boost {
59
+ namespace container {
60
+
61
+ ///@cond
62
+
63
+ namespace stable_vector_detail{
64
+
65
+ template <class C>
66
+ class clear_on_destroy
67
+ {
68
+ public:
69
+ clear_on_destroy(C &c)
70
+ : c_(c), do_clear_(true)
71
+ {}
72
+
73
+ void release()
74
+ { do_clear_ = false; }
75
+
76
+ ~clear_on_destroy()
77
+ {
78
+ if(do_clear_){
79
+ c_.clear();
80
+ c_.priv_clear_pool();
81
+ }
82
+ }
83
+
84
+ private:
85
+ clear_on_destroy(const clear_on_destroy &);
86
+ clear_on_destroy &operator=(const clear_on_destroy &);
87
+ C &c_;
88
+ bool do_clear_;
89
+ };
90
+
91
+ template<typename VoidPointer, typename T>
92
+ struct node;
93
+
94
+ template<class VoidPtr>
95
+ struct node_base
96
+ {
97
+ private:
98
+ typedef typename boost::intrusive::
99
+ pointer_traits<VoidPtr> void_ptr_traits;
100
+ typedef typename void_ptr_traits::
101
+ template rebind_pointer
102
+ <node_base>::type node_base_ptr;
103
+ typedef typename void_ptr_traits::
104
+ template rebind_pointer
105
+ <node_base_ptr>::type node_base_ptr_ptr;
106
+
107
+ public:
108
+ node_base(const node_base_ptr_ptr &n)
109
+ : up(n)
110
+ {}
111
+
112
+ node_base()
113
+ : up()
114
+ {}
115
+
116
+ node_base_ptr_ptr up;
117
+ };
118
+
119
+ template<typename VoidPointer, typename T>
120
+ struct node
121
+ : public node_base<VoidPointer>
122
+ {
123
+ private:
124
+ node();
125
+
126
+ public:
127
+ T value;
128
+ };
129
+
130
+ template<typename T, typename Reference, typename Pointer>
131
+ class iterator
132
+ : public std::iterator< std::random_access_iterator_tag
133
+ , T
134
+ , typename boost::intrusive::
135
+ pointer_traits<Pointer>::difference_type
136
+ , Pointer
137
+ , Reference>
138
+ {
139
+ typedef boost::intrusive::
140
+ pointer_traits<Pointer> ptr_traits;
141
+ typedef typename ptr_traits::template
142
+ rebind_pointer<void>::type void_ptr;
143
+ typedef node<void_ptr, T> node_type;
144
+ typedef node_base<void_ptr> node_base_type;
145
+ typedef typename ptr_traits::template
146
+ rebind_pointer<node_type>::type node_ptr;
147
+ typedef boost::intrusive::
148
+ pointer_traits<node_ptr> node_ptr_traits;
149
+ typedef typename ptr_traits::template
150
+ rebind_pointer<node_base_type>::type node_base_ptr;
151
+ typedef typename ptr_traits::template
152
+ rebind_pointer<node_base_ptr>::type node_base_ptr_ptr;
153
+ typedef typename ptr_traits::template
154
+ rebind_pointer<T>::type friend_iterator_pointer;
155
+
156
+ friend class iterator<T, const T, friend_iterator_pointer>;
157
+
158
+ public:
159
+ typedef std::random_access_iterator_tag iterator_category;
160
+ typedef T value_type;
161
+ typedef typename ptr_traits::difference_type difference_type;
162
+ typedef Pointer pointer;
163
+ typedef Reference reference;
164
+
165
+ iterator()
166
+ {}
167
+
168
+ explicit iterator(node_ptr p)
169
+ : pn(p)
170
+ {}
171
+
172
+ iterator(const iterator<T, T&, friend_iterator_pointer>& x)
173
+ : pn(x.pn)
174
+ {}
175
+
176
+ node_ptr &node_pointer()
177
+ { return pn; }
178
+
179
+ const node_ptr &node_pointer() const
180
+ { return pn; }
181
+
182
+ public:
183
+ //Pointer like operators
184
+ reference operator*() const
185
+ { return pn->value; }
186
+
187
+ pointer operator->() const
188
+ { return ptr_traits::pointer_to(this->operator*()); }
189
+
190
+ //Increment / Decrement
191
+ iterator& operator++()
192
+ {
193
+ if(node_base_ptr_ptr p = this->pn->up){
194
+ ++p;
195
+ this->pn = node_ptr_traits::static_cast_from(*p);
196
+ }
197
+ return *this;
198
+ }
199
+
200
+ iterator operator++(int)
201
+ { iterator tmp(*this); ++*this; return iterator(tmp); }
202
+
203
+ iterator& operator--()
204
+ {
205
+ if(node_base_ptr_ptr p = this->pn->up){
206
+ --p;
207
+ this->pn = node_ptr_traits::static_cast_from(*p);
208
+ }
209
+ return *this;
210
+ }
211
+
212
+ iterator operator--(int)
213
+ { iterator tmp(*this); --*this; return iterator(tmp); }
214
+
215
+ reference operator[](difference_type off) const
216
+ {
217
+ iterator tmp(*this);
218
+ tmp += off;
219
+ return *tmp;
220
+ }
221
+
222
+ iterator& operator+=(difference_type off)
223
+ {
224
+ if(node_base_ptr_ptr p = this->pn->up){
225
+ p += off;
226
+ this->pn = node_ptr_traits::static_cast_from(*p);
227
+ }
228
+ return *this;
229
+ }
230
+
231
+ friend iterator operator+(const iterator &left, difference_type off)
232
+ {
233
+ iterator tmp(left);
234
+ tmp += off;
235
+ return tmp;
236
+ }
237
+
238
+ friend iterator operator+(difference_type off, const iterator& right)
239
+ {
240
+ iterator tmp(right);
241
+ tmp += off;
242
+ return tmp;
243
+ }
244
+
245
+ iterator& operator-=(difference_type off)
246
+ { *this += -off; return *this; }
247
+
248
+ friend iterator operator-(const iterator &left, difference_type off)
249
+ {
250
+ iterator tmp(left);
251
+ tmp -= off;
252
+ return tmp;
253
+ }
254
+
255
+ friend difference_type operator-(const iterator& left, const iterator& right)
256
+ {
257
+ return left.pn->up - right.pn->up;
258
+ }
259
+
260
+ //Comparison operators
261
+ friend bool operator== (const iterator& l, const iterator& r)
262
+ { return l.pn == r.pn; }
263
+
264
+ friend bool operator!= (const iterator& l, const iterator& r)
265
+ { return l.pn != r.pn; }
266
+
267
+ friend bool operator< (const iterator& l, const iterator& r)
268
+ { return l.pn->up < r.pn->up; }
269
+
270
+ friend bool operator<= (const iterator& l, const iterator& r)
271
+ { return l.pn->up <= r.pn->up; }
272
+
273
+ friend bool operator> (const iterator& l, const iterator& r)
274
+ { return l.pn->up > r.pn->up; }
275
+
276
+ friend bool operator>= (const iterator& l, const iterator& r)
277
+ { return l.pn->up >= r.pn->up; }
278
+
279
+ node_ptr pn;
280
+ };
281
+
282
+ template<class VoidPtr, class VoidAllocator>
283
+ struct index_traits
284
+ {
285
+ typedef boost::intrusive::
286
+ pointer_traits
287
+ <VoidPtr> void_ptr_traits;
288
+ typedef stable_vector_detail::
289
+ node_base<VoidPtr> node_base_type;
290
+ typedef typename void_ptr_traits::template
291
+ rebind_pointer<node_base_type>::type node_base_ptr;
292
+ typedef typename void_ptr_traits::template
293
+ rebind_pointer<node_base_ptr>::type node_base_ptr_ptr;
294
+ typedef boost::intrusive::
295
+ pointer_traits<node_base_ptr> node_base_ptr_traits;
296
+ typedef boost::intrusive::
297
+ pointer_traits<node_base_ptr_ptr> node_base_ptr_ptr_traits;
298
+ typedef typename allocator_traits<VoidAllocator>::
299
+ template portable_rebind_alloc
300
+ <node_base_ptr>::type node_base_ptr_allocator;
301
+ typedef ::boost::container::vector
302
+ <node_base_ptr, node_base_ptr_allocator> index_type;
303
+ typedef typename index_type::iterator index_iterator;
304
+ typedef typename index_type::const_iterator const_index_iterator;
305
+ typedef typename index_type::size_type size_type;
306
+
307
+ static const size_type ExtraPointers = 3;
308
+ //Stable vector stores metadata at the end of the index (node_base_ptr vector) with additional 3 pointers:
309
+ // back() is this->index.back() - ExtraPointers;
310
+ // end node index is *(this->index.end() - 3)
311
+ // Node cache first is *(this->index.end() - 2);
312
+ // Node cache last is this->index.back();
313
+
314
+ static node_base_ptr_ptr ptr_to_node_base_ptr(node_base_ptr &n)
315
+ { return node_base_ptr_ptr_traits::pointer_to(n); }
316
+
317
+ static void fix_up_pointers(index_iterator first, index_iterator last)
318
+ {
319
+ while(first != last){
320
+ typedef typename index_type::reference node_base_ptr_ref;
321
+ node_base_ptr_ref nbp = *first;
322
+ nbp->up = index_traits::ptr_to_node_base_ptr(nbp);
323
+ ++first;
324
+ }
325
+ }
326
+
327
+ static index_iterator get_fix_up_end(index_type &index)
328
+ { return index.end() - (ExtraPointers - 1); }
329
+
330
+ static void fix_up_pointers_from(index_type & index, index_iterator first)
331
+ { index_traits::fix_up_pointers(first, index_traits::get_fix_up_end(index)); }
332
+
333
+ static void readjust_end_node(index_type &index, node_base_type &end_node)
334
+ {
335
+ if(!index.empty()){
336
+ index_iterator end_node_it(index_traits::get_fix_up_end(index));
337
+ node_base_ptr &end_node_idx_ref = *(--end_node_it);
338
+ end_node_idx_ref = node_base_ptr_traits::pointer_to(end_node);
339
+ end_node.up = node_base_ptr_ptr_traits::pointer_to(end_node_idx_ref);
340
+ }
341
+ else{
342
+ end_node.up = node_base_ptr_ptr();
343
+ }
344
+ }
345
+
346
+ static void initialize_end_node(index_type &index, node_base_type &end_node, const size_type index_capacity_if_empty)
347
+ {
348
+ if(index.empty()){
349
+ index.reserve(index_capacity_if_empty + ExtraPointers);
350
+ index.resize(ExtraPointers);
351
+ node_base_ptr &end_node_ref = *index.data();
352
+ end_node_ref = node_base_ptr_traits::pointer_to(end_node);
353
+ end_node.up = index_traits::ptr_to_node_base_ptr(end_node_ref);
354
+ }
355
+ }
356
+
357
+
358
+ #ifdef STABLE_VECTOR_ENABLE_INVARIANT_CHECKING
359
+ static bool invariants(index_type &index)
360
+ {
361
+ for( index_iterator it = index.begin()
362
+ , it_end = index_traits::get_fix_up_end(index)
363
+ ; it != it_end
364
+ ; ++it){
365
+ if((*it)->up != index_traits::ptr_to_node_base_ptr(*it)){
366
+ return false;
367
+ }
368
+ }
369
+ return true;
370
+ }
371
+ #endif //STABLE_VECTOR_ENABLE_INVARIANT_CHECKING
372
+ };
373
+
374
+ } //namespace stable_vector_detail
375
+
376
+ #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
377
+
378
+ #if defined(STABLE_VECTOR_ENABLE_INVARIANT_CHECKING)
379
+
380
+ #define STABLE_VECTOR_CHECK_INVARIANT \
381
+ invariant_checker BOOST_JOIN(check_invariant_,__LINE__)(*this); \
382
+ BOOST_JOIN(check_invariant_,__LINE__).touch();
383
+
384
+ #else //STABLE_VECTOR_ENABLE_INVARIANT_CHECKING
385
+
386
+ #define STABLE_VECTOR_CHECK_INVARIANT
387
+
388
+ #endif //#if defined(STABLE_VECTOR_ENABLE_INVARIANT_CHECKING)
389
+
390
+ #endif //#if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
391
+
392
+ /// @endcond
393
+
394
+ //! Originally developed by Joaquin M. Lopez Munoz, stable_vector is a std::vector
395
+ //! drop-in replacement implemented as a node container, offering iterator and reference
396
+ //! stability.
397
+ //!
398
+ //! Here are the details taken from the author's blog
399
+ //! (<a href="http://bannalia.blogspot.com/2008/09/introducing-stablevector.html" >
400
+ //! Introducing stable_vector</a>):
401
+ //!
402
+ //! We present stable_vector, a fully STL-compliant stable container that provides
403
+ //! most of the features of std::vector except element contiguity.
404
+ //!
405
+ //! General properties: stable_vector satisfies all the requirements of a container,
406
+ //! a reversible container and a sequence and provides all the optional operations
407
+ //! present in std::vector. Like std::vector, iterators are random access.
408
+ //! stable_vector does not provide element contiguity; in exchange for this absence,
409
+ //! the container is stable, i.e. references and iterators to an element of a stable_vector
410
+ //! remain valid as long as the element is not erased, and an iterator that has been
411
+ //! assigned the return value of end() always remain valid until the destruction of
412
+ //! the associated stable_vector.
413
+ //!
414
+ //! Operation complexity: The big-O complexities of stable_vector operations match
415
+ //! exactly those of std::vector. In general, insertion/deletion is constant time at
416
+ //! the end of the sequence and linear elsewhere. Unlike std::vector, stable_vector
417
+ //! does not internally perform any value_type destruction, copy or assignment
418
+ //! operations other than those exactly corresponding to the insertion of new
419
+ //! elements or deletion of stored elements, which can sometimes compensate in terms
420
+ //! of performance for the extra burden of doing more pointer manipulation and an
421
+ //! additional allocation per element.
422
+ //!
423
+ //! Exception safety: As stable_vector does not internally copy elements around, some
424
+ //! operations provide stronger exception safety guarantees than in std::vector.
425
+ #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
426
+ template <class T, class Allocator = std::allocator<T> >
427
+ #else
428
+ template <class T, class Allocator>
429
+ #endif
430
+ class stable_vector
431
+ {
432
+ ///@cond
433
+ typedef allocator_traits<Allocator> allocator_traits_type;
434
+ typedef typename boost::intrusive::pointer_traits
435
+ <typename allocator_traits_type::pointer>::
436
+ template rebind_pointer<void>::type void_ptr;
437
+ typedef typename allocator_traits_type::
438
+ template portable_rebind_alloc
439
+ <void>::type void_allocator_type;
440
+ typedef stable_vector_detail::index_traits
441
+ <void_ptr, void_allocator_type> index_traits_type;
442
+ typedef typename index_traits_type::node_base_type node_base_type;
443
+ typedef typename index_traits_type::node_base_ptr node_base_ptr;
444
+ typedef typename index_traits_type::
445
+ node_base_ptr_ptr node_base_ptr_ptr;
446
+ typedef typename index_traits_type::
447
+ node_base_ptr_traits node_base_ptr_traits;
448
+ typedef typename index_traits_type::
449
+ node_base_ptr_ptr_traits node_base_ptr_ptr_traits;
450
+ typedef typename index_traits_type::index_type index_type;
451
+ typedef typename index_traits_type::index_iterator index_iterator;
452
+ typedef typename index_traits_type::
453
+ const_index_iterator const_index_iterator;
454
+ typedef boost::intrusive::
455
+ pointer_traits
456
+ <typename allocator_traits_type::pointer> ptr_traits;
457
+ typedef stable_vector_detail::node<void_ptr, T> node_type;
458
+ typedef typename ptr_traits::template
459
+ rebind_pointer<node_type>::type node_ptr;
460
+ typedef boost::intrusive::
461
+ pointer_traits<node_ptr> node_ptr_traits;
462
+ typedef typename ptr_traits::template
463
+ rebind_pointer<const node_type>::type const_node_ptr;
464
+ typedef boost::intrusive::
465
+ pointer_traits<const_node_ptr> const_node_ptr_traits;
466
+ typedef typename node_ptr_traits::reference node_reference;
467
+ typedef typename const_node_ptr_traits::reference const_node_reference;
468
+
469
+ typedef ::boost::container::container_detail::
470
+ integral_constant<unsigned, 1> allocator_v1;
471
+ typedef ::boost::container::container_detail::
472
+ integral_constant<unsigned, 2> allocator_v2;
473
+ typedef ::boost::container::container_detail::integral_constant
474
+ <unsigned, boost::container::container_detail::
475
+ version<Allocator>::value> alloc_version;
476
+ typedef typename allocator_traits_type::
477
+ template portable_rebind_alloc
478
+ <node_type>::type node_allocator_type;
479
+
480
+ typedef ::boost::container::container_detail::
481
+ allocator_version_traits<node_allocator_type> allocator_version_traits_t;
482
+ typedef typename allocator_version_traits_t::multiallocation_chain multiallocation_chain;
483
+
484
+ node_ptr allocate_one()
485
+ { return allocator_version_traits_t::allocate_one(this->priv_node_alloc()); }
486
+
487
+ void deallocate_one(const node_ptr &p)
488
+ { allocator_version_traits_t::deallocate_one(this->priv_node_alloc(), p); }
489
+
490
+ void allocate_individual(typename allocator_traits_type::size_type n, multiallocation_chain &m)
491
+ { allocator_version_traits_t::allocate_individual(this->priv_node_alloc(), n, m); }
492
+
493
+ void deallocate_individual(multiallocation_chain &holder)
494
+ { allocator_version_traits_t::deallocate_individual(this->priv_node_alloc(), holder); }
495
+
496
+ friend class stable_vector_detail::clear_on_destroy<stable_vector>;
497
+ typedef stable_vector_detail::iterator
498
+ < T
499
+ , typename allocator_traits<Allocator>::reference
500
+ , typename allocator_traits<Allocator>::pointer> iterator_impl;
501
+ typedef stable_vector_detail::iterator
502
+ < T
503
+ , typename allocator_traits<Allocator>::const_reference
504
+ , typename allocator_traits<Allocator>::const_pointer> const_iterator_impl;
505
+ ///@endcond
506
+ public:
507
+
508
+ //////////////////////////////////////////////
509
+ //
510
+ // types
511
+ //
512
+ //////////////////////////////////////////////
513
+ typedef T value_type;
514
+ typedef typename ::boost::container::allocator_traits<Allocator>::pointer pointer;
515
+ typedef typename ::boost::container::allocator_traits<Allocator>::const_pointer const_pointer;
516
+ typedef typename ::boost::container::allocator_traits<Allocator>::reference reference;
517
+ typedef typename ::boost::container::allocator_traits<Allocator>::const_reference const_reference;
518
+ typedef typename ::boost::container::allocator_traits<Allocator>::size_type size_type;
519
+ typedef typename ::boost::container::allocator_traits<Allocator>::difference_type difference_type;
520
+ typedef Allocator allocator_type;
521
+ typedef node_allocator_type stored_allocator_type;
522
+ typedef BOOST_CONTAINER_IMPDEF(iterator_impl) iterator;
523
+ typedef BOOST_CONTAINER_IMPDEF(const_iterator_impl) const_iterator;
524
+ typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<iterator>) reverse_iterator;
525
+ typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<const_iterator>) const_reverse_iterator;
526
+
527
+ ///@cond
528
+ private:
529
+ BOOST_COPYABLE_AND_MOVABLE(stable_vector)
530
+ static const size_type ExtraPointers = index_traits_type::ExtraPointers;
531
+
532
+ class insert_rollback;
533
+ friend class insert_rollback;
534
+
535
+ class push_back_rollback;
536
+ friend class push_back_rollback;
537
+ ///@endcond
538
+
539
+ public:
540
+ //////////////////////////////////////////////
541
+ //
542
+ // construct/copy/destroy
543
+ //
544
+ //////////////////////////////////////////////
545
+
546
+ //! <b>Effects</b>: Default constructs a stable_vector.
547
+ //!
548
+ //! <b>Throws</b>: If allocator_type's default constructor throws.
549
+ //!
550
+ //! <b>Complexity</b>: Constant.
551
+ stable_vector()
552
+ : internal_data(), index()
553
+ {
554
+ STABLE_VECTOR_CHECK_INVARIANT;
555
+ }
556
+
557
+ //! <b>Effects</b>: Constructs a stable_vector taking the allocator as parameter.
558
+ //!
559
+ //! <b>Throws</b>: Nothing
560
+ //!
561
+ //! <b>Complexity</b>: Constant.
562
+ explicit stable_vector(const allocator_type& al) BOOST_CONTAINER_NOEXCEPT
563
+ : internal_data(al), index(al)
564
+ {
565
+ STABLE_VECTOR_CHECK_INVARIANT;
566
+ }
567
+
568
+ //! <b>Effects</b>: Constructs a stable_vector that will use a copy of allocator a
569
+ //! and inserts n default contructed values.
570
+ //!
571
+ //! <b>Throws</b>: If allocator_type's default constructor or copy constructor
572
+ //! throws or T's default or copy constructor throws.
573
+ //!
574
+ //! <b>Complexity</b>: Linear to n.
575
+ explicit stable_vector(size_type n)
576
+ : internal_data(), index()
577
+ {
578
+ stable_vector_detail::clear_on_destroy<stable_vector> cod(*this);
579
+ this->resize(n);
580
+ STABLE_VECTOR_CHECK_INVARIANT;
581
+ cod.release();
582
+ }
583
+
584
+ //! <b>Effects</b>: Constructs a stable_vector that will use a copy of allocator a
585
+ //! and inserts n copies of value.
586
+ //!
587
+ //! <b>Throws</b>: If allocator_type's default constructor or copy constructor
588
+ //! throws or T's default or copy constructor throws.
589
+ //!
590
+ //! <b>Complexity</b>: Linear to n.
591
+ stable_vector(size_type n, const T& t, const allocator_type& al = allocator_type())
592
+ : internal_data(al), index(al)
593
+ {
594
+ stable_vector_detail::clear_on_destroy<stable_vector> cod(*this);
595
+ this->insert(this->cend(), n, t);
596
+ STABLE_VECTOR_CHECK_INVARIANT;
597
+ cod.release();
598
+ }
599
+
600
+ //! <b>Effects</b>: Constructs a stable_vector that will use a copy of allocator a
601
+ //! and inserts a copy of the range [first, last) in the stable_vector.
602
+ //!
603
+ //! <b>Throws</b>: If allocator_type's default constructor or copy constructor
604
+ //! throws or T's constructor taking an dereferenced InIt throws.
605
+ //!
606
+ //! <b>Complexity</b>: Linear to the range [first, last).
607
+ template <class InputIterator>
608
+ stable_vector(InputIterator first,InputIterator last, const allocator_type& al = allocator_type())
609
+ : internal_data(al), index(al)
610
+ {
611
+ stable_vector_detail::clear_on_destroy<stable_vector> cod(*this);
612
+ this->insert(this->cend(), first, last);
613
+ STABLE_VECTOR_CHECK_INVARIANT;
614
+ cod.release();
615
+ }
616
+
617
+ //! <b>Effects</b>: Copy constructs a stable_vector.
618
+ //!
619
+ //! <b>Postcondition</b>: x == *this.
620
+ //!
621
+ //! <b>Complexity</b>: Linear to the elements x contains.
622
+ stable_vector(const stable_vector& x)
623
+ : internal_data(allocator_traits<node_allocator_type>::
624
+ select_on_container_copy_construction(x.priv_node_alloc()))
625
+ , index(allocator_traits<allocator_type>::
626
+ select_on_container_copy_construction(x.index.get_stored_allocator()))
627
+ {
628
+ stable_vector_detail::clear_on_destroy<stable_vector> cod(*this);
629
+ this->insert(this->cend(), x.begin(), x.end());
630
+ STABLE_VECTOR_CHECK_INVARIANT;
631
+ cod.release();
632
+ }
633
+
634
+ //! <b>Effects</b>: Move constructor. Moves mx's resources to *this.
635
+ //!
636
+ //! <b>Throws</b>: If allocator_type's copy constructor throws.
637
+ //!
638
+ //! <b>Complexity</b>: Constant.
639
+ stable_vector(BOOST_RV_REF(stable_vector) x)
640
+ : internal_data(boost::move(x.priv_node_alloc())), index(boost::move(x.index))
641
+ {
642
+ this->priv_swap_members(x);
643
+ }
644
+
645
+ //! <b>Effects</b>: Copy constructs a stable_vector using the specified allocator.
646
+ //!
647
+ //! <b>Postcondition</b>: x == *this.
648
+ //!
649
+ //! <b>Complexity</b>: Linear to the elements x contains.
650
+ stable_vector(const stable_vector& x, const allocator_type &a)
651
+ : internal_data(a), index(a)
652
+ {
653
+ stable_vector_detail::clear_on_destroy<stable_vector> cod(*this);
654
+ this->insert(this->cend(), x.begin(), x.end());
655
+ STABLE_VECTOR_CHECK_INVARIANT;
656
+ cod.release();
657
+ }
658
+
659
+ //! <b>Effects</b>: Move constructor using the specified allocator.
660
+ //! Moves mx's resources to *this.
661
+ //!
662
+ //! <b>Throws</b>: If allocator_type's copy constructor throws.
663
+ //!
664
+ //! <b>Complexity</b>: Constant if a == x.get_allocator(), linear otherwise
665
+ stable_vector(BOOST_RV_REF(stable_vector) x, const allocator_type &a)
666
+ : internal_data(a), index(a)
667
+ {
668
+ if(this->priv_node_alloc() == x.priv_node_alloc()){
669
+ this->priv_swap_members(x);
670
+ }
671
+ else{
672
+ stable_vector_detail::clear_on_destroy<stable_vector> cod(*this);
673
+ this->insert(this->cend(), x.begin(), x.end());
674
+ STABLE_VECTOR_CHECK_INVARIANT;
675
+ cod.release();
676
+ }
677
+ }
678
+
679
+ //! <b>Effects</b>: Destroys the stable_vector. All stored values are destroyed
680
+ //! and used memory is deallocated.
681
+ //!
682
+ //! <b>Throws</b>: Nothing.
683
+ //!
684
+ //! <b>Complexity</b>: Linear to the number of elements.
685
+ ~stable_vector()
686
+ {
687
+ this->clear();
688
+ this->priv_clear_pool();
689
+ }
690
+
691
+ //! <b>Effects</b>: Makes *this contain the same elements as x.
692
+ //!
693
+ //! <b>Postcondition</b>: this->size() == x.size(). *this contains a copy
694
+ //! of each of x's elements.
695
+ //!
696
+ //! <b>Throws</b>: If memory allocation throws or T's copy constructor throws.
697
+ //!
698
+ //! <b>Complexity</b>: Linear to the number of elements in x.
699
+ stable_vector& operator=(BOOST_COPY_ASSIGN_REF(stable_vector) x)
700
+ {
701
+ STABLE_VECTOR_CHECK_INVARIANT;
702
+ if (&x != this){
703
+ node_allocator_type &this_alloc = this->priv_node_alloc();
704
+ const node_allocator_type &x_alloc = x.priv_node_alloc();
705
+ container_detail::bool_<allocator_traits_type::
706
+ propagate_on_container_copy_assignment::value> flag;
707
+ if(flag && this_alloc != x_alloc){
708
+ this->clear();
709
+ this->shrink_to_fit();
710
+ }
711
+ container_detail::assign_alloc(this->priv_node_alloc(), x.priv_node_alloc(), flag);
712
+ container_detail::assign_alloc(this->index.get_stored_allocator(), x.index.get_stored_allocator(), flag);
713
+ this->assign(x.begin(), x.end());
714
+ }
715
+ return *this;
716
+ }
717
+
718
+ //! <b>Effects</b>: Move assignment. All mx's values are transferred to *this.
719
+ //!
720
+ //! <b>Postcondition</b>: x.empty(). *this contains a the elements x had
721
+ //! before the function.
722
+ //!
723
+ //! <b>Throws</b>: If allocator_type's copy constructor throws.
724
+ //!
725
+ //! <b>Complexity</b>: Linear.
726
+ stable_vector& operator=(BOOST_RV_REF(stable_vector) x)
727
+ {
728
+ if (&x != this){
729
+ node_allocator_type &this_alloc = this->priv_node_alloc();
730
+ node_allocator_type &x_alloc = x.priv_node_alloc();
731
+ //If allocators are equal we can just swap pointers
732
+ if(this_alloc == x_alloc){
733
+ //Destroy objects but retain memory
734
+ this->clear();
735
+ this->index = boost::move(x.index);
736
+ this->priv_swap_members(x);
737
+ //Move allocator if needed
738
+ container_detail::bool_<allocator_traits_type::
739
+ propagate_on_container_move_assignment::value> flag;
740
+ container_detail::move_alloc(this->priv_node_alloc(), x.priv_node_alloc(), flag);
741
+ }
742
+ //If unequal allocators, then do a one by one move
743
+ else{
744
+ this->assign( boost::make_move_iterator(x.begin())
745
+ , boost::make_move_iterator(x.end()));
746
+ }
747
+ }
748
+ return *this;
749
+ }
750
+
751
+
752
+ //! <b>Effects</b>: Assigns the n copies of val to *this.
753
+ //!
754
+ //! <b>Throws</b>: If memory allocation throws or T's copy constructor throws.
755
+ //!
756
+ //! <b>Complexity</b>: Linear to n.
757
+ void assign(size_type n, const T& t)
758
+ {
759
+ typedef constant_iterator<value_type, difference_type> cvalue_iterator;
760
+ this->assign(cvalue_iterator(t, n), cvalue_iterator());
761
+ }
762
+
763
+ //! <b>Effects</b>: Assigns the the range [first, last) to *this.
764
+ //!
765
+ //! <b>Throws</b>: If memory allocation throws or
766
+ //! T's constructor from dereferencing InpIt throws.
767
+ //!
768
+ //! <b>Complexity</b>: Linear to n.
769
+ template<typename InputIterator>
770
+ void assign(InputIterator first,InputIterator last
771
+ #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
772
+ , typename container_detail::enable_if_c
773
+ < !container_detail::is_convertible<InputIterator, size_type>::value
774
+ >::type * = 0
775
+ #endif
776
+ )
777
+ {
778
+ STABLE_VECTOR_CHECK_INVARIANT;
779
+ iterator first1 = this->begin();
780
+ iterator last1 = this->end();
781
+ for ( ; first1 != last1 && first != last; ++first1, ++first)
782
+ *first1 = *first;
783
+ if (first == last){
784
+ this->erase(first1, last1);
785
+ }
786
+ else{
787
+ this->insert(last1, first, last);
788
+ }
789
+ }
790
+
791
+ //! <b>Effects</b>: Returns a copy of the internal allocator.
792
+ //!
793
+ //! <b>Throws</b>: If allocator's copy constructor throws.
794
+ //!
795
+ //! <b>Complexity</b>: Constant.
796
+ allocator_type get_allocator() const
797
+ { return this->priv_node_alloc(); }
798
+
799
+ //! <b>Effects</b>: Returns a reference to the internal allocator.
800
+ //!
801
+ //! <b>Throws</b>: Nothing
802
+ //!
803
+ //! <b>Complexity</b>: Constant.
804
+ //!
805
+ //! <b>Note</b>: Non-standard extension.
806
+ const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT
807
+ { return this->priv_node_alloc(); }
808
+
809
+ //! <b>Effects</b>: Returns a reference to the internal allocator.
810
+ //!
811
+ //! <b>Throws</b>: Nothing
812
+ //!
813
+ //! <b>Complexity</b>: Constant.
814
+ //!
815
+ //! <b>Note</b>: Non-standard extension.
816
+ stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT
817
+ { return this->priv_node_alloc(); }
818
+
819
+ //////////////////////////////////////////////
820
+ //
821
+ // iterators
822
+ //
823
+ //////////////////////////////////////////////
824
+
825
+ //! <b>Effects</b>: Returns an iterator to the first element contained in the stable_vector.
826
+ //!
827
+ //! <b>Throws</b>: Nothing.
828
+ //!
829
+ //! <b>Complexity</b>: Constant.
830
+ iterator begin() BOOST_CONTAINER_NOEXCEPT
831
+ { return (this->index.empty()) ? this->end(): iterator(node_ptr_traits::static_cast_from(this->index.front())); }
832
+
833
+ //! <b>Effects</b>: Returns a const_iterator to the first element contained in the stable_vector.
834
+ //!
835
+ //! <b>Throws</b>: Nothing.
836
+ //!
837
+ //! <b>Complexity</b>: Constant.
838
+ const_iterator begin() const BOOST_CONTAINER_NOEXCEPT
839
+ { return (this->index.empty()) ? this->cend() : const_iterator(node_ptr_traits::static_cast_from(this->index.front())) ; }
840
+
841
+ //! <b>Effects</b>: Returns an iterator to the end of the stable_vector.
842
+ //!
843
+ //! <b>Throws</b>: Nothing.
844
+ //!
845
+ //! <b>Complexity</b>: Constant.
846
+ iterator end() BOOST_CONTAINER_NOEXCEPT
847
+ { return iterator(this->priv_get_end_node()); }
848
+
849
+ //! <b>Effects</b>: Returns a const_iterator to the end of the stable_vector.
850
+ //!
851
+ //! <b>Throws</b>: Nothing.
852
+ //!
853
+ //! <b>Complexity</b>: Constant.
854
+ const_iterator end() const BOOST_CONTAINER_NOEXCEPT
855
+ { return const_iterator(this->priv_get_end_node()); }
856
+
857
+ //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning
858
+ //! of the reversed stable_vector.
859
+ //!
860
+ //! <b>Throws</b>: Nothing.
861
+ //!
862
+ //! <b>Complexity</b>: Constant.
863
+ reverse_iterator rbegin() BOOST_CONTAINER_NOEXCEPT
864
+ { return reverse_iterator(this->end()); }
865
+
866
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
867
+ //! of the reversed stable_vector.
868
+ //!
869
+ //! <b>Throws</b>: Nothing.
870
+ //!
871
+ //! <b>Complexity</b>: Constant.
872
+ const_reverse_iterator rbegin() const BOOST_CONTAINER_NOEXCEPT
873
+ { return const_reverse_iterator(this->end()); }
874
+
875
+ //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
876
+ //! of the reversed stable_vector.
877
+ //!
878
+ //! <b>Throws</b>: Nothing.
879
+ //!
880
+ //! <b>Complexity</b>: Constant.
881
+ reverse_iterator rend() BOOST_CONTAINER_NOEXCEPT
882
+ { return reverse_iterator(this->begin()); }
883
+
884
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
885
+ //! of the reversed stable_vector.
886
+ //!
887
+ //! <b>Throws</b>: Nothing.
888
+ //!
889
+ //! <b>Complexity</b>: Constant.
890
+ const_reverse_iterator rend() const BOOST_CONTAINER_NOEXCEPT
891
+ { return const_reverse_iterator(this->begin()); }
892
+
893
+ //! <b>Effects</b>: Returns a const_iterator to the first element contained in the stable_vector.
894
+ //!
895
+ //! <b>Throws</b>: Nothing.
896
+ //!
897
+ //! <b>Complexity</b>: Constant.
898
+ const_iterator cbegin() const BOOST_CONTAINER_NOEXCEPT
899
+ { return this->begin(); }
900
+
901
+ //! <b>Effects</b>: Returns a const_iterator to the end of the stable_vector.
902
+ //!
903
+ //! <b>Throws</b>: Nothing.
904
+ //!
905
+ //! <b>Complexity</b>: Constant.
906
+ const_iterator cend() const BOOST_CONTAINER_NOEXCEPT
907
+ { return this->end(); }
908
+
909
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
910
+ //! of the reversed stable_vector.
911
+ //!
912
+ //! <b>Throws</b>: Nothing.
913
+ //!
914
+ //! <b>Complexity</b>: Constant.
915
+ const_reverse_iterator crbegin() const BOOST_CONTAINER_NOEXCEPT
916
+ { return this->rbegin(); }
917
+
918
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
919
+ //! of the reversed stable_vector.
920
+ //!
921
+ //! <b>Throws</b>: Nothing.
922
+ //!
923
+ //! <b>Complexity</b>: Constant.
924
+ const_reverse_iterator crend()const BOOST_CONTAINER_NOEXCEPT
925
+ { return this->rend(); }
926
+
927
+ //////////////////////////////////////////////
928
+ //
929
+ // capacity
930
+ //
931
+ //////////////////////////////////////////////
932
+
933
+ //! <b>Effects</b>: Returns true if the stable_vector contains no elements.
934
+ //!
935
+ //! <b>Throws</b>: Nothing.
936
+ //!
937
+ //! <b>Complexity</b>: Constant.
938
+ bool empty() const BOOST_CONTAINER_NOEXCEPT
939
+ { return this->index.size() <= ExtraPointers; }
940
+
941
+ //! <b>Effects</b>: Returns the number of the elements contained in the stable_vector.
942
+ //!
943
+ //! <b>Throws</b>: Nothing.
944
+ //!
945
+ //! <b>Complexity</b>: Constant.
946
+ size_type size() const BOOST_CONTAINER_NOEXCEPT
947
+ {
948
+ const size_type index_size = this->index.size();
949
+ return (index_size - ExtraPointers) & (std::size_t(0u) -std::size_t(index_size != 0));
950
+ }
951
+
952
+ //! <b>Effects</b>: Returns the largest possible size of the stable_vector.
953
+ //!
954
+ //! <b>Throws</b>: Nothing.
955
+ //!
956
+ //! <b>Complexity</b>: Constant.
957
+ size_type max_size() const BOOST_CONTAINER_NOEXCEPT
958
+ { return this->index.max_size() - ExtraPointers; }
959
+
960
+ //! <b>Effects</b>: Inserts or erases elements at the end such that
961
+ //! the size becomes n. New elements are default constructed.
962
+ //!
963
+ //! <b>Throws</b>: If memory allocation throws, or T's copy constructor throws.
964
+ //!
965
+ //! <b>Complexity</b>: Linear to the difference between size() and new_size.
966
+ void resize(size_type n)
967
+ {
968
+ typedef default_construct_iterator<value_type, difference_type> default_iterator;
969
+ STABLE_VECTOR_CHECK_INVARIANT;
970
+ if(n > this->size())
971
+ this->insert(this->cend(), default_iterator(n - this->size()), default_iterator());
972
+ else if(n < this->size())
973
+ this->erase(this->cbegin() + n, this->cend());
974
+ }
975
+
976
+ //! <b>Effects</b>: Inserts or erases elements at the end such that
977
+ //! the size becomes n. New elements are copy constructed from x.
978
+ //!
979
+ //! <b>Throws</b>: If memory allocation throws, or T's copy constructor throws.
980
+ //!
981
+ //! <b>Complexity</b>: Linear to the difference between size() and new_size.
982
+ void resize(size_type n, const T& t)
983
+ {
984
+ STABLE_VECTOR_CHECK_INVARIANT;
985
+ if(n > this->size())
986
+ this->insert(this->cend(), n - this->size(), t);
987
+ else if(n < this->size())
988
+ this->erase(this->cbegin() + n, this->cend());
989
+ }
990
+
991
+ //! <b>Effects</b>: Number of elements for which memory has been allocated.
992
+ //! capacity() is always greater than or equal to size().
993
+ //!
994
+ //! <b>Throws</b>: Nothing.
995
+ //!
996
+ //! <b>Complexity</b>: Constant.
997
+ size_type capacity() const BOOST_CONTAINER_NOEXCEPT
998
+ {
999
+ const size_type index_size = this->index.size();
1000
+ BOOST_ASSERT(!index_size || index_size >= ExtraPointers);
1001
+ const size_type bucket_extra_capacity = this->index.capacity()- index_size;
1002
+ const size_type node_extra_capacity = this->internal_data.pool_size;
1003
+ const size_type extra_capacity = (bucket_extra_capacity < node_extra_capacity)
1004
+ ? bucket_extra_capacity : node_extra_capacity;
1005
+ const size_type index_offset =
1006
+ (ExtraPointers + extra_capacity) & (size_type(0u) - size_type(index_size != 0));
1007
+ return index_size - index_offset;
1008
+ }
1009
+
1010
+ //! <b>Effects</b>: If n is less than or equal to capacity(), this call has no
1011
+ //! effect. Otherwise, it is a request for allocation of additional memory.
1012
+ //! If the request is successful, then capacity() is greater than or equal to
1013
+ //! n; otherwise, capacity() is unchanged. In either case, size() is unchanged.
1014
+ //!
1015
+ //! <b>Throws</b>: If memory allocation allocation throws.
1016
+ void reserve(size_type n)
1017
+ {
1018
+ STABLE_VECTOR_CHECK_INVARIANT;
1019
+ if(n > this->max_size()){
1020
+ throw_length_error("stable_vector::reserve max_size() exceeded");
1021
+ }
1022
+
1023
+ size_type sz = this->size();
1024
+ size_type old_capacity = this->capacity();
1025
+ if(n > old_capacity){
1026
+ index_traits_type::initialize_end_node(this->index, this->internal_data.end_node, n);
1027
+ const void * old_ptr = &index[0];
1028
+ this->index.reserve(n + ExtraPointers);
1029
+ bool realloced = &index[0] != old_ptr;
1030
+ //Fix the pointers for the newly allocated buffer
1031
+ if(realloced){
1032
+ index_traits_type::fix_up_pointers_from(this->index, this->index.begin());
1033
+ }
1034
+ //Now fill pool if data is not enough
1035
+ if((n - sz) > this->internal_data.pool_size){
1036
+ this->priv_increase_pool((n - sz) - this->internal_data.pool_size);
1037
+ }
1038
+ }
1039
+ }
1040
+
1041
+ //! <b>Effects</b>: Tries to deallocate the excess of memory created
1042
+ //! with previous allocations. The size of the stable_vector is unchanged
1043
+ //!
1044
+ //! <b>Throws</b>: If memory allocation throws.
1045
+ //!
1046
+ //! <b>Complexity</b>: Linear to size().
1047
+ void shrink_to_fit()
1048
+ {
1049
+ if(this->capacity()){
1050
+ //First empty allocated node pool
1051
+ this->priv_clear_pool();
1052
+ //If empty completely destroy the index, let's recover default-constructed state
1053
+ if(this->empty()){
1054
+ this->index.clear();
1055
+ this->index.shrink_to_fit();
1056
+ this->internal_data.end_node.up = node_base_ptr_ptr();
1057
+ }
1058
+ //Otherwise, try to shrink-to-fit the index and readjust pointers if necessary
1059
+ else{
1060
+ const void* old_ptr = &index[0];
1061
+ this->index.shrink_to_fit();
1062
+ bool realloced = &index[0] != old_ptr;
1063
+ //Fix the pointers for the newly allocated buffer
1064
+ if(realloced){
1065
+ index_traits_type::fix_up_pointers_from(this->index, this->index.begin());
1066
+ }
1067
+ }
1068
+ }
1069
+ }
1070
+
1071
+ //////////////////////////////////////////////
1072
+ //
1073
+ // element access
1074
+ //
1075
+ //////////////////////////////////////////////
1076
+
1077
+ //! <b>Requires</b>: !empty()
1078
+ //!
1079
+ //! <b>Effects</b>: Returns a reference to the first
1080
+ //! element of the container.
1081
+ //!
1082
+ //! <b>Throws</b>: Nothing.
1083
+ //!
1084
+ //! <b>Complexity</b>: Constant.
1085
+ reference front() BOOST_CONTAINER_NOEXCEPT
1086
+ { return static_cast<node_reference>(*this->index.front()).value; }
1087
+
1088
+ //! <b>Requires</b>: !empty()
1089
+ //!
1090
+ //! <b>Effects</b>: Returns a const reference to the first
1091
+ //! element of the container.
1092
+ //!
1093
+ //! <b>Throws</b>: Nothing.
1094
+ //!
1095
+ //! <b>Complexity</b>: Constant.
1096
+ const_reference front() const BOOST_CONTAINER_NOEXCEPT
1097
+ { return static_cast<const_node_reference>(*this->index.front()).value; }
1098
+
1099
+ //! <b>Requires</b>: !empty()
1100
+ //!
1101
+ //! <b>Effects</b>: Returns a reference to the last
1102
+ //! element of the container.
1103
+ //!
1104
+ //! <b>Throws</b>: Nothing.
1105
+ //!
1106
+ //! <b>Complexity</b>: Constant.
1107
+ reference back() BOOST_CONTAINER_NOEXCEPT
1108
+ { return static_cast<node_reference>(*this->index[this->size()-1u]).value; }
1109
+
1110
+ //! <b>Requires</b>: !empty()
1111
+ //!
1112
+ //! <b>Effects</b>: Returns a const reference to the last
1113
+ //! element of the container.
1114
+ //!
1115
+ //! <b>Throws</b>: Nothing.
1116
+ //!
1117
+ //! <b>Complexity</b>: Constant.
1118
+ const_reference back() const BOOST_CONTAINER_NOEXCEPT
1119
+ { return static_cast<const_node_reference>(*this->index[this->size()-1u]).value; }
1120
+
1121
+ //! <b>Requires</b>: size() > n.
1122
+ //!
1123
+ //! <b>Effects</b>: Returns a reference to the nth element
1124
+ //! from the beginning of the container.
1125
+ //!
1126
+ //! <b>Throws</b>: Nothing.
1127
+ //!
1128
+ //! <b>Complexity</b>: Constant.
1129
+ reference operator[](size_type n) BOOST_CONTAINER_NOEXCEPT
1130
+ {
1131
+ BOOST_ASSERT(n < this->size());
1132
+ return static_cast<node_reference>(*this->index[n]).value;
1133
+ }
1134
+
1135
+ //! <b>Requires</b>: size() > n.
1136
+ //!
1137
+ //! <b>Effects</b>: Returns a const reference to the nth element
1138
+ //! from the beginning of the container.
1139
+ //!
1140
+ //! <b>Throws</b>: Nothing.
1141
+ //!
1142
+ //! <b>Complexity</b>: Constant.
1143
+ const_reference operator[](size_type n) const BOOST_CONTAINER_NOEXCEPT
1144
+ {
1145
+ BOOST_ASSERT(n < this->size());
1146
+ return static_cast<const_node_reference>(*this->index[n]).value;
1147
+ }
1148
+
1149
+ //! <b>Requires</b>: size() > n.
1150
+ //!
1151
+ //! <b>Effects</b>: Returns a reference to the nth element
1152
+ //! from the beginning of the container.
1153
+ //!
1154
+ //! <b>Throws</b>: std::range_error if n >= size()
1155
+ //!
1156
+ //! <b>Complexity</b>: Constant.
1157
+ reference at(size_type n)
1158
+ {
1159
+ if(n >= this->size()){
1160
+ throw_out_of_range("vector::at invalid subscript");
1161
+ }
1162
+ return operator[](n);
1163
+ }
1164
+
1165
+ //! <b>Requires</b>: size() > n.
1166
+ //!
1167
+ //! <b>Effects</b>: Returns a const reference to the nth element
1168
+ //! from the beginning of the container.
1169
+ //!
1170
+ //! <b>Throws</b>: std::range_error if n >= size()
1171
+ //!
1172
+ //! <b>Complexity</b>: Constant.
1173
+ const_reference at(size_type n)const
1174
+ {
1175
+ if(n >= this->size()){
1176
+ throw_out_of_range("vector::at invalid subscript");
1177
+ }
1178
+ return operator[](n);
1179
+ }
1180
+
1181
+ //////////////////////////////////////////////
1182
+ //
1183
+ // modifiers
1184
+ //
1185
+ //////////////////////////////////////////////
1186
+
1187
+ #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1188
+
1189
+ //! <b>Effects</b>: Inserts an object of type T constructed with
1190
+ //! std::forward<Args>(args)... in the end of the stable_vector.
1191
+ //!
1192
+ //! <b>Throws</b>: If memory allocation throws or the in-place constructor throws.
1193
+ //!
1194
+ //! <b>Complexity</b>: Amortized constant time.
1195
+ template<class ...Args>
1196
+ void emplace_back(Args &&...args)
1197
+ {
1198
+ typedef emplace_functor<Args...> EmplaceFunctor;
1199
+ typedef emplace_iterator<value_type, EmplaceFunctor, difference_type> EmplaceIterator;
1200
+ EmplaceFunctor &&ef = EmplaceFunctor(boost::forward<Args>(args)...);
1201
+ this->insert(this->cend(), EmplaceIterator(ef), EmplaceIterator());
1202
+ }
1203
+
1204
+ //! <b>Requires</b>: position must be a valid iterator of *this.
1205
+ //!
1206
+ //! <b>Effects</b>: Inserts an object of type T constructed with
1207
+ //! std::forward<Args>(args)... before position
1208
+ //!
1209
+ //! <b>Throws</b>: If memory allocation throws or the in-place constructor throws.
1210
+ //!
1211
+ //! <b>Complexity</b>: If position is end(), amortized constant time
1212
+ //! Linear time otherwise.
1213
+ template<class ...Args>
1214
+ iterator emplace(const_iterator position, Args && ...args)
1215
+ {
1216
+ //Just call more general insert(pos, size, value) and return iterator
1217
+ size_type pos_n = position - cbegin();
1218
+ typedef emplace_functor<Args...> EmplaceFunctor;
1219
+ typedef emplace_iterator<value_type, EmplaceFunctor, difference_type> EmplaceIterator;
1220
+ EmplaceFunctor &&ef = EmplaceFunctor(boost::forward<Args>(args)...);
1221
+ this->insert(position, EmplaceIterator(ef), EmplaceIterator());
1222
+ return iterator(this->begin() + pos_n);
1223
+ }
1224
+
1225
+ #else
1226
+
1227
+ #define BOOST_PP_LOCAL_MACRO(n) \
1228
+ BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \
1229
+ void emplace_back(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \
1230
+ { \
1231
+ typedef BOOST_PP_CAT(BOOST_PP_CAT(emplace_functor, n), arg) \
1232
+ BOOST_PP_EXPR_IF(n, <) BOOST_PP_ENUM_PARAMS(n, P) BOOST_PP_EXPR_IF(n, >) \
1233
+ EmplaceFunctor; \
1234
+ typedef emplace_iterator<value_type, EmplaceFunctor, difference_type> EmplaceIterator; \
1235
+ EmplaceFunctor ef BOOST_PP_LPAREN_IF(n) \
1236
+ BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) \
1237
+ BOOST_PP_RPAREN_IF(n); \
1238
+ this->insert(this->cend() , EmplaceIterator(ef), EmplaceIterator()); \
1239
+ } \
1240
+ \
1241
+ BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \
1242
+ iterator emplace(const_iterator pos \
1243
+ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \
1244
+ { \
1245
+ typedef BOOST_PP_CAT(BOOST_PP_CAT(emplace_functor, n), arg) \
1246
+ BOOST_PP_EXPR_IF(n, <) BOOST_PP_ENUM_PARAMS(n, P) BOOST_PP_EXPR_IF(n, >) \
1247
+ EmplaceFunctor; \
1248
+ typedef emplace_iterator<value_type, EmplaceFunctor, difference_type> EmplaceIterator; \
1249
+ EmplaceFunctor ef BOOST_PP_LPAREN_IF(n) \
1250
+ BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _) \
1251
+ BOOST_PP_RPAREN_IF(n); \
1252
+ size_type pos_n = pos - this->cbegin(); \
1253
+ this->insert(pos, EmplaceIterator(ef), EmplaceIterator()); \
1254
+ return iterator(this->begin() + pos_n); \
1255
+ } \
1256
+ //!
1257
+ #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
1258
+ #include BOOST_PP_LOCAL_ITERATE()
1259
+
1260
+ #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING
1261
+
1262
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1263
+ //! <b>Effects</b>: Inserts a copy of x at the end of the stable_vector.
1264
+ //!
1265
+ //! <b>Throws</b>: If memory allocation throws or
1266
+ //! T's copy constructor throws.
1267
+ //!
1268
+ //! <b>Complexity</b>: Amortized constant time.
1269
+ void push_back(const T &x);
1270
+
1271
+ //! <b>Effects</b>: Constructs a new element in the end of the stable_vector
1272
+ //! and moves the resources of mx to this new element.
1273
+ //!
1274
+ //! <b>Throws</b>: If memory allocation throws.
1275
+ //!
1276
+ //! <b>Complexity</b>: Amortized constant time.
1277
+ void push_back(T &&x);
1278
+ #else
1279
+ BOOST_MOVE_CONVERSION_AWARE_CATCH(push_back, T, void, priv_push_back)
1280
+ #endif
1281
+
1282
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1283
+ //! <b>Requires</b>: position must be a valid iterator of *this.
1284
+ //!
1285
+ //! <b>Effects</b>: Insert a copy of x before position.
1286
+ //!
1287
+ //! <b>Returns</b>: An iterator to the inserted element.
1288
+ //!
1289
+ //! <b>Throws</b>: If memory allocation throws or x's copy constructor throws.
1290
+ //!
1291
+ //! <b>Complexity</b>: If position is end(), amortized constant time
1292
+ //! Linear time otherwise.
1293
+ iterator insert(const_iterator position, const T &x);
1294
+
1295
+ //! <b>Requires</b>: position must be a valid iterator of *this.
1296
+ //!
1297
+ //! <b>Effects</b>: Insert a new element before position with mx's resources.
1298
+ //!
1299
+ //! <b>Returns</b>: an iterator to the inserted element.
1300
+ //!
1301
+ //! <b>Throws</b>: If memory allocation throws.
1302
+ //!
1303
+ //! <b>Complexity</b>: If position is end(), amortized constant time
1304
+ //! Linear time otherwise.
1305
+ iterator insert(const_iterator position, T &&x);
1306
+ #else
1307
+ BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator)
1308
+ #endif
1309
+
1310
+ //! <b>Requires</b>: pos must be a valid iterator of *this.
1311
+ //!
1312
+ //! <b>Effects</b>: Insert n copies of x before position.
1313
+ //!
1314
+ //! <b>Returns</b>: an iterator to the first inserted element or position if n is 0.
1315
+ //!
1316
+ //! <b>Throws</b>: If memory allocation throws or T's copy constructor throws.
1317
+ //!
1318
+ //! <b>Complexity</b>: Linear to n.
1319
+ iterator insert(const_iterator position, size_type n, const T& t)
1320
+ {
1321
+ STABLE_VECTOR_CHECK_INVARIANT;
1322
+ typedef constant_iterator<value_type, difference_type> cvalue_iterator;
1323
+ return this->insert(position, cvalue_iterator(t, n), cvalue_iterator());
1324
+ }
1325
+
1326
+ //! <b>Requires</b>: pos must be a valid iterator of *this.
1327
+ //!
1328
+ //! <b>Effects</b>: Insert a copy of the [first, last) range before pos.
1329
+ //!
1330
+ //! <b>Returns</b>: an iterator to the first inserted element or position if first == last.
1331
+ //!
1332
+ //! <b>Throws</b>: If memory allocation throws, T's constructor from a
1333
+ //! dereferenced InpIt throws or T's copy constructor throws.
1334
+ //!
1335
+ //! <b>Complexity</b>: Linear to std::distance [first, last).
1336
+ template <class InputIterator>
1337
+ iterator insert(const_iterator position, InputIterator first, InputIterator last
1338
+ #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1339
+ , typename container_detail::enable_if_c
1340
+ < !container_detail::is_convertible<InputIterator, size_type>::value
1341
+ && container_detail::is_input_iterator<InputIterator>::value
1342
+ >::type * = 0
1343
+ #endif
1344
+ )
1345
+ {
1346
+ STABLE_VECTOR_CHECK_INVARIANT;
1347
+ const size_type pos_n = position - this->cbegin();
1348
+ for(; first != last; ++first){
1349
+ this->emplace(position, *first);
1350
+ }
1351
+ return this->begin() + pos_n;
1352
+ }
1353
+
1354
+ #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1355
+ template <class FwdIt>
1356
+ iterator insert(const_iterator position, FwdIt first, FwdIt last
1357
+ , typename container_detail::enable_if_c
1358
+ < !container_detail::is_convertible<FwdIt, size_type>::value
1359
+ && !container_detail::is_input_iterator<FwdIt>::value
1360
+ >::type * = 0
1361
+ )
1362
+ {
1363
+ const size_type num_new = static_cast<size_type>(std::distance(first, last));
1364
+ const size_type pos = static_cast<size_type>(position - this->cbegin());
1365
+ if(num_new){
1366
+ //Fills the node pool and inserts num_new null pointers in pos.
1367
+ //If a new buffer was needed fixes up pointers up to pos so
1368
+ //past-new nodes are not aligned until the end of this function
1369
+ //or in a rollback in case of exception
1370
+ index_iterator it_past_newly_constructed(this->priv_insert_forward_non_templated(pos, num_new));
1371
+ const index_iterator it_past_new(it_past_newly_constructed + num_new);
1372
+ {
1373
+ //Prepare rollback
1374
+ insert_rollback rollback(*this, it_past_newly_constructed, it_past_new);
1375
+ while(first != last){
1376
+ const node_ptr p = this->priv_get_from_pool();
1377
+ BOOST_ASSERT(!!p);
1378
+ //Put it in the index so rollback can return it in pool if construct_in_place throws
1379
+ *it_past_newly_constructed = p;
1380
+ //Constructs and fixes up pointers This can throw
1381
+ this->priv_build_node_from_it(p, it_past_newly_constructed, first);
1382
+ ++first;
1383
+ ++it_past_newly_constructed;
1384
+ }
1385
+ //rollback.~insert_rollback() called in case of exception
1386
+ }
1387
+ //Fix up pointers for past-new nodes (new nodes were fixed during construction) and
1388
+ //nodes before insertion position in priv_insert_forward_non_templated(...)
1389
+ index_traits_type::fix_up_pointers_from(this->index, it_past_newly_constructed);
1390
+ }
1391
+ return this->begin() + pos;
1392
+ }
1393
+ #endif
1394
+
1395
+ //! <b>Effects</b>: Removes the last element from the stable_vector.
1396
+ //!
1397
+ //! <b>Throws</b>: Nothing.
1398
+ //!
1399
+ //! <b>Complexity</b>: Constant time.
1400
+ void pop_back() BOOST_CONTAINER_NOEXCEPT
1401
+ { this->erase(--this->cend()); }
1402
+
1403
+ //! <b>Effects</b>: Erases the element at position pos.
1404
+ //!
1405
+ //! <b>Throws</b>: Nothing.
1406
+ //!
1407
+ //! <b>Complexity</b>: Linear to the elements between pos and the
1408
+ //! last element. Constant if pos is the last element.
1409
+ iterator erase(const_iterator position) BOOST_CONTAINER_NOEXCEPT
1410
+ {
1411
+ STABLE_VECTOR_CHECK_INVARIANT;
1412
+ const size_type d = position - this->cbegin();
1413
+ index_iterator it = this->index.begin() + d;
1414
+ this->priv_delete_node(position.node_pointer());
1415
+ it = this->index.erase(it);
1416
+ index_traits_type::fix_up_pointers_from(this->index, it);
1417
+ return iterator(node_ptr_traits::static_cast_from(*it));
1418
+ }
1419
+
1420
+ //! <b>Effects</b>: Erases the elements pointed by [first, last).
1421
+ //!
1422
+ //! <b>Throws</b>: Nothing.
1423
+ //!
1424
+ //! <b>Complexity</b>: Linear to the distance between first and last
1425
+ //! plus linear to the elements between pos and the last element.
1426
+ iterator erase(const_iterator first, const_iterator last) BOOST_CONTAINER_NOEXCEPT
1427
+ {
1428
+ STABLE_VECTOR_CHECK_INVARIANT;
1429
+ const const_iterator cbeg(this->cbegin());
1430
+ const size_type d1 = static_cast<size_type>(first - cbeg),
1431
+ d2 = static_cast<size_type>(last - cbeg);
1432
+ size_type d_dif = d2 - d1;
1433
+ if(d_dif){
1434
+ multiallocation_chain holder;
1435
+ const index_iterator it1(this->index.begin() + d1);
1436
+ const index_iterator it2(it1 + d_dif);
1437
+ index_iterator it(it1);
1438
+ while(d_dif--){
1439
+ node_base_ptr &nb = *it;
1440
+ ++it;
1441
+ node_type &n = *node_ptr_traits::static_cast_from(nb);
1442
+ this->priv_destroy_node(n);
1443
+ holder.push_back(node_ptr_traits::pointer_to(n));
1444
+ }
1445
+ this->priv_put_in_pool(holder);
1446
+ const index_iterator e = this->index.erase(it1, it2);
1447
+ index_traits_type::fix_up_pointers_from(this->index, e);
1448
+ }
1449
+ return iterator(last.node_pointer());
1450
+ }
1451
+
1452
+ //! <b>Effects</b>: Swaps the contents of *this and x.
1453
+ //!
1454
+ //! <b>Throws</b>: Nothing.
1455
+ //!
1456
+ //! <b>Complexity</b>: Constant.
1457
+ void swap(stable_vector & x)
1458
+ {
1459
+ STABLE_VECTOR_CHECK_INVARIANT;
1460
+ container_detail::bool_<allocator_traits_type::propagate_on_container_swap::value> flag;
1461
+ container_detail::swap_alloc(this->priv_node_alloc(), x.priv_node_alloc(), flag);
1462
+ //vector's allocator is swapped here
1463
+ this->index.swap(x.index);
1464
+ this->priv_swap_members(x);
1465
+ }
1466
+
1467
+ //! <b>Effects</b>: Erases all the elements of the stable_vector.
1468
+ //!
1469
+ //! <b>Throws</b>: Nothing.
1470
+ //!
1471
+ //! <b>Complexity</b>: Linear to the number of elements in the stable_vector.
1472
+ void clear() BOOST_CONTAINER_NOEXCEPT
1473
+ { this->erase(this->cbegin(),this->cend()); }
1474
+
1475
+ /// @cond
1476
+
1477
+ private:
1478
+
1479
+ class insert_rollback
1480
+ {
1481
+ public:
1482
+
1483
+ insert_rollback(stable_vector &sv, index_iterator &it_past_constructed, const index_iterator &it_past_new)
1484
+ : m_sv(sv), m_it_past_constructed(it_past_constructed), m_it_past_new(it_past_new)
1485
+ {}
1486
+
1487
+ ~insert_rollback()
1488
+ {
1489
+ if(m_it_past_constructed != m_it_past_new){
1490
+ m_sv.priv_put_in_pool(node_ptr_traits::static_cast_from(*m_it_past_constructed));
1491
+ index_iterator e = m_sv.index.erase(m_it_past_constructed, m_it_past_new);
1492
+ index_traits_type::fix_up_pointers_from(m_sv.index, e);
1493
+ }
1494
+ }
1495
+
1496
+ private:
1497
+ stable_vector &m_sv;
1498
+ index_iterator &m_it_past_constructed;
1499
+ const index_iterator &m_it_past_new;
1500
+ };
1501
+
1502
+ class push_back_rollback
1503
+ {
1504
+ public:
1505
+ push_back_rollback(stable_vector &sv, const node_ptr &p)
1506
+ : m_sv(sv), m_p(p)
1507
+ {}
1508
+
1509
+ ~push_back_rollback()
1510
+ {
1511
+ if(m_p){
1512
+ m_sv.priv_put_in_pool(m_p);
1513
+ }
1514
+ }
1515
+
1516
+ void release()
1517
+ { m_p = node_ptr(); }
1518
+
1519
+ private:
1520
+ stable_vector &m_sv;
1521
+ node_ptr m_p;
1522
+ };
1523
+
1524
+ index_iterator priv_insert_forward_non_templated(size_type pos, size_type num_new)
1525
+ {
1526
+ index_traits_type::initialize_end_node(this->index, this->internal_data.end_node, num_new);
1527
+
1528
+ //Now try to fill the pool with new data
1529
+ if(this->internal_data.pool_size < num_new){
1530
+ this->priv_increase_pool(num_new - this->internal_data.pool_size);
1531
+ }
1532
+
1533
+ //Now try to make room in the vector
1534
+ const node_base_ptr_ptr old_buffer = this->index.data();
1535
+ this->index.insert(this->index.begin() + pos, num_new, node_ptr());
1536
+ bool new_buffer = this->index.data() != old_buffer;
1537
+
1538
+ //Fix the pointers for the newly allocated buffer
1539
+ const index_iterator index_beg = this->index.begin();
1540
+ if(new_buffer){
1541
+ index_traits_type::fix_up_pointers(index_beg, index_beg + pos);
1542
+ }
1543
+ return index_beg + pos;
1544
+ }
1545
+
1546
+ bool priv_capacity_bigger_than_size() const
1547
+ {
1548
+ return this->index.capacity() > this->index.size() &&
1549
+ this->internal_data.pool_size > 0;
1550
+ }
1551
+
1552
+ template <class U>
1553
+ void priv_push_back(BOOST_MOVE_CATCH_FWD(U) x)
1554
+ {
1555
+ if(this->priv_capacity_bigger_than_size()){
1556
+ //Enough memory in the pool and in the index
1557
+ const node_ptr p = this->priv_get_from_pool();
1558
+ BOOST_ASSERT(!!p);
1559
+ {
1560
+ push_back_rollback rollback(*this, p);
1561
+ //This might throw
1562
+ this->priv_build_node_from_convertible(p, ::boost::forward<U>(x));
1563
+ rollback.release();
1564
+ }
1565
+ //This can't throw as there is room for a new elements in the index
1566
+ index_iterator new_index = this->index.insert(this->index.end() - ExtraPointers, p);
1567
+ index_traits_type::fix_up_pointers_from(this->index, new_index);
1568
+ }
1569
+ else{
1570
+ this->insert(this->cend(), ::boost::forward<U>(x));
1571
+ }
1572
+ }
1573
+
1574
+ iterator priv_insert(const_iterator position, const value_type &t)
1575
+ {
1576
+ typedef constant_iterator<value_type, difference_type> cvalue_iterator;
1577
+ return this->insert(position, cvalue_iterator(t, 1), cvalue_iterator());
1578
+ }
1579
+
1580
+ iterator priv_insert(const_iterator position, BOOST_RV_REF(T) x)
1581
+ {
1582
+ typedef repeat_iterator<T, difference_type> repeat_it;
1583
+ typedef boost::move_iterator<repeat_it> repeat_move_it;
1584
+ //Just call more general insert(pos, size, value) and return iterator
1585
+ return this->insert(position, repeat_move_it(repeat_it(x, 1)), repeat_move_it(repeat_it()));
1586
+ }
1587
+
1588
+ void priv_clear_pool()
1589
+ {
1590
+ if(!this->index.empty() && this->index.back()){
1591
+ node_base_ptr &pool_first_ref = *(this->index.end() - 2);
1592
+ node_base_ptr &pool_last_ref = this->index.back();
1593
+
1594
+ multiallocation_chain holder;
1595
+ holder.incorporate_after( holder.before_begin()
1596
+ , node_ptr_traits::static_cast_from(pool_first_ref)
1597
+ , node_ptr_traits::static_cast_from(pool_last_ref)
1598
+ , internal_data.pool_size);
1599
+ this->deallocate_individual(holder);
1600
+ pool_first_ref = pool_last_ref = 0;
1601
+ this->internal_data.pool_size = 0;
1602
+ }
1603
+ }
1604
+
1605
+ void priv_increase_pool(size_type n)
1606
+ {
1607
+ node_base_ptr &pool_first_ref = *(this->index.end() - 2);
1608
+ node_base_ptr &pool_last_ref = this->index.back();
1609
+ multiallocation_chain holder;
1610
+ holder.incorporate_after( holder.before_begin()
1611
+ , node_ptr_traits::static_cast_from(pool_first_ref)
1612
+ , node_ptr_traits::static_cast_from(pool_last_ref)
1613
+ , internal_data.pool_size);
1614
+ multiallocation_chain m;
1615
+ this->allocate_individual(n, m);
1616
+ holder.splice_after(holder.before_begin(), m, m.before_begin(), m.last(), n);
1617
+ this->internal_data.pool_size += n;
1618
+ std::pair<node_ptr, node_ptr> data(holder.extract_data());
1619
+ pool_first_ref = data.first;
1620
+ pool_last_ref = data.second;
1621
+ }
1622
+
1623
+ void priv_put_in_pool(const node_ptr &p)
1624
+ {
1625
+ node_base_ptr &pool_first_ref = *(this->index.end()-2);
1626
+ node_base_ptr &pool_last_ref = this->index.back();
1627
+ multiallocation_chain holder;
1628
+ holder.incorporate_after( holder.before_begin()
1629
+ , node_ptr_traits::static_cast_from(pool_first_ref)
1630
+ , node_ptr_traits::static_cast_from(pool_last_ref)
1631
+ , internal_data.pool_size);
1632
+ holder.push_front(p);
1633
+ ++this->internal_data.pool_size;
1634
+ std::pair<node_ptr, node_ptr> ret(holder.extract_data());
1635
+ pool_first_ref = ret.first;
1636
+ pool_last_ref = ret.second;
1637
+ }
1638
+
1639
+ void priv_put_in_pool(multiallocation_chain &ch)
1640
+ {
1641
+ node_base_ptr &pool_first_ref = *(this->index.end()-(ExtraPointers-1));
1642
+ node_base_ptr &pool_last_ref = this->index.back();
1643
+ ch.incorporate_after( ch.before_begin()
1644
+ , node_ptr_traits::static_cast_from(pool_first_ref)
1645
+ , node_ptr_traits::static_cast_from(pool_last_ref)
1646
+ , internal_data.pool_size);
1647
+ this->internal_data.pool_size = ch.size();
1648
+ const std::pair<node_ptr, node_ptr> ret(ch.extract_data());
1649
+ pool_first_ref = ret.first;
1650
+ pool_last_ref = ret.second;
1651
+ }
1652
+
1653
+ node_ptr priv_get_from_pool()
1654
+ {
1655
+ //Precondition: index is not empty
1656
+ BOOST_ASSERT(!this->index.empty());
1657
+ node_base_ptr &pool_first_ref = *(this->index.end() - (ExtraPointers-1));
1658
+ node_base_ptr &pool_last_ref = this->index.back();
1659
+ multiallocation_chain holder;
1660
+ holder.incorporate_after( holder.before_begin()
1661
+ , node_ptr_traits::static_cast_from(pool_first_ref)
1662
+ , node_ptr_traits::static_cast_from(pool_last_ref)
1663
+ , internal_data.pool_size);
1664
+ node_ptr ret = holder.pop_front();
1665
+ --this->internal_data.pool_size;
1666
+ if(!internal_data.pool_size){
1667
+ pool_first_ref = pool_last_ref = node_ptr();
1668
+ }
1669
+ else{
1670
+ const std::pair<node_ptr, node_ptr> data(holder.extract_data());
1671
+ pool_first_ref = data.first;
1672
+ pool_last_ref = data.second;
1673
+ }
1674
+ return ret;
1675
+ }
1676
+
1677
+ node_ptr priv_get_end_node() const
1678
+ {
1679
+ return node_ptr_traits::pointer_to
1680
+ (static_cast<node_type&>(const_cast<node_base_type&>(this->internal_data.end_node)));
1681
+ }
1682
+
1683
+ void priv_destroy_node(const node_type &n)
1684
+ {
1685
+ allocator_traits<node_allocator_type>::
1686
+ destroy(this->priv_node_alloc(), container_detail::addressof(n.value));
1687
+ static_cast<const node_base_type*>(&n)->~node_base_type();
1688
+ }
1689
+
1690
+ void priv_delete_node(const node_ptr &n)
1691
+ {
1692
+ this->priv_destroy_node(*n);
1693
+ this->priv_put_in_pool(n);
1694
+ }
1695
+
1696
+ template<class Iterator>
1697
+ void priv_build_node_from_it(const node_ptr &p, const index_iterator &up_index, const Iterator &it)
1698
+ {
1699
+ //This can throw
1700
+ boost::container::construct_in_place
1701
+ ( this->priv_node_alloc()
1702
+ , container_detail::addressof(p->value)
1703
+ , it);
1704
+ //This does not throw
1705
+ ::new(static_cast<node_base_type*>(container_detail::to_raw_pointer(p)))
1706
+ node_base_type(index_traits_type::ptr_to_node_base_ptr(*up_index));
1707
+ }
1708
+
1709
+ template<class ValueConvertible>
1710
+ void priv_build_node_from_convertible(const node_ptr &p, BOOST_FWD_REF(ValueConvertible) value_convertible)
1711
+ {
1712
+ //This can throw
1713
+ boost::container::allocator_traits<node_allocator_type>::construct
1714
+ ( this->priv_node_alloc()
1715
+ , container_detail::addressof(p->value)
1716
+ , ::boost::forward<ValueConvertible>(value_convertible));
1717
+ //This does not throw
1718
+ ::new(static_cast<node_base_type*>(container_detail::to_raw_pointer(p))) node_base_type;
1719
+ }
1720
+
1721
+ void priv_swap_members(stable_vector &x)
1722
+ {
1723
+ boost::container::swap_dispatch(this->internal_data.pool_size, x.internal_data.pool_size);
1724
+ index_traits_type::readjust_end_node(this->index, this->internal_data.end_node);
1725
+ index_traits_type::readjust_end_node(x.index, x.internal_data.end_node);
1726
+ }
1727
+
1728
+ #if defined(STABLE_VECTOR_ENABLE_INVARIANT_CHECKING)
1729
+ bool priv_invariant()const
1730
+ {
1731
+ index_type & index_ref = const_cast<index_type&>(this->index);
1732
+
1733
+ if(index.empty())
1734
+ return !this->capacity() && !this->size();
1735
+ if(this->priv_get_end_node() != *(index.end() - ExtraPointers)){
1736
+ return false;
1737
+ }
1738
+
1739
+ if(!index_traits_type::invariants(index_ref)){
1740
+ return false;
1741
+ }
1742
+
1743
+ size_type n = this->capacity() - this->size();
1744
+ node_base_ptr &pool_first_ref = *(index_ref.end() - (ExtraPointers-1));
1745
+ node_base_ptr &pool_last_ref = index_ref.back();
1746
+ multiallocation_chain holder;
1747
+ holder.incorporate_after( holder.before_begin()
1748
+ , node_ptr_traits::static_cast_from(pool_first_ref)
1749
+ , node_ptr_traits::static_cast_from(pool_last_ref)
1750
+ , internal_data.pool_size);
1751
+ typename multiallocation_chain::iterator beg(holder.begin()), end(holder.end());
1752
+ size_type num_pool = 0;
1753
+ while(beg != end){
1754
+ ++num_pool;
1755
+ ++beg;
1756
+ }
1757
+ return n >= num_pool && num_pool == internal_data.pool_size;
1758
+ }
1759
+
1760
+ class invariant_checker
1761
+ {
1762
+ invariant_checker(const invariant_checker &);
1763
+ invariant_checker & operator=(const invariant_checker &);
1764
+ const stable_vector* p;
1765
+
1766
+ public:
1767
+ invariant_checker(const stable_vector& v):p(&v){}
1768
+ ~invariant_checker(){BOOST_ASSERT(p->priv_invariant());}
1769
+ void touch(){}
1770
+ };
1771
+ #endif
1772
+
1773
+ class ebo_holder
1774
+ : public node_allocator_type
1775
+ {
1776
+ private:
1777
+ BOOST_MOVABLE_BUT_NOT_COPYABLE(ebo_holder)
1778
+
1779
+ public:
1780
+ template<class AllocatorRLValue>
1781
+ explicit ebo_holder(BOOST_FWD_REF(AllocatorRLValue) a)
1782
+ : node_allocator_type(boost::forward<AllocatorRLValue>(a))
1783
+ , pool_size(0)
1784
+ , end_node()
1785
+ {}
1786
+
1787
+ ebo_holder()
1788
+ : node_allocator_type()
1789
+ , pool_size(0)
1790
+ , end_node()
1791
+ {}
1792
+
1793
+ size_type pool_size;
1794
+ node_base_type end_node;
1795
+ } internal_data;
1796
+
1797
+ node_allocator_type &priv_node_alloc() { return internal_data; }
1798
+ const node_allocator_type &priv_node_alloc() const { return internal_data; }
1799
+
1800
+ index_type index;
1801
+ /// @endcond
1802
+ };
1803
+
1804
+ template <typename T,typename Allocator>
1805
+ bool operator==(const stable_vector<T,Allocator>& x,const stable_vector<T,Allocator>& y)
1806
+ {
1807
+ return x.size()==y.size()&&std::equal(x.begin(),x.end(),y.begin());
1808
+ }
1809
+
1810
+ template <typename T,typename Allocator>
1811
+ bool operator< (const stable_vector<T,Allocator>& x,const stable_vector<T,Allocator>& y)
1812
+ {
1813
+ return std::lexicographical_compare(x.begin(),x.end(),y.begin(),y.end());
1814
+ }
1815
+
1816
+ template <typename T,typename Allocator>
1817
+ bool operator!=(const stable_vector<T,Allocator>& x,const stable_vector<T,Allocator>& y)
1818
+ {
1819
+ return !(x==y);
1820
+ }
1821
+
1822
+ template <typename T,typename Allocator>
1823
+ bool operator> (const stable_vector<T,Allocator>& x,const stable_vector<T,Allocator>& y)
1824
+ {
1825
+ return y<x;
1826
+ }
1827
+
1828
+ template <typename T,typename Allocator>
1829
+ bool operator>=(const stable_vector<T,Allocator>& x,const stable_vector<T,Allocator>& y)
1830
+ {
1831
+ return !(x<y);
1832
+ }
1833
+
1834
+ template <typename T,typename Allocator>
1835
+ bool operator<=(const stable_vector<T,Allocator>& x,const stable_vector<T,Allocator>& y)
1836
+ {
1837
+ return !(x>y);
1838
+ }
1839
+
1840
+ // specialized algorithms:
1841
+
1842
+ template <typename T, typename Allocator>
1843
+ void swap(stable_vector<T,Allocator>& x,stable_vector<T,Allocator>& y)
1844
+ {
1845
+ x.swap(y);
1846
+ }
1847
+
1848
+ /// @cond
1849
+
1850
+ #undef STABLE_VECTOR_CHECK_INVARIANT
1851
+
1852
+ /// @endcond
1853
+
1854
+ /*
1855
+
1856
+ //!has_trivial_destructor_after_move<> == true_type
1857
+ //!specialization for optimizations
1858
+ template <class T, class Allocator>
1859
+ struct has_trivial_destructor_after_move<boost::container::stable_vector<T, Allocator> >
1860
+ : public has_trivial_destructor_after_move<Allocator>::value
1861
+ {};
1862
+
1863
+ */
1864
+
1865
+ }}
1866
+
1867
+ #include <boost/container/detail/config_end.hpp>
1868
+
1869
+ #endif //BOOST_CONTAINER_STABLE_VECTOR_HPP