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,2012 @@
1
+ //////////////////////////////////////////////////////////////////////////////
2
+ //
3
+ // (C) Copyright Ion Gaztanaga 2005-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
+ // Copyright (c) 1996,1997
11
+ // Silicon Graphics Computer Systems, Inc.
12
+ //
13
+ // Permission to use, copy, modify, distribute and sell this software
14
+ // and its documentation for any purpose is hereby granted without fee,
15
+ // provided that the above copyright notice appear in all copies and
16
+ // that both that copyright notice and this permission notice appear
17
+ // in supporting documentation. Silicon Graphics makes no
18
+ // representations about the suitability of this software for any
19
+ // purpose. It is provided "as is" without express or implied warranty.
20
+ //
21
+ //
22
+ // Copyright (c) 1994
23
+ // Hewlett-Packard Company
24
+ //
25
+ // Permission to use, copy, modify, distribute and sell this software
26
+ // and its documentation for any purpose is hereby granted without fee,
27
+ // provided that the above copyright notice appear in all copies and
28
+ // that both that copyright notice and this permission notice appear
29
+ // in supporting documentation. Hewlett-Packard Company makes no
30
+ // representations about the suitability of this software for any
31
+ // purpose. It is provided "as is" without express or implied warranty.
32
+
33
+ #ifndef BOOST_CONTAINER_DEQUE_HPP
34
+ #define BOOST_CONTAINER_DEQUE_HPP
35
+
36
+ #if (defined _MSC_VER) && (_MSC_VER >= 1200)
37
+ # pragma once
38
+ #endif
39
+
40
+ #include <boost/container/detail/config_begin.hpp>
41
+ #include <boost/container/detail/workaround.hpp>
42
+
43
+ #include <boost/container/detail/utilities.hpp>
44
+ #include <boost/container/detail/iterators.hpp>
45
+ #include <boost/container/detail/algorithms.hpp>
46
+ #include <boost/container/detail/mpl.hpp>
47
+ #include <boost/container/allocator_traits.hpp>
48
+ #include <boost/container/container_fwd.hpp>
49
+ #include <boost/container/throw_exception.hpp>
50
+ #include <cstddef>
51
+ #include <iterator>
52
+ #include <boost/assert.hpp>
53
+ #include <memory>
54
+ #include <algorithm>
55
+ #include <boost/detail/no_exceptions_support.hpp>
56
+ #include <boost/type_traits/has_trivial_destructor.hpp>
57
+ #include <boost/type_traits/has_trivial_copy.hpp>
58
+ #include <boost/type_traits/has_trivial_assign.hpp>
59
+ #include <boost/type_traits/has_nothrow_copy.hpp>
60
+ #include <boost/type_traits/has_nothrow_assign.hpp>
61
+ #include <boost/move/utility.hpp>
62
+ #include <boost/move/iterator.hpp>
63
+ #include <boost/move/detail/move_helpers.hpp>
64
+ #include <boost/container/detail/advanced_insert_int.hpp>
65
+ #include <boost/detail/no_exceptions_support.hpp>
66
+
67
+ namespace boost {
68
+ namespace container {
69
+
70
+ /// @cond
71
+ #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
72
+ template <class T, class Allocator = std::allocator<T> >
73
+ #else
74
+ template <class T, class Allocator>
75
+ #endif
76
+ class deque;
77
+
78
+ template <class T, class Allocator>
79
+ struct deque_value_traits
80
+ {
81
+ typedef T value_type;
82
+ typedef Allocator allocator_type;
83
+ static const bool trivial_dctr = boost::has_trivial_destructor<value_type>::value;
84
+ static const bool trivial_dctr_after_move = ::boost::has_trivial_destructor_after_move<value_type>::value;
85
+ static const bool trivial_copy = has_trivial_copy<value_type>::value;
86
+ static const bool nothrow_copy = has_nothrow_copy<value_type>::value;
87
+ static const bool trivial_assign = has_trivial_assign<value_type>::value;
88
+ //static const bool nothrow_assign = has_nothrow_assign<value_type>::value;
89
+ static const bool nothrow_assign = false;
90
+ };
91
+
92
+ // Note: this function is simply a kludge to work around several compilers'
93
+ // bugs in handling constant expressions.
94
+ inline std::size_t deque_buf_size(std::size_t size)
95
+ { return size < 512 ? std::size_t(512 / size) : std::size_t(1); }
96
+
97
+ // Deque base class. It has two purposes. First, its constructor
98
+ // and destructor allocate (but don't initialize) storage. This makes
99
+ // exception safety easier.
100
+ template <class T, class Allocator>
101
+ class deque_base
102
+ {
103
+ BOOST_COPYABLE_AND_MOVABLE(deque_base)
104
+ public:
105
+ typedef allocator_traits<Allocator> val_alloc_traits_type;
106
+ typedef typename val_alloc_traits_type::value_type val_alloc_val;
107
+ typedef typename val_alloc_traits_type::pointer val_alloc_ptr;
108
+ typedef typename val_alloc_traits_type::const_pointer val_alloc_cptr;
109
+ typedef typename val_alloc_traits_type::reference val_alloc_ref;
110
+ typedef typename val_alloc_traits_type::const_reference val_alloc_cref;
111
+ typedef typename val_alloc_traits_type::difference_type val_alloc_diff;
112
+ typedef typename val_alloc_traits_type::size_type val_alloc_size;
113
+ typedef typename val_alloc_traits_type::template
114
+ portable_rebind_alloc<val_alloc_ptr>::type ptr_alloc_t;
115
+ typedef allocator_traits<ptr_alloc_t> ptr_alloc_traits_type;
116
+ typedef typename ptr_alloc_traits_type::value_type ptr_alloc_val;
117
+ typedef typename ptr_alloc_traits_type::pointer ptr_alloc_ptr;
118
+ typedef typename ptr_alloc_traits_type::const_pointer ptr_alloc_cptr;
119
+ typedef typename ptr_alloc_traits_type::reference ptr_alloc_ref;
120
+ typedef typename ptr_alloc_traits_type::const_reference ptr_alloc_cref;
121
+ typedef Allocator allocator_type;
122
+ typedef allocator_type stored_allocator_type;
123
+ typedef val_alloc_size size_type;
124
+
125
+ protected:
126
+
127
+ typedef deque_value_traits<T, Allocator> traits_t;
128
+ typedef ptr_alloc_t map_allocator_type;
129
+
130
+ static size_type s_buffer_size() { return deque_buf_size(sizeof(T)); }
131
+
132
+ val_alloc_ptr priv_allocate_node()
133
+ { return this->alloc().allocate(s_buffer_size()); }
134
+
135
+ void priv_deallocate_node(val_alloc_ptr p)
136
+ { this->alloc().deallocate(p, s_buffer_size()); }
137
+
138
+ ptr_alloc_ptr priv_allocate_map(size_type n)
139
+ { return this->ptr_alloc().allocate(n); }
140
+
141
+ void priv_deallocate_map(ptr_alloc_ptr p, size_type n)
142
+ { this->ptr_alloc().deallocate(p, n); }
143
+
144
+ public:
145
+ // Class invariants:
146
+ // For any nonsingular iterator i:
147
+ // i.node is the address of an element in the map array. The
148
+ // contents of i.node is a pointer to the beginning of a node.
149
+ // i.first == //(i.node)
150
+ // i.last == i.first + node_size
151
+ // i.cur is a pointer in the range [i.first, i.last). NOTE:
152
+ // the implication of this is that i.cur is always a dereferenceable
153
+ // pointer, even if i is a past-the-end iterator.
154
+ // Start and Finish are always nonsingular iterators. NOTE: this means
155
+ // that an empty deque must have one node, and that a deque
156
+ // with N elements, where N is the buffer size, must have two nodes.
157
+ // For every node other than start.node and finish.node, every element
158
+ // in the node is an initialized object. If start.node == finish.node,
159
+ // then [start.cur, finish.cur) are initialized objects, and
160
+ // the elements outside that range are uninitialized storage. Otherwise,
161
+ // [start.cur, start.last) and [finish.first, finish.cur) are initialized
162
+ // objects, and [start.first, start.cur) and [finish.cur, finish.last)
163
+ // are uninitialized storage.
164
+ // [map, map + map_size) is a valid, non-empty range.
165
+ // [start.node, finish.node] is a valid range contained within
166
+ // [map, map + map_size).
167
+ // Allocator pointer in the range [map, map + map_size) points to an allocated node
168
+ // if and only if the pointer is in the range [start.node, finish.node].
169
+ class const_iterator
170
+ : public std::iterator<std::random_access_iterator_tag,
171
+ val_alloc_val, val_alloc_diff,
172
+ val_alloc_cptr, val_alloc_cref>
173
+ {
174
+ public:
175
+ static size_type s_buffer_size() { return deque_base<T, Allocator>::s_buffer_size(); }
176
+
177
+ typedef std::random_access_iterator_tag iterator_category;
178
+ typedef val_alloc_val value_type;
179
+ typedef val_alloc_cptr pointer;
180
+ typedef val_alloc_cref reference;
181
+ typedef val_alloc_diff difference_type;
182
+
183
+ typedef ptr_alloc_ptr index_pointer;
184
+ typedef const_iterator self_t;
185
+
186
+ friend class deque<T, Allocator>;
187
+ friend class deque_base<T, Allocator>;
188
+
189
+ protected:
190
+ val_alloc_ptr m_cur;
191
+ val_alloc_ptr m_first;
192
+ val_alloc_ptr m_last;
193
+ index_pointer m_node;
194
+
195
+ public:
196
+ const_iterator(val_alloc_ptr x, index_pointer y)
197
+ : m_cur(x), m_first(*y),
198
+ m_last(*y + s_buffer_size()), m_node(y) {}
199
+
200
+ const_iterator() : m_cur(0), m_first(0), m_last(0), m_node(0) {}
201
+
202
+ const_iterator(const const_iterator& x)
203
+ : m_cur(x.m_cur), m_first(x.m_first),
204
+ m_last(x.m_last), m_node(x.m_node) {}
205
+
206
+ reference operator*() const
207
+ { return *this->m_cur; }
208
+
209
+ pointer operator->() const
210
+ { return this->m_cur; }
211
+
212
+ difference_type operator-(const self_t& x) const
213
+ {
214
+ if(!this->m_cur && !x.m_cur){
215
+ return 0;
216
+ }
217
+ return difference_type(this->s_buffer_size()) * (this->m_node - x.m_node - 1) +
218
+ (this->m_cur - this->m_first) + (x.m_last - x.m_cur);
219
+ }
220
+
221
+ self_t& operator++()
222
+ {
223
+ ++this->m_cur;
224
+ if (this->m_cur == this->m_last) {
225
+ this->priv_set_node(this->m_node + 1);
226
+ this->m_cur = this->m_first;
227
+ }
228
+ return *this;
229
+ }
230
+
231
+ self_t operator++(int)
232
+ {
233
+ self_t tmp = *this;
234
+ ++*this;
235
+ return tmp;
236
+ }
237
+
238
+ self_t& operator--()
239
+ {
240
+ if (this->m_cur == this->m_first) {
241
+ this->priv_set_node(this->m_node - 1);
242
+ this->m_cur = this->m_last;
243
+ }
244
+ --this->m_cur;
245
+ return *this;
246
+ }
247
+
248
+ self_t operator--(int)
249
+ {
250
+ self_t tmp = *this;
251
+ --*this;
252
+ return tmp;
253
+ }
254
+
255
+ self_t& operator+=(difference_type n)
256
+ {
257
+ difference_type offset = n + (this->m_cur - this->m_first);
258
+ if (offset >= 0 && offset < difference_type(this->s_buffer_size()))
259
+ this->m_cur += n;
260
+ else {
261
+ difference_type node_offset =
262
+ offset > 0 ? offset / difference_type(this->s_buffer_size())
263
+ : -difference_type((-offset - 1) / this->s_buffer_size()) - 1;
264
+ this->priv_set_node(this->m_node + node_offset);
265
+ this->m_cur = this->m_first +
266
+ (offset - node_offset * difference_type(this->s_buffer_size()));
267
+ }
268
+ return *this;
269
+ }
270
+
271
+ self_t operator+(difference_type n) const
272
+ { self_t tmp = *this; return tmp += n; }
273
+
274
+ self_t& operator-=(difference_type n)
275
+ { return *this += -n; }
276
+
277
+ self_t operator-(difference_type n) const
278
+ { self_t tmp = *this; return tmp -= n; }
279
+
280
+ reference operator[](difference_type n) const
281
+ { return *(*this + n); }
282
+
283
+ bool operator==(const self_t& x) const
284
+ { return this->m_cur == x.m_cur; }
285
+
286
+ bool operator!=(const self_t& x) const
287
+ { return !(*this == x); }
288
+
289
+ bool operator<(const self_t& x) const
290
+ {
291
+ return (this->m_node == x.m_node) ?
292
+ (this->m_cur < x.m_cur) : (this->m_node < x.m_node);
293
+ }
294
+
295
+ bool operator>(const self_t& x) const
296
+ { return x < *this; }
297
+
298
+ bool operator<=(const self_t& x) const
299
+ { return !(x < *this); }
300
+
301
+ bool operator>=(const self_t& x) const
302
+ { return !(*this < x); }
303
+
304
+ void priv_set_node(index_pointer new_node)
305
+ {
306
+ this->m_node = new_node;
307
+ this->m_first = *new_node;
308
+ this->m_last = this->m_first + this->s_buffer_size();
309
+ }
310
+
311
+ friend const_iterator operator+(difference_type n, const const_iterator& x)
312
+ { return x + n; }
313
+ };
314
+
315
+ //Deque iterator
316
+ class iterator : public const_iterator
317
+ {
318
+ public:
319
+ typedef std::random_access_iterator_tag iterator_category;
320
+ typedef val_alloc_val value_type;
321
+ typedef val_alloc_ptr pointer;
322
+ typedef val_alloc_ref reference;
323
+ typedef val_alloc_diff difference_type;
324
+ typedef ptr_alloc_ptr index_pointer;
325
+ typedef const_iterator self_t;
326
+
327
+ friend class deque<T, Allocator>;
328
+ friend class deque_base<T, Allocator>;
329
+
330
+ private:
331
+ explicit iterator(const const_iterator& x) : const_iterator(x){}
332
+
333
+ public:
334
+ //Constructors
335
+ iterator(val_alloc_ptr x, index_pointer y) : const_iterator(x, y){}
336
+ iterator() : const_iterator(){}
337
+ //iterator(const const_iterator &cit) : const_iterator(cit){}
338
+ iterator(const iterator& x) : const_iterator(x){}
339
+
340
+ //Pointer like operators
341
+ reference operator*() const { return *this->m_cur; }
342
+ pointer operator->() const { return this->m_cur; }
343
+
344
+ reference operator[](difference_type n) const { return *(*this + n); }
345
+
346
+ //Increment / Decrement
347
+ iterator& operator++()
348
+ { this->const_iterator::operator++(); return *this; }
349
+
350
+ iterator operator++(int)
351
+ { iterator tmp = *this; ++*this; return tmp; }
352
+
353
+ iterator& operator--()
354
+ { this->const_iterator::operator--(); return *this; }
355
+
356
+ iterator operator--(int)
357
+ { iterator tmp = *this; --*this; return tmp; }
358
+
359
+ // Arithmetic
360
+ iterator& operator+=(difference_type off)
361
+ { this->const_iterator::operator+=(off); return *this; }
362
+
363
+ iterator operator+(difference_type off) const
364
+ { return iterator(this->const_iterator::operator+(off)); }
365
+
366
+ friend iterator operator+(difference_type off, const iterator& right)
367
+ { return iterator(off+static_cast<const const_iterator &>(right)); }
368
+
369
+ iterator& operator-=(difference_type off)
370
+ { this->const_iterator::operator-=(off); return *this; }
371
+
372
+ iterator operator-(difference_type off) const
373
+ { return iterator(this->const_iterator::operator-(off)); }
374
+
375
+ difference_type operator-(const const_iterator& right) const
376
+ { return static_cast<const const_iterator&>(*this) - right; }
377
+ };
378
+
379
+ deque_base(size_type num_elements, const allocator_type& a)
380
+ : members_(a)
381
+ { this->priv_initialize_map(num_elements); }
382
+
383
+ explicit deque_base(const allocator_type& a)
384
+ : members_(a)
385
+ {}
386
+
387
+ deque_base()
388
+ : members_()
389
+ {}
390
+
391
+ explicit deque_base(BOOST_RV_REF(deque_base) x)
392
+ : members_( boost::move(x.ptr_alloc())
393
+ , boost::move(x.alloc()) )
394
+ {}
395
+
396
+ ~deque_base()
397
+ {
398
+ if (this->members_.m_map) {
399
+ this->priv_destroy_nodes(this->members_.m_start.m_node, this->members_.m_finish.m_node + 1);
400
+ this->priv_deallocate_map(this->members_.m_map, this->members_.m_map_size);
401
+ }
402
+ }
403
+
404
+ private:
405
+ deque_base(const deque_base&);
406
+
407
+ protected:
408
+
409
+ void swap_members(deque_base &x)
410
+ {
411
+ std::swap(this->members_.m_start, x.members_.m_start);
412
+ std::swap(this->members_.m_finish, x.members_.m_finish);
413
+ std::swap(this->members_.m_map, x.members_.m_map);
414
+ std::swap(this->members_.m_map_size, x.members_.m_map_size);
415
+ }
416
+
417
+ void priv_initialize_map(size_type num_elements)
418
+ {
419
+ // if(num_elements){
420
+ size_type num_nodes = num_elements / s_buffer_size() + 1;
421
+
422
+ this->members_.m_map_size = container_detail::max_value((size_type) InitialMapSize, num_nodes + 2);
423
+ this->members_.m_map = this->priv_allocate_map(this->members_.m_map_size);
424
+
425
+ ptr_alloc_ptr nstart = this->members_.m_map + (this->members_.m_map_size - num_nodes) / 2;
426
+ ptr_alloc_ptr nfinish = nstart + num_nodes;
427
+
428
+ BOOST_TRY {
429
+ this->priv_create_nodes(nstart, nfinish);
430
+ }
431
+ BOOST_CATCH(...){
432
+ this->priv_deallocate_map(this->members_.m_map, this->members_.m_map_size);
433
+ this->members_.m_map = 0;
434
+ this->members_.m_map_size = 0;
435
+ BOOST_RETHROW
436
+ }
437
+ BOOST_CATCH_END
438
+
439
+ this->members_.m_start.priv_set_node(nstart);
440
+ this->members_.m_finish.priv_set_node(nfinish - 1);
441
+ this->members_.m_start.m_cur = this->members_.m_start.m_first;
442
+ this->members_.m_finish.m_cur = this->members_.m_finish.m_first +
443
+ num_elements % s_buffer_size();
444
+ // }
445
+ }
446
+
447
+ void priv_create_nodes(ptr_alloc_ptr nstart, ptr_alloc_ptr nfinish)
448
+ {
449
+ ptr_alloc_ptr cur;
450
+ BOOST_TRY {
451
+ for (cur = nstart; cur < nfinish; ++cur)
452
+ *cur = this->priv_allocate_node();
453
+ }
454
+ BOOST_CATCH(...){
455
+ this->priv_destroy_nodes(nstart, cur);
456
+ BOOST_RETHROW
457
+ }
458
+ BOOST_CATCH_END
459
+ }
460
+
461
+ void priv_destroy_nodes(ptr_alloc_ptr nstart, ptr_alloc_ptr nfinish)
462
+ {
463
+ for (ptr_alloc_ptr n = nstart; n < nfinish; ++n)
464
+ this->priv_deallocate_node(*n);
465
+ }
466
+
467
+ void priv_clear_map()
468
+ {
469
+ if (this->members_.m_map) {
470
+ this->priv_destroy_nodes(this->members_.m_start.m_node, this->members_.m_finish.m_node + 1);
471
+ this->priv_deallocate_map(this->members_.m_map, this->members_.m_map_size);
472
+ this->members_.m_map = 0;
473
+ this->members_.m_map_size = 0;
474
+ this->members_.m_start = iterator();
475
+ this->members_.m_finish = this->members_.m_start;
476
+ }
477
+ }
478
+
479
+ enum { InitialMapSize = 8 };
480
+
481
+ protected:
482
+ struct members_holder
483
+ : public ptr_alloc_t
484
+ , public allocator_type
485
+ {
486
+ members_holder()
487
+ : map_allocator_type(), allocator_type()
488
+ , m_map(0), m_map_size(0)
489
+ , m_start(), m_finish(m_start)
490
+ {}
491
+
492
+ explicit members_holder(const allocator_type &a)
493
+ : map_allocator_type(a), allocator_type(a)
494
+ , m_map(0), m_map_size(0)
495
+ , m_start(), m_finish(m_start)
496
+ {}
497
+
498
+ template<class ValAllocConvertible, class PtrAllocConvertible>
499
+ members_holder(BOOST_FWD_REF(PtrAllocConvertible) pa, BOOST_FWD_REF(ValAllocConvertible) va)
500
+ : map_allocator_type(boost::forward<PtrAllocConvertible>(pa))
501
+ , allocator_type (boost::forward<ValAllocConvertible>(va))
502
+ , m_map(0), m_map_size(0)
503
+ , m_start(), m_finish(m_start)
504
+ {}
505
+
506
+ ptr_alloc_ptr m_map;
507
+ val_alloc_size m_map_size;
508
+ iterator m_start;
509
+ iterator m_finish;
510
+ } members_;
511
+
512
+ ptr_alloc_t &ptr_alloc()
513
+ { return members_; }
514
+
515
+ const ptr_alloc_t &ptr_alloc() const
516
+ { return members_; }
517
+
518
+ allocator_type &alloc()
519
+ { return members_; }
520
+
521
+ const allocator_type &alloc() const
522
+ { return members_; }
523
+ };
524
+ /// @endcond
525
+
526
+ //! Deque class
527
+ //!
528
+ #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
529
+ template <class T, class Allocator = std::allocator<T> >
530
+ #else
531
+ template <class T, class Allocator>
532
+ #endif
533
+ class deque : protected deque_base<T, Allocator>
534
+ {
535
+ /// @cond
536
+ private:
537
+ typedef deque_base<T, Allocator> Base;
538
+ /// @endcond
539
+
540
+ public:
541
+
542
+ //////////////////////////////////////////////
543
+ //
544
+ // types
545
+ //
546
+ //////////////////////////////////////////////
547
+
548
+ typedef T value_type;
549
+ typedef typename ::boost::container::allocator_traits<Allocator>::pointer pointer;
550
+ typedef typename ::boost::container::allocator_traits<Allocator>::const_pointer const_pointer;
551
+ typedef typename ::boost::container::allocator_traits<Allocator>::reference reference;
552
+ typedef typename ::boost::container::allocator_traits<Allocator>::const_reference const_reference;
553
+ typedef typename ::boost::container::allocator_traits<Allocator>::size_type size_type;
554
+ typedef typename ::boost::container::allocator_traits<Allocator>::difference_type difference_type;
555
+ typedef Allocator allocator_type;
556
+ typedef BOOST_CONTAINER_IMPDEF(allocator_type) stored_allocator_type;
557
+ typedef BOOST_CONTAINER_IMPDEF(typename Base::iterator) iterator;
558
+ typedef BOOST_CONTAINER_IMPDEF(typename Base::const_iterator) const_iterator;
559
+ typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<iterator>) reverse_iterator;
560
+ typedef BOOST_CONTAINER_IMPDEF(std::reverse_iterator<const_iterator>) const_reverse_iterator;
561
+
562
+ /// @cond
563
+
564
+ private: // Internal typedefs
565
+ BOOST_COPYABLE_AND_MOVABLE(deque)
566
+ typedef typename Base::ptr_alloc_ptr index_pointer;
567
+ static size_type s_buffer_size()
568
+ { return Base::s_buffer_size(); }
569
+ typedef allocator_traits<Allocator> allocator_traits_type;
570
+
571
+ /// @endcond
572
+
573
+ public:
574
+ //////////////////////////////////////////////
575
+ //
576
+ // construct/copy/destroy
577
+ //
578
+ //////////////////////////////////////////////
579
+
580
+ //! <b>Effects</b>: Default constructors a deque.
581
+ //!
582
+ //! <b>Throws</b>: If allocator_type's default constructor throws.
583
+ //!
584
+ //! <b>Complexity</b>: Constant.
585
+ deque()
586
+ : Base()
587
+ {}
588
+
589
+ //! <b>Effects</b>: Constructs a deque taking the allocator as parameter.
590
+ //!
591
+ //! <b>Throws</b>: Nothing
592
+ //!
593
+ //! <b>Complexity</b>: Constant.
594
+ explicit deque(const allocator_type& a) BOOST_CONTAINER_NOEXCEPT
595
+ : Base(a)
596
+ {}
597
+
598
+ //! <b>Effects</b>: Constructs a deque that will use a copy of allocator a
599
+ //! and inserts n default contructed values.
600
+ //!
601
+ //! <b>Throws</b>: If allocator_type's default constructor or copy constructor
602
+ //! throws or T's default or copy constructor throws.
603
+ //!
604
+ //! <b>Complexity</b>: Linear to n.
605
+ explicit deque(size_type n)
606
+ : Base(n, allocator_type())
607
+ {
608
+ container_detail::insert_default_constructed_n_proxy<Allocator, iterator> proxy(this->alloc());
609
+ proxy.uninitialized_copy_n_and_update(this->begin(), n);
610
+ //deque_base will deallocate in case of exception...
611
+ }
612
+
613
+ //! <b>Effects</b>: Constructs a deque that will use a copy of allocator a
614
+ //! and inserts n copies of value.
615
+ //!
616
+ //! <b>Throws</b>: If allocator_type's default constructor or copy constructor
617
+ //! throws or T's default or copy constructor throws.
618
+ //!
619
+ //! <b>Complexity</b>: Linear to n.
620
+ deque(size_type n, const value_type& value,
621
+ const allocator_type& a = allocator_type())
622
+ : Base(n, a)
623
+ { this->priv_fill_initialize(value); }
624
+
625
+ //! <b>Effects</b>: Constructs a deque that will use a copy of allocator a
626
+ //! and inserts a copy of the range [first, last) in the deque.
627
+ //!
628
+ //! <b>Throws</b>: If allocator_type's default constructor or copy constructor
629
+ //! throws or T's constructor taking an dereferenced InIt throws.
630
+ //!
631
+ //! <b>Complexity</b>: Linear to the range [first, last).
632
+ template <class InIt>
633
+ deque(InIt first, InIt last, const allocator_type& a = allocator_type()
634
+ #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
635
+ , typename container_detail::enable_if_c
636
+ < !container_detail::is_convertible<InIt, size_type>::value
637
+ >::type * = 0
638
+ #endif
639
+ )
640
+ : Base(a)
641
+ {
642
+ typedef typename std::iterator_traits<InIt>::iterator_category ItCat;
643
+ this->priv_range_initialize(first, last, ItCat());
644
+ }
645
+
646
+ //! <b>Effects</b>: Copy constructs a deque.
647
+ //!
648
+ //! <b>Postcondition</b>: x == *this.
649
+ //!
650
+ //! <b>Complexity</b>: Linear to the elements x contains.
651
+ deque(const deque& x)
652
+ : Base(allocator_traits_type::select_on_container_copy_construction(x.alloc()))
653
+ {
654
+ if(x.size()){
655
+ this->priv_initialize_map(x.size());
656
+ boost::container::uninitialized_copy_alloc
657
+ (this->alloc(), x.begin(), x.end(), this->members_.m_start);
658
+ }
659
+ }
660
+
661
+ //! <b>Effects</b>: Move constructor. Moves mx's resources to *this.
662
+ //!
663
+ //! <b>Throws</b>: If allocator_type's copy constructor throws.
664
+ //!
665
+ //! <b>Complexity</b>: Constant.
666
+ deque(BOOST_RV_REF(deque) x)
667
+ : Base(boost::move(static_cast<Base&>(x)))
668
+ { this->swap_members(x); }
669
+
670
+ //! <b>Effects</b>: Copy constructs a vector using the specified allocator.
671
+ //!
672
+ //! <b>Postcondition</b>: x == *this.
673
+ //!
674
+ //! <b>Throws</b>: If allocation
675
+ //! throws or T's copy constructor throws.
676
+ //!
677
+ //! <b>Complexity</b>: Linear to the elements x contains.
678
+ deque(const deque& x, const allocator_type &a)
679
+ : Base(a)
680
+ {
681
+ if(x.size()){
682
+ this->priv_initialize_map(x.size());
683
+ boost::container::uninitialized_copy_alloc
684
+ (this->alloc(), x.begin(), x.end(), this->members_.m_start);
685
+ }
686
+ }
687
+
688
+ //! <b>Effects</b>: Move constructor using the specified allocator.
689
+ //! Moves mx's resources to *this if a == allocator_type().
690
+ //! Otherwise copies values from x to *this.
691
+ //!
692
+ //! <b>Throws</b>: If allocation or T's copy constructor throws.
693
+ //!
694
+ //! <b>Complexity</b>: Constant if a == mx.get_allocator(), linear otherwise.
695
+ deque(BOOST_RV_REF(deque) mx, const allocator_type &a)
696
+ : Base(a)
697
+ {
698
+ if(mx.alloc() == a){
699
+ this->swap_members(mx);
700
+ }
701
+ else{
702
+ if(mx.size()){
703
+ this->priv_initialize_map(mx.size());
704
+ boost::container::uninitialized_copy_alloc
705
+ (this->alloc(), mx.begin(), mx.end(), this->members_.m_start);
706
+ }
707
+ }
708
+ }
709
+
710
+ //! <b>Effects</b>: Destroys the deque. All stored values are destroyed
711
+ //! and used memory is deallocated.
712
+ //!
713
+ //! <b>Throws</b>: Nothing.
714
+ //!
715
+ //! <b>Complexity</b>: Linear to the number of elements.
716
+ ~deque() BOOST_CONTAINER_NOEXCEPT
717
+ {
718
+ this->priv_destroy_range(this->members_.m_start, this->members_.m_finish);
719
+ }
720
+
721
+ //! <b>Effects</b>: Makes *this contain the same elements as x.
722
+ //!
723
+ //! <b>Postcondition</b>: this->size() == x.size(). *this contains a copy
724
+ //! of each of x's elements.
725
+ //!
726
+ //! <b>Throws</b>: If memory allocation throws or T's copy constructor throws.
727
+ //!
728
+ //! <b>Complexity</b>: Linear to the number of elements in x.
729
+ deque& operator= (BOOST_COPY_ASSIGN_REF(deque) x)
730
+ {
731
+ if (&x != this){
732
+ allocator_type &this_alloc = this->alloc();
733
+ const allocator_type &x_alloc = x.alloc();
734
+ container_detail::bool_<allocator_traits_type::
735
+ propagate_on_container_copy_assignment::value> flag;
736
+ if(flag && this_alloc != x_alloc){
737
+ this->clear();
738
+ this->shrink_to_fit();
739
+ }
740
+ container_detail::assign_alloc(this->alloc(), x.alloc(), flag);
741
+ container_detail::assign_alloc(this->ptr_alloc(), x.ptr_alloc(), flag);
742
+ this->assign(x.cbegin(), x.cend());
743
+ }
744
+ return *this;
745
+ }
746
+
747
+ //! <b>Effects</b>: Move assignment. All mx's values are transferred to *this.
748
+ //!
749
+ //! <b>Postcondition</b>: x.empty(). *this contains a the elements x had
750
+ //! before the function.
751
+ //!
752
+ //! <b>Throws</b>: If allocator_type's copy constructor throws.
753
+ //!
754
+ //! <b>Complexity</b>: Linear.
755
+ deque& operator= (BOOST_RV_REF(deque) x)
756
+ {
757
+ if (&x != this){
758
+ allocator_type &this_alloc = this->alloc();
759
+ allocator_type &x_alloc = x.alloc();
760
+ //If allocators are equal we can just swap pointers
761
+ if(this_alloc == x_alloc){
762
+ //Destroy objects but retain memory in case x reuses it in the future
763
+ this->clear();
764
+ this->swap_members(x);
765
+ //Move allocator if needed
766
+ container_detail::bool_<allocator_traits_type::
767
+ propagate_on_container_move_assignment::value> flag;
768
+ container_detail::move_alloc(this_alloc, x_alloc, flag);
769
+ container_detail::move_alloc(this->ptr_alloc(), x.ptr_alloc(), flag);
770
+ }
771
+ //If unequal allocators, then do a one by one move
772
+ else{
773
+ typedef typename std::iterator_traits<iterator>::iterator_category ItCat;
774
+ this->assign( boost::make_move_iterator(x.begin())
775
+ , boost::make_move_iterator(x.end()));
776
+ }
777
+ }
778
+ return *this;
779
+ }
780
+
781
+ //! <b>Effects</b>: Assigns the n copies of val to *this.
782
+ //!
783
+ //! <b>Throws</b>: If memory allocation throws or T's copy constructor throws.
784
+ //!
785
+ //! <b>Complexity</b>: Linear to n.
786
+ void assign(size_type n, const T& val)
787
+ {
788
+ typedef constant_iterator<value_type, difference_type> c_it;
789
+ this->assign(c_it(val, n), c_it());
790
+ }
791
+
792
+ //! <b>Effects</b>: Assigns the the range [first, last) to *this.
793
+ //!
794
+ //! <b>Throws</b>: If memory allocation throws or
795
+ //! T's constructor from dereferencing InIt throws.
796
+ //!
797
+ //! <b>Complexity</b>: Linear to n.
798
+ template <class InIt>
799
+ void assign(InIt first, InIt last
800
+ #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
801
+ , typename container_detail::enable_if_c
802
+ < !container_detail::is_convertible<InIt, size_type>::value
803
+ && container_detail::is_input_iterator<InIt>::value
804
+ >::type * = 0
805
+ #endif
806
+ )
807
+ {
808
+ iterator cur = this->begin();
809
+ for ( ; first != last && cur != end(); ++cur, ++first){
810
+ *cur = *first;
811
+ }
812
+ if (first == last){
813
+ this->erase(cur, this->cend());
814
+ }
815
+ else{
816
+ this->insert(this->cend(), first, last);
817
+ }
818
+ }
819
+
820
+ #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
821
+ template <class FwdIt>
822
+ void assign(FwdIt first, FwdIt last
823
+ , typename container_detail::enable_if_c
824
+ < !container_detail::is_convertible<FwdIt, size_type>::value
825
+ && !container_detail::is_input_iterator<FwdIt>::value
826
+ >::type * = 0
827
+ )
828
+ {
829
+ const size_type len = std::distance(first, last);
830
+ if (len > size()) {
831
+ FwdIt mid = first;
832
+ std::advance(mid, this->size());
833
+ boost::container::copy(first, mid, begin());
834
+ this->insert(this->cend(), mid, last);
835
+ }
836
+ else{
837
+ this->erase(boost::container::copy(first, last, this->begin()), cend());
838
+ }
839
+ }
840
+ #endif
841
+
842
+ //! <b>Effects</b>: Returns a copy of the internal allocator.
843
+ //!
844
+ //! <b>Throws</b>: If allocator's copy constructor throws.
845
+ //!
846
+ //! <b>Complexity</b>: Constant.
847
+ allocator_type get_allocator() const BOOST_CONTAINER_NOEXCEPT
848
+ { return Base::alloc(); }
849
+
850
+ //! <b>Effects</b>: Returns a reference to the internal allocator.
851
+ //!
852
+ //! <b>Throws</b>: Nothing
853
+ //!
854
+ //! <b>Complexity</b>: Constant.
855
+ //!
856
+ //! <b>Note</b>: Non-standard extension.
857
+ const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT
858
+ { return Base::alloc(); }
859
+
860
+ //////////////////////////////////////////////
861
+ //
862
+ // iterators
863
+ //
864
+ //////////////////////////////////////////////
865
+
866
+ //! <b>Effects</b>: Returns a reference to the internal allocator.
867
+ //!
868
+ //! <b>Throws</b>: Nothing
869
+ //!
870
+ //! <b>Complexity</b>: Constant.
871
+ //!
872
+ //! <b>Note</b>: Non-standard extension.
873
+ stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT
874
+ { return Base::alloc(); }
875
+
876
+ //! <b>Effects</b>: Returns an iterator to the first element contained in the deque.
877
+ //!
878
+ //! <b>Throws</b>: Nothing.
879
+ //!
880
+ //! <b>Complexity</b>: Constant.
881
+ iterator begin() BOOST_CONTAINER_NOEXCEPT
882
+ { return this->members_.m_start; }
883
+
884
+ //! <b>Effects</b>: Returns a const_iterator to the first element contained in the deque.
885
+ //!
886
+ //! <b>Throws</b>: Nothing.
887
+ //!
888
+ //! <b>Complexity</b>: Constant.
889
+ const_iterator begin() const BOOST_CONTAINER_NOEXCEPT
890
+ { return this->members_.m_start; }
891
+
892
+ //! <b>Effects</b>: Returns an iterator to the end of the deque.
893
+ //!
894
+ //! <b>Throws</b>: Nothing.
895
+ //!
896
+ //! <b>Complexity</b>: Constant.
897
+ iterator end() BOOST_CONTAINER_NOEXCEPT
898
+ { return this->members_.m_finish; }
899
+
900
+ //! <b>Effects</b>: Returns a const_iterator to the end of the deque.
901
+ //!
902
+ //! <b>Throws</b>: Nothing.
903
+ //!
904
+ //! <b>Complexity</b>: Constant.
905
+ const_iterator end() const BOOST_CONTAINER_NOEXCEPT
906
+ { return this->members_.m_finish; }
907
+
908
+ //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning
909
+ //! of the reversed deque.
910
+ //!
911
+ //! <b>Throws</b>: Nothing.
912
+ //!
913
+ //! <b>Complexity</b>: Constant.
914
+ reverse_iterator rbegin() BOOST_CONTAINER_NOEXCEPT
915
+ { return reverse_iterator(this->members_.m_finish); }
916
+
917
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
918
+ //! of the reversed deque.
919
+ //!
920
+ //! <b>Throws</b>: Nothing.
921
+ //!
922
+ //! <b>Complexity</b>: Constant.
923
+ const_reverse_iterator rbegin() const BOOST_CONTAINER_NOEXCEPT
924
+ { return const_reverse_iterator(this->members_.m_finish); }
925
+
926
+ //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
927
+ //! of the reversed deque.
928
+ //!
929
+ //! <b>Throws</b>: Nothing.
930
+ //!
931
+ //! <b>Complexity</b>: Constant.
932
+ reverse_iterator rend() BOOST_CONTAINER_NOEXCEPT
933
+ { return reverse_iterator(this->members_.m_start); }
934
+
935
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
936
+ //! of the reversed deque.
937
+ //!
938
+ //! <b>Throws</b>: Nothing.
939
+ //!
940
+ //! <b>Complexity</b>: Constant.
941
+ const_reverse_iterator rend() const BOOST_CONTAINER_NOEXCEPT
942
+ { return const_reverse_iterator(this->members_.m_start); }
943
+
944
+ //! <b>Effects</b>: Returns a const_iterator to the first element contained in the deque.
945
+ //!
946
+ //! <b>Throws</b>: Nothing.
947
+ //!
948
+ //! <b>Complexity</b>: Constant.
949
+ const_iterator cbegin() const BOOST_CONTAINER_NOEXCEPT
950
+ { return this->members_.m_start; }
951
+
952
+ //! <b>Effects</b>: Returns a const_iterator to the end of the deque.
953
+ //!
954
+ //! <b>Throws</b>: Nothing.
955
+ //!
956
+ //! <b>Complexity</b>: Constant.
957
+ const_iterator cend() const BOOST_CONTAINER_NOEXCEPT
958
+ { return this->members_.m_finish; }
959
+
960
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
961
+ //! of the reversed deque.
962
+ //!
963
+ //! <b>Throws</b>: Nothing.
964
+ //!
965
+ //! <b>Complexity</b>: Constant.
966
+ const_reverse_iterator crbegin() const BOOST_CONTAINER_NOEXCEPT
967
+ { return const_reverse_iterator(this->members_.m_finish); }
968
+
969
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
970
+ //! of the reversed deque.
971
+ //!
972
+ //! <b>Throws</b>: Nothing.
973
+ //!
974
+ //! <b>Complexity</b>: Constant.
975
+ const_reverse_iterator crend() const BOOST_CONTAINER_NOEXCEPT
976
+ { return const_reverse_iterator(this->members_.m_start); }
977
+
978
+ //////////////////////////////////////////////
979
+ //
980
+ // capacity
981
+ //
982
+ //////////////////////////////////////////////
983
+
984
+ //! <b>Effects</b>: Returns true if the deque contains no elements.
985
+ //!
986
+ //! <b>Throws</b>: Nothing.
987
+ //!
988
+ //! <b>Complexity</b>: Constant.
989
+ bool empty() const BOOST_CONTAINER_NOEXCEPT
990
+ { return this->members_.m_finish == this->members_.m_start; }
991
+
992
+ //! <b>Effects</b>: Returns the number of the elements contained in the deque.
993
+ //!
994
+ //! <b>Throws</b>: Nothing.
995
+ //!
996
+ //! <b>Complexity</b>: Constant.
997
+ size_type size() const BOOST_CONTAINER_NOEXCEPT
998
+ { return this->members_.m_finish - this->members_.m_start; }
999
+
1000
+ //! <b>Effects</b>: Returns the largest possible size of the deque.
1001
+ //!
1002
+ //! <b>Throws</b>: Nothing.
1003
+ //!
1004
+ //! <b>Complexity</b>: Constant.
1005
+ size_type max_size() const BOOST_CONTAINER_NOEXCEPT
1006
+ { return allocator_traits_type::max_size(this->alloc()); }
1007
+
1008
+ //! <b>Effects</b>: Inserts or erases elements at the end such that
1009
+ //! the size becomes n. New elements are default constructed.
1010
+ //!
1011
+ //! <b>Throws</b>: If memory allocation throws, or T's copy constructor throws.
1012
+ //!
1013
+ //! <b>Complexity</b>: Linear to the difference between size() and new_size.
1014
+ void resize(size_type new_size)
1015
+ {
1016
+ const size_type len = size();
1017
+ if (new_size < len)
1018
+ this->priv_erase_last_n(len - new_size);
1019
+ else{
1020
+ const size_type n = new_size - this->size();
1021
+ container_detail::insert_default_constructed_n_proxy<Allocator, iterator> proxy(this->alloc());
1022
+ priv_insert_back_aux_impl(n, proxy);
1023
+ }
1024
+ }
1025
+
1026
+ //! <b>Effects</b>: Inserts or erases elements at the end such that
1027
+ //! the size becomes n. New elements are copy constructed from x.
1028
+ //!
1029
+ //! <b>Throws</b>: If memory allocation throws, or T's copy constructor throws.
1030
+ //!
1031
+ //! <b>Complexity</b>: Linear to the difference between size() and new_size.
1032
+ void resize(size_type new_size, const value_type& x)
1033
+ {
1034
+ const size_type len = size();
1035
+ if (new_size < len)
1036
+ this->erase(this->members_.m_start + new_size, this->members_.m_finish);
1037
+ else
1038
+ this->insert(this->members_.m_finish, new_size - len, x);
1039
+ }
1040
+
1041
+ //! <b>Effects</b>: Tries to deallocate the excess of memory created
1042
+ //! with previous allocations. The size of the deque is unchanged
1043
+ //!
1044
+ //! <b>Throws</b>: If memory allocation throws.
1045
+ //!
1046
+ //! <b>Complexity</b>: Constant.
1047
+ void shrink_to_fit()
1048
+ {
1049
+ //This deque implementation already
1050
+ //deallocates excess nodes when erasing
1051
+ //so there is nothing to do except for
1052
+ //empty deque
1053
+ if(this->empty()){
1054
+ this->priv_clear_map();
1055
+ }
1056
+ }
1057
+
1058
+ //////////////////////////////////////////////
1059
+ //
1060
+ // element access
1061
+ //
1062
+ //////////////////////////////////////////////
1063
+
1064
+ //! <b>Requires</b>: !empty()
1065
+ //!
1066
+ //! <b>Effects</b>: Returns a reference to the first
1067
+ //! element of the container.
1068
+ //!
1069
+ //! <b>Throws</b>: Nothing.
1070
+ //!
1071
+ //! <b>Complexity</b>: Constant.
1072
+ reference front() BOOST_CONTAINER_NOEXCEPT
1073
+ { return *this->members_.m_start; }
1074
+
1075
+ //! <b>Requires</b>: !empty()
1076
+ //!
1077
+ //! <b>Effects</b>: Returns a const reference to the first element
1078
+ //! from the beginning of the container.
1079
+ //!
1080
+ //! <b>Throws</b>: Nothing.
1081
+ //!
1082
+ //! <b>Complexity</b>: Constant.
1083
+ const_reference front() const BOOST_CONTAINER_NOEXCEPT
1084
+ { return *this->members_.m_start; }
1085
+
1086
+ //! <b>Requires</b>: !empty()
1087
+ //!
1088
+ //! <b>Effects</b>: Returns a reference to the last
1089
+ //! element of the container.
1090
+ //!
1091
+ //! <b>Throws</b>: Nothing.
1092
+ //!
1093
+ //! <b>Complexity</b>: Constant.
1094
+ reference back() BOOST_CONTAINER_NOEXCEPT
1095
+ { return *(end()-1); }
1096
+
1097
+ //! <b>Requires</b>: !empty()
1098
+ //!
1099
+ //! <b>Effects</b>: Returns a const reference to the last
1100
+ //! element of the container.
1101
+ //!
1102
+ //! <b>Throws</b>: Nothing.
1103
+ //!
1104
+ //! <b>Complexity</b>: Constant.
1105
+ const_reference back() const BOOST_CONTAINER_NOEXCEPT
1106
+ { return *(cend()-1); }
1107
+
1108
+ //! <b>Requires</b>: size() > n.
1109
+ //!
1110
+ //! <b>Effects</b>: Returns a reference to the nth element
1111
+ //! from the beginning of the container.
1112
+ //!
1113
+ //! <b>Throws</b>: Nothing.
1114
+ //!
1115
+ //! <b>Complexity</b>: Constant.
1116
+ reference operator[](size_type n) BOOST_CONTAINER_NOEXCEPT
1117
+ { return this->members_.m_start[difference_type(n)]; }
1118
+
1119
+ //! <b>Requires</b>: size() > n.
1120
+ //!
1121
+ //! <b>Effects</b>: Returns a const reference to the nth element
1122
+ //! from the beginning of the container.
1123
+ //!
1124
+ //! <b>Throws</b>: Nothing.
1125
+ //!
1126
+ //! <b>Complexity</b>: Constant.
1127
+ const_reference operator[](size_type n) const BOOST_CONTAINER_NOEXCEPT
1128
+ { return this->members_.m_start[difference_type(n)]; }
1129
+
1130
+ //! <b>Requires</b>: size() > n.
1131
+ //!
1132
+ //! <b>Effects</b>: Returns a reference to the nth element
1133
+ //! from the beginning of the container.
1134
+ //!
1135
+ //! <b>Throws</b>: std::range_error if n >= size()
1136
+ //!
1137
+ //! <b>Complexity</b>: Constant.
1138
+ reference at(size_type n)
1139
+ { this->priv_range_check(n); return (*this)[n]; }
1140
+
1141
+ //! <b>Requires</b>: size() > n.
1142
+ //!
1143
+ //! <b>Effects</b>: Returns a const reference to the nth element
1144
+ //! from the beginning of the container.
1145
+ //!
1146
+ //! <b>Throws</b>: std::range_error if n >= size()
1147
+ //!
1148
+ //! <b>Complexity</b>: Constant.
1149
+ const_reference at(size_type n) const
1150
+ { this->priv_range_check(n); return (*this)[n]; }
1151
+
1152
+ //////////////////////////////////////////////
1153
+ //
1154
+ // modifiers
1155
+ //
1156
+ //////////////////////////////////////////////
1157
+
1158
+ #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1159
+
1160
+ //! <b>Effects</b>: Inserts an object of type T constructed with
1161
+ //! std::forward<Args>(args)... in the beginning of the deque.
1162
+ //!
1163
+ //! <b>Throws</b>: If memory allocation throws or the in-place constructor throws.
1164
+ //!
1165
+ //! <b>Complexity</b>: Amortized constant time
1166
+ template <class... Args>
1167
+ void emplace_front(Args&&... args)
1168
+ {
1169
+ if(this->priv_push_front_simple_available()){
1170
+ allocator_traits_type::construct
1171
+ ( this->alloc()
1172
+ , this->priv_push_front_simple_pos()
1173
+ , boost::forward<Args>(args)...);
1174
+ this->priv_push_front_simple_commit();
1175
+ }
1176
+ else{
1177
+ typedef container_detail::insert_non_movable_emplace_proxy<Allocator, iterator, Args...> type;
1178
+ this->priv_insert_front_aux_impl(1, type(this->alloc(), boost::forward<Args>(args)...));
1179
+ }
1180
+ }
1181
+
1182
+ //! <b>Effects</b>: Inserts an object of type T constructed with
1183
+ //! std::forward<Args>(args)... in the end of the deque.
1184
+ //!
1185
+ //! <b>Throws</b>: If memory allocation throws or the in-place constructor throws.
1186
+ //!
1187
+ //! <b>Complexity</b>: Amortized constant time
1188
+ template <class... Args>
1189
+ void emplace_back(Args&&... args)
1190
+ {
1191
+ if(this->priv_push_back_simple_available()){
1192
+ allocator_traits_type::construct
1193
+ ( this->alloc()
1194
+ , this->priv_push_back_simple_pos()
1195
+ , boost::forward<Args>(args)...);
1196
+ this->priv_push_back_simple_commit();
1197
+ }
1198
+ else{
1199
+ typedef container_detail::insert_non_movable_emplace_proxy<Allocator, iterator, Args...> type;
1200
+ this->priv_insert_back_aux_impl(1, type(this->alloc(), boost::forward<Args>(args)...));
1201
+ }
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 p, Args&&... args)
1215
+ {
1216
+ if(p == this->cbegin()){
1217
+ this->emplace_front(boost::forward<Args>(args)...);
1218
+ return this->begin();
1219
+ }
1220
+ else if(p == this->cend()){
1221
+ this->emplace_back(boost::forward<Args>(args)...);
1222
+ return (this->end()-1);
1223
+ }
1224
+ else{
1225
+ typedef container_detail::insert_emplace_proxy<Allocator, iterator, Args...> type;
1226
+ return this->priv_insert_aux_impl(p, 1, type(this->alloc(), boost::forward<Args>(args)...));
1227
+ }
1228
+ }
1229
+
1230
+ #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING
1231
+
1232
+ //advanced_insert_int.hpp includes all necessary preprocessor machinery...
1233
+ #define BOOST_PP_LOCAL_MACRO(n) \
1234
+ BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, > ) \
1235
+ void emplace_front(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \
1236
+ { \
1237
+ if(priv_push_front_simple_available()){ \
1238
+ allocator_traits_type::construct \
1239
+ ( this->alloc() \
1240
+ , this->priv_push_front_simple_pos() \
1241
+ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \
1242
+ priv_push_front_simple_commit(); \
1243
+ } \
1244
+ else{ \
1245
+ container_detail::BOOST_PP_CAT(insert_non_movable_emplace_proxy_arg, n) \
1246
+ <Allocator, iterator BOOST_PP_ENUM_TRAILING_PARAMS(n, P)> proxy \
1247
+ (this->alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \
1248
+ priv_insert_front_aux_impl(1, proxy); \
1249
+ } \
1250
+ } \
1251
+ \
1252
+ BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \
1253
+ void emplace_back(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \
1254
+ { \
1255
+ if(priv_push_back_simple_available()){ \
1256
+ allocator_traits_type::construct \
1257
+ ( this->alloc() \
1258
+ , this->priv_push_back_simple_pos() \
1259
+ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \
1260
+ priv_push_back_simple_commit(); \
1261
+ } \
1262
+ else{ \
1263
+ container_detail::BOOST_PP_CAT(insert_non_movable_emplace_proxy_arg, n) \
1264
+ <Allocator, iterator BOOST_PP_ENUM_TRAILING_PARAMS(n, P)> proxy \
1265
+ (this->alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \
1266
+ priv_insert_back_aux_impl(1, proxy); \
1267
+ } \
1268
+ } \
1269
+ \
1270
+ BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \
1271
+ iterator emplace(const_iterator p \
1272
+ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \
1273
+ { \
1274
+ if(p == this->cbegin()){ \
1275
+ this->emplace_front(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \
1276
+ return this->begin(); \
1277
+ } \
1278
+ else if(p == cend()){ \
1279
+ this->emplace_back(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \
1280
+ return (this->end()-1); \
1281
+ } \
1282
+ else{ \
1283
+ container_detail::BOOST_PP_CAT(insert_emplace_proxy_arg, n) \
1284
+ <Allocator, iterator BOOST_PP_ENUM_TRAILING_PARAMS(n, P)> proxy \
1285
+ (this->alloc() BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); \
1286
+ return this->priv_insert_aux_impl(p, 1, proxy); \
1287
+ } \
1288
+ } \
1289
+ //!
1290
+ #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
1291
+ #include BOOST_PP_LOCAL_ITERATE()
1292
+
1293
+ #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING
1294
+
1295
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1296
+ //! <b>Effects</b>: Inserts a copy of x at the front of the deque.
1297
+ //!
1298
+ //! <b>Throws</b>: If memory allocation throws or
1299
+ //! T's copy constructor throws.
1300
+ //!
1301
+ //! <b>Complexity</b>: Amortized constant time.
1302
+ void push_front(const T &x);
1303
+
1304
+ //! <b>Effects</b>: Constructs a new element in the front of the deque
1305
+ //! and moves the resources of mx to this new element.
1306
+ //!
1307
+ //! <b>Throws</b>: If memory allocation throws.
1308
+ //!
1309
+ //! <b>Complexity</b>: Amortized constant time.
1310
+ void push_front(T &&x);
1311
+ #else
1312
+ BOOST_MOVE_CONVERSION_AWARE_CATCH(push_front, T, void, priv_push_front)
1313
+ #endif
1314
+
1315
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1316
+ //! <b>Effects</b>: Inserts a copy of x at the end of the deque.
1317
+ //!
1318
+ //! <b>Throws</b>: If memory allocation throws or
1319
+ //! T's copy constructor throws.
1320
+ //!
1321
+ //! <b>Complexity</b>: Amortized constant time.
1322
+ void push_back(const T &x);
1323
+
1324
+ //! <b>Effects</b>: Constructs a new element in the end of the deque
1325
+ //! and moves the resources of mx to this new element.
1326
+ //!
1327
+ //! <b>Throws</b>: If memory allocation throws.
1328
+ //!
1329
+ //! <b>Complexity</b>: Amortized constant time.
1330
+ void push_back(T &&x);
1331
+ #else
1332
+ BOOST_MOVE_CONVERSION_AWARE_CATCH(push_back, T, void, priv_push_back)
1333
+ #endif
1334
+
1335
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1336
+
1337
+ //! <b>Requires</b>: position must be a valid iterator of *this.
1338
+ //!
1339
+ //! <b>Effects</b>: Insert a copy of x before position.
1340
+ //!
1341
+ //! <b>Returns</b>: an iterator to the inserted element.
1342
+ //!
1343
+ //! <b>Throws</b>: If memory allocation throws or x's copy constructor throws.
1344
+ //!
1345
+ //! <b>Complexity</b>: If position is end(), amortized constant time
1346
+ //! Linear time otherwise.
1347
+ iterator insert(const_iterator position, const T &x);
1348
+
1349
+ //! <b>Requires</b>: position must be a valid iterator of *this.
1350
+ //!
1351
+ //! <b>Effects</b>: Insert a new element before position with mx's resources.
1352
+ //!
1353
+ //! <b>Returns</b>: an iterator to the inserted element.
1354
+ //!
1355
+ //! <b>Throws</b>: If memory allocation throws.
1356
+ //!
1357
+ //! <b>Complexity</b>: If position is end(), amortized constant time
1358
+ //! Linear time otherwise.
1359
+ iterator insert(const_iterator position, T &&x);
1360
+ #else
1361
+ BOOST_MOVE_CONVERSION_AWARE_CATCH_1ARG(insert, T, iterator, priv_insert, const_iterator)
1362
+ #endif
1363
+
1364
+ //! <b>Requires</b>: pos must be a valid iterator of *this.
1365
+ //!
1366
+ //! <b>Effects</b>: Insert n copies of x before pos.
1367
+ //!
1368
+ //! <b>Returns</b>: an iterator to the first inserted element or pos if n is 0.
1369
+ //!
1370
+ //! <b>Throws</b>: If memory allocation throws or T's copy constructor throws.
1371
+ //!
1372
+ //! <b>Complexity</b>: Linear to n.
1373
+ iterator insert(const_iterator pos, size_type n, const value_type& x)
1374
+ {
1375
+ typedef constant_iterator<value_type, difference_type> c_it;
1376
+ return this->insert(pos, c_it(x, n), c_it());
1377
+ }
1378
+
1379
+ //! <b>Requires</b>: pos must be a valid iterator of *this.
1380
+ //!
1381
+ //! <b>Effects</b>: Insert a copy of the [first, last) range before pos.
1382
+ //!
1383
+ //! <b>Returns</b>: an iterator to the first inserted element or pos if first == last.
1384
+ //!
1385
+ //! <b>Throws</b>: If memory allocation throws, T's constructor from a
1386
+ //! dereferenced InIt throws or T's copy constructor throws.
1387
+ //!
1388
+ //! <b>Complexity</b>: Linear to std::distance [first, last).
1389
+ template <class InIt>
1390
+ iterator insert(const_iterator pos, InIt first, InIt last
1391
+ #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1392
+ , typename container_detail::enable_if_c
1393
+ < !container_detail::is_convertible<InIt, size_type>::value
1394
+ && container_detail::is_input_iterator<InIt>::value
1395
+ >::type * = 0
1396
+ #endif
1397
+ )
1398
+ {
1399
+ size_type n = 0;
1400
+ iterator it(pos);
1401
+ for(;first != last; ++first, ++n){
1402
+ it = this->emplace(it, *first);
1403
+ ++it;
1404
+ }
1405
+ it -= n;
1406
+ return it;
1407
+ }
1408
+
1409
+ #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1410
+ template <class FwdIt>
1411
+ iterator insert(const_iterator p, FwdIt first, FwdIt last
1412
+ #if !defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1413
+ , typename container_detail::enable_if_c
1414
+ < !container_detail::is_convertible<FwdIt, size_type>::value
1415
+ && !container_detail::is_input_iterator<FwdIt>::value
1416
+ >::type * = 0
1417
+ #endif
1418
+ )
1419
+ {
1420
+ container_detail::insert_range_proxy<Allocator, FwdIt, iterator> proxy(this->alloc(), first);
1421
+ return priv_insert_aux_impl(p, (size_type)std::distance(first, last), proxy);
1422
+ }
1423
+ #endif
1424
+
1425
+ //! <b>Effects</b>: Removes the first element from the deque.
1426
+ //!
1427
+ //! <b>Throws</b>: Nothing.
1428
+ //!
1429
+ //! <b>Complexity</b>: Constant time.
1430
+ void pop_front() BOOST_CONTAINER_NOEXCEPT
1431
+ {
1432
+ if (this->members_.m_start.m_cur != this->members_.m_start.m_last - 1) {
1433
+ allocator_traits_type::destroy
1434
+ ( this->alloc()
1435
+ , container_detail::to_raw_pointer(this->members_.m_start.m_cur)
1436
+ );
1437
+ ++this->members_.m_start.m_cur;
1438
+ }
1439
+ else
1440
+ this->priv_pop_front_aux();
1441
+ }
1442
+
1443
+ //! <b>Effects</b>: Removes the last element from the deque.
1444
+ //!
1445
+ //! <b>Throws</b>: Nothing.
1446
+ //!
1447
+ //! <b>Complexity</b>: Constant time.
1448
+ void pop_back() BOOST_CONTAINER_NOEXCEPT
1449
+ {
1450
+ if (this->members_.m_finish.m_cur != this->members_.m_finish.m_first) {
1451
+ --this->members_.m_finish.m_cur;
1452
+ allocator_traits_type::destroy
1453
+ ( this->alloc()
1454
+ , container_detail::to_raw_pointer(this->members_.m_finish.m_cur)
1455
+ );
1456
+ }
1457
+ else
1458
+ this->priv_pop_back_aux();
1459
+ }
1460
+
1461
+ //! <b>Effects</b>: Erases the element at position pos.
1462
+ //!
1463
+ //! <b>Throws</b>: Nothing.
1464
+ //!
1465
+ //! <b>Complexity</b>: Linear to the elements between pos and the
1466
+ //! last element (if pos is near the end) or the first element
1467
+ //! if(pos is near the beginning).
1468
+ //! Constant if pos is the first or the last element.
1469
+ iterator erase(const_iterator pos) BOOST_CONTAINER_NOEXCEPT
1470
+ {
1471
+ const_iterator next = pos;
1472
+ ++next;
1473
+ size_type index = pos - this->members_.m_start;
1474
+ if (index < (this->size()/2)) {
1475
+ boost::move_backward(begin(), iterator(pos), iterator(next));
1476
+ pop_front();
1477
+ }
1478
+ else {
1479
+ boost::move(iterator(next), end(), iterator(pos));
1480
+ pop_back();
1481
+ }
1482
+ return this->members_.m_start + index;
1483
+ }
1484
+
1485
+ //! <b>Effects</b>: Erases the elements pointed by [first, last).
1486
+ //!
1487
+ //! <b>Throws</b>: Nothing.
1488
+ //!
1489
+ //! <b>Complexity</b>: Linear to the distance between first and
1490
+ //! last plus the elements between pos and the
1491
+ //! last element (if pos is near the end) or the first element
1492
+ //! if(pos is near the beginning).
1493
+ iterator erase(const_iterator first, const_iterator last) BOOST_CONTAINER_NOEXCEPT
1494
+ {
1495
+ if (first == this->members_.m_start && last == this->members_.m_finish) {
1496
+ this->clear();
1497
+ return this->members_.m_finish;
1498
+ }
1499
+ else {
1500
+ const size_type n = static_cast<size_type>(last - first);
1501
+ const size_type elems_before = static_cast<size_type>(first - this->members_.m_start);
1502
+ if (elems_before < (this->size() - n) - elems_before) {
1503
+ boost::move_backward(begin(), iterator(first), iterator(last));
1504
+ iterator new_start = this->members_.m_start + n;
1505
+ if(!Base::traits_t::trivial_dctr_after_move)
1506
+ this->priv_destroy_range(this->members_.m_start, new_start);
1507
+ this->priv_destroy_nodes(this->members_.m_start.m_node, new_start.m_node);
1508
+ this->members_.m_start = new_start;
1509
+ }
1510
+ else {
1511
+ boost::move(iterator(last), end(), iterator(first));
1512
+ iterator new_finish = this->members_.m_finish - n;
1513
+ if(!Base::traits_t::trivial_dctr_after_move)
1514
+ this->priv_destroy_range(new_finish, this->members_.m_finish);
1515
+ this->priv_destroy_nodes(new_finish.m_node + 1, this->members_.m_finish.m_node + 1);
1516
+ this->members_.m_finish = new_finish;
1517
+ }
1518
+ return this->members_.m_start + elems_before;
1519
+ }
1520
+ }
1521
+
1522
+ //! <b>Effects</b>: Swaps the contents of *this and x.
1523
+ //!
1524
+ //! <b>Throws</b>: Nothing.
1525
+ //!
1526
+ //! <b>Complexity</b>: Constant.
1527
+ void swap(deque &x)
1528
+ {
1529
+ this->swap_members(x);
1530
+ container_detail::bool_<allocator_traits_type::propagate_on_container_swap::value> flag;
1531
+ container_detail::swap_alloc(this->alloc(), x.alloc(), flag);
1532
+ container_detail::swap_alloc(this->ptr_alloc(), x.ptr_alloc(), flag);
1533
+ }
1534
+
1535
+ //! <b>Effects</b>: Erases all the elements of the deque.
1536
+ //!
1537
+ //! <b>Throws</b>: Nothing.
1538
+ //!
1539
+ //! <b>Complexity</b>: Linear to the number of elements in the deque.
1540
+ void clear() BOOST_CONTAINER_NOEXCEPT
1541
+ {
1542
+ for (index_pointer node = this->members_.m_start.m_node + 1;
1543
+ node < this->members_.m_finish.m_node;
1544
+ ++node) {
1545
+ this->priv_destroy_range(*node, *node + this->s_buffer_size());
1546
+ this->priv_deallocate_node(*node);
1547
+ }
1548
+
1549
+ if (this->members_.m_start.m_node != this->members_.m_finish.m_node) {
1550
+ this->priv_destroy_range(this->members_.m_start.m_cur, this->members_.m_start.m_last);
1551
+ this->priv_destroy_range(this->members_.m_finish.m_first, this->members_.m_finish.m_cur);
1552
+ this->priv_deallocate_node(this->members_.m_finish.m_first);
1553
+ }
1554
+ else
1555
+ this->priv_destroy_range(this->members_.m_start.m_cur, this->members_.m_finish.m_cur);
1556
+
1557
+ this->members_.m_finish = this->members_.m_start;
1558
+ }
1559
+
1560
+ /// @cond
1561
+ private:
1562
+
1563
+ void priv_erase_last_n(size_type n)
1564
+ {
1565
+ if(n == this->size()) {
1566
+ this->clear();
1567
+ }
1568
+ else {
1569
+ iterator new_finish = this->members_.m_finish - n;
1570
+ if(!Base::traits_t::trivial_dctr_after_move)
1571
+ this->priv_destroy_range(new_finish, this->members_.m_finish);
1572
+ this->priv_destroy_nodes(new_finish.m_node + 1, this->members_.m_finish.m_node + 1);
1573
+ this->members_.m_finish = new_finish;
1574
+ }
1575
+ }
1576
+
1577
+ void priv_range_check(size_type n) const
1578
+ { if (n >= this->size()) throw_out_of_range("deque::at out of range"); }
1579
+
1580
+ template <class U>
1581
+ iterator priv_insert(const_iterator position, BOOST_FWD_REF(U) x)
1582
+ {
1583
+ if (position == cbegin()){
1584
+ this->push_front(::boost::forward<U>(x));
1585
+ return begin();
1586
+ }
1587
+ else if (position == cend()){
1588
+ this->push_back(::boost::forward<U>(x));
1589
+ return --end();
1590
+ }
1591
+ else {
1592
+ return priv_insert_aux_impl
1593
+ (position, (size_type)1, container_detail::get_insert_value_proxy<iterator>(this->alloc(), ::boost::forward<U>(x)));
1594
+ }
1595
+ }
1596
+
1597
+ template <class U>
1598
+ void priv_push_front(BOOST_FWD_REF(U) x)
1599
+ {
1600
+ if(this->priv_push_front_simple_available()){
1601
+ allocator_traits_type::construct
1602
+ ( this->alloc(), this->priv_push_front_simple_pos(), ::boost::forward<U>(x));
1603
+ this->priv_push_front_simple_commit();
1604
+ }
1605
+ else{
1606
+ priv_insert_aux_impl
1607
+ (this->cbegin(), (size_type)1, container_detail::get_insert_value_proxy<iterator>(this->alloc(), ::boost::forward<U>(x)));
1608
+ }
1609
+ }
1610
+
1611
+ template <class U>
1612
+ void priv_push_back(BOOST_FWD_REF(U) x)
1613
+ {
1614
+ if(this->priv_push_back_simple_available()){
1615
+ allocator_traits_type::construct
1616
+ ( this->alloc(), this->priv_push_back_simple_pos(), ::boost::forward<U>(x));
1617
+ this->priv_push_back_simple_commit();
1618
+ }
1619
+ else{
1620
+ priv_insert_aux_impl
1621
+ (this->cend(), (size_type)1, container_detail::get_insert_value_proxy<iterator>(this->alloc(), ::boost::forward<U>(x)));
1622
+ container_detail::insert_copy_proxy<Allocator, iterator> proxy(this->alloc(), x);
1623
+ }
1624
+ }
1625
+
1626
+ bool priv_push_back_simple_available() const
1627
+ {
1628
+ return this->members_.m_map &&
1629
+ (this->members_.m_finish.m_cur != (this->members_.m_finish.m_last - 1));
1630
+ }
1631
+
1632
+ T *priv_push_back_simple_pos() const
1633
+ {
1634
+ return container_detail::to_raw_pointer(this->members_.m_finish.m_cur);
1635
+ }
1636
+
1637
+ void priv_push_back_simple_commit()
1638
+ {
1639
+ ++this->members_.m_finish.m_cur;
1640
+ }
1641
+
1642
+ bool priv_push_front_simple_available() const
1643
+ {
1644
+ return this->members_.m_map &&
1645
+ (this->members_.m_start.m_cur != this->members_.m_start.m_first);
1646
+ }
1647
+
1648
+ T *priv_push_front_simple_pos() const
1649
+ { return container_detail::to_raw_pointer(this->members_.m_start.m_cur) - 1; }
1650
+
1651
+ void priv_push_front_simple_commit()
1652
+ { --this->members_.m_start.m_cur; }
1653
+
1654
+ void priv_destroy_range(iterator p, iterator p2)
1655
+ {
1656
+ for(;p != p2; ++p){
1657
+ allocator_traits_type::destroy
1658
+ ( this->alloc()
1659
+ , container_detail::to_raw_pointer(&*p)
1660
+ );
1661
+ }
1662
+ }
1663
+
1664
+ void priv_destroy_range(pointer p, pointer p2)
1665
+ {
1666
+ for(;p != p2; ++p){
1667
+ allocator_traits_type::destroy
1668
+ ( this->alloc()
1669
+ , container_detail::to_raw_pointer(&*p)
1670
+ );
1671
+ }
1672
+ }
1673
+
1674
+ template<class InsertProxy>
1675
+ iterator priv_insert_aux_impl(const_iterator p, size_type n, InsertProxy interf)
1676
+ {
1677
+ iterator pos(p);
1678
+ const size_type pos_n = p - this->cbegin();
1679
+ if(!this->members_.m_map){
1680
+ this->priv_initialize_map(0);
1681
+ pos = this->begin();
1682
+ }
1683
+
1684
+ const size_type elemsbefore = static_cast<size_type>(pos - this->members_.m_start);
1685
+ const size_type length = this->size();
1686
+ if (elemsbefore < length / 2) {
1687
+ const iterator new_start = this->priv_reserve_elements_at_front(n);
1688
+ const iterator old_start = this->members_.m_start;
1689
+ if(!elemsbefore){
1690
+ interf.uninitialized_copy_n_and_update(new_start, n);
1691
+ this->members_.m_start = new_start;
1692
+ }
1693
+ else{
1694
+ pos = this->members_.m_start + elemsbefore;
1695
+ if (elemsbefore >= n) {
1696
+ const iterator start_n = this->members_.m_start + n;
1697
+ ::boost::container::uninitialized_move_alloc
1698
+ (this->alloc(), this->members_.m_start, start_n, new_start);
1699
+ this->members_.m_start = new_start;
1700
+ boost::move(start_n, pos, old_start);
1701
+ interf.copy_n_and_update(pos - n, n);
1702
+ }
1703
+ else {
1704
+ const size_type mid_count = n - elemsbefore;
1705
+ const iterator mid_start = old_start - mid_count;
1706
+ interf.uninitialized_copy_n_and_update(mid_start, mid_count);
1707
+ this->members_.m_start = mid_start;
1708
+ ::boost::container::uninitialized_move_alloc
1709
+ (this->alloc(), old_start, pos, new_start);
1710
+ this->members_.m_start = new_start;
1711
+ interf.copy_n_and_update(old_start, elemsbefore);
1712
+ }
1713
+ }
1714
+ }
1715
+ else {
1716
+ const iterator new_finish = this->priv_reserve_elements_at_back(n);
1717
+ const iterator old_finish = this->members_.m_finish;
1718
+ const size_type elemsafter = length - elemsbefore;
1719
+ if(!elemsafter){
1720
+ interf.uninitialized_copy_n_and_update(old_finish, n);
1721
+ this->members_.m_finish = new_finish;
1722
+ }
1723
+ else{
1724
+ pos = old_finish - elemsafter;
1725
+ if (elemsafter >= n) {
1726
+ iterator finish_n = old_finish - difference_type(n);
1727
+ ::boost::container::uninitialized_move_alloc
1728
+ (this->alloc(), finish_n, old_finish, old_finish);
1729
+ this->members_.m_finish = new_finish;
1730
+ boost::move_backward(pos, finish_n, old_finish);
1731
+ interf.copy_n_and_update(pos, n);
1732
+ }
1733
+ else {
1734
+ const size_type raw_gap = n - elemsafter;
1735
+ ::boost::container::uninitialized_move_alloc
1736
+ (this->alloc(), pos, old_finish, old_finish + raw_gap);
1737
+ BOOST_TRY{
1738
+ interf.copy_n_and_update(pos, elemsafter);
1739
+ interf.uninitialized_copy_n_and_update(old_finish, raw_gap);
1740
+ }
1741
+ BOOST_CATCH(...){
1742
+ this->priv_destroy_range(old_finish, old_finish + elemsafter);
1743
+ BOOST_RETHROW
1744
+ }
1745
+ BOOST_CATCH_END
1746
+ this->members_.m_finish = new_finish;
1747
+ }
1748
+ }
1749
+ }
1750
+ return this->begin() + pos_n;
1751
+ }
1752
+
1753
+ template <class InsertProxy>
1754
+ iterator priv_insert_back_aux_impl(size_type n, InsertProxy interf)
1755
+ {
1756
+ if(!this->members_.m_map){
1757
+ this->priv_initialize_map(0);
1758
+ }
1759
+
1760
+ iterator new_finish = this->priv_reserve_elements_at_back(n);
1761
+ iterator old_finish = this->members_.m_finish;
1762
+ interf.uninitialized_copy_n_and_update(old_finish, n);
1763
+ this->members_.m_finish = new_finish;
1764
+ return iterator(this->members_.m_finish - n);
1765
+ }
1766
+
1767
+ template <class InsertProxy>
1768
+ iterator priv_insert_front_aux_impl(size_type n, InsertProxy interf)
1769
+ {
1770
+ if(!this->members_.m_map){
1771
+ this->priv_initialize_map(0);
1772
+ }
1773
+
1774
+ iterator new_start = this->priv_reserve_elements_at_front(n);
1775
+ interf.uninitialized_copy_n_and_update(new_start, n);
1776
+ this->members_.m_start = new_start;
1777
+ return new_start;
1778
+ }
1779
+
1780
+ iterator priv_fill_insert(const_iterator pos, size_type n, const value_type& x)
1781
+ {
1782
+ typedef constant_iterator<value_type, difference_type> c_it;
1783
+ return this->insert(pos, c_it(x, n), c_it());
1784
+ }
1785
+
1786
+ // Precondition: this->members_.m_start and this->members_.m_finish have already been initialized,
1787
+ // but none of the deque's elements have yet been constructed.
1788
+ void priv_fill_initialize(const value_type& value)
1789
+ {
1790
+ index_pointer cur;
1791
+ BOOST_TRY {
1792
+ for (cur = this->members_.m_start.m_node; cur < this->members_.m_finish.m_node; ++cur){
1793
+ boost::container::uninitialized_fill_alloc
1794
+ (this->alloc(), *cur, *cur + this->s_buffer_size(), value);
1795
+ }
1796
+ boost::container::uninitialized_fill_alloc
1797
+ (this->alloc(), this->members_.m_finish.m_first, this->members_.m_finish.m_cur, value);
1798
+ }
1799
+ BOOST_CATCH(...){
1800
+ this->priv_destroy_range(this->members_.m_start, iterator(*cur, cur));
1801
+ BOOST_RETHROW
1802
+ }
1803
+ BOOST_CATCH_END
1804
+ }
1805
+
1806
+ template <class InIt>
1807
+ void priv_range_initialize(InIt first, InIt last, std::input_iterator_tag)
1808
+ {
1809
+ this->priv_initialize_map(0);
1810
+ BOOST_TRY {
1811
+ for ( ; first != last; ++first)
1812
+ this->emplace_back(*first);
1813
+ }
1814
+ BOOST_CATCH(...){
1815
+ this->clear();
1816
+ BOOST_RETHROW
1817
+ }
1818
+ BOOST_CATCH_END
1819
+ }
1820
+
1821
+ template <class FwdIt>
1822
+ void priv_range_initialize(FwdIt first, FwdIt last, std::forward_iterator_tag)
1823
+ {
1824
+ size_type n = 0;
1825
+ n = std::distance(first, last);
1826
+ this->priv_initialize_map(n);
1827
+
1828
+ index_pointer cur_node;
1829
+ BOOST_TRY {
1830
+ for (cur_node = this->members_.m_start.m_node;
1831
+ cur_node < this->members_.m_finish.m_node;
1832
+ ++cur_node) {
1833
+ FwdIt mid = first;
1834
+ std::advance(mid, this->s_buffer_size());
1835
+ ::boost::container::uninitialized_copy_alloc(this->alloc(), first, mid, *cur_node);
1836
+ first = mid;
1837
+ }
1838
+ ::boost::container::uninitialized_copy_alloc(this->alloc(), first, last, this->members_.m_finish.m_first);
1839
+ }
1840
+ BOOST_CATCH(...){
1841
+ this->priv_destroy_range(this->members_.m_start, iterator(*cur_node, cur_node));
1842
+ BOOST_RETHROW
1843
+ }
1844
+ BOOST_CATCH_END
1845
+ }
1846
+
1847
+ // Called only if this->members_.m_finish.m_cur == this->members_.m_finish.m_first.
1848
+ void priv_pop_back_aux()
1849
+ {
1850
+ this->priv_deallocate_node(this->members_.m_finish.m_first);
1851
+ this->members_.m_finish.priv_set_node(this->members_.m_finish.m_node - 1);
1852
+ this->members_.m_finish.m_cur = this->members_.m_finish.m_last - 1;
1853
+ allocator_traits_type::destroy
1854
+ ( this->alloc()
1855
+ , container_detail::to_raw_pointer(this->members_.m_finish.m_cur)
1856
+ );
1857
+ }
1858
+
1859
+ // Called only if this->members_.m_start.m_cur == this->members_.m_start.m_last - 1. Note that
1860
+ // if the deque has at least one element (a precondition for this member
1861
+ // function), and if this->members_.m_start.m_cur == this->members_.m_start.m_last, then the deque
1862
+ // must have at least two nodes.
1863
+ void priv_pop_front_aux()
1864
+ {
1865
+ allocator_traits_type::destroy
1866
+ ( this->alloc()
1867
+ , container_detail::to_raw_pointer(this->members_.m_start.m_cur)
1868
+ );
1869
+ this->priv_deallocate_node(this->members_.m_start.m_first);
1870
+ this->members_.m_start.priv_set_node(this->members_.m_start.m_node + 1);
1871
+ this->members_.m_start.m_cur = this->members_.m_start.m_first;
1872
+ }
1873
+
1874
+ iterator priv_reserve_elements_at_front(size_type n)
1875
+ {
1876
+ size_type vacancies = this->members_.m_start.m_cur - this->members_.m_start.m_first;
1877
+ if (n > vacancies){
1878
+ size_type new_elems = n-vacancies;
1879
+ size_type new_nodes = (new_elems + this->s_buffer_size() - 1) /
1880
+ this->s_buffer_size();
1881
+ size_type s = (size_type)(this->members_.m_start.m_node - this->members_.m_map);
1882
+ if (new_nodes > s){
1883
+ this->priv_reallocate_map(new_nodes, true);
1884
+ }
1885
+ size_type i = 1;
1886
+ BOOST_TRY {
1887
+ for (; i <= new_nodes; ++i)
1888
+ *(this->members_.m_start.m_node - i) = this->priv_allocate_node();
1889
+ }
1890
+ BOOST_CATCH(...) {
1891
+ for (size_type j = 1; j < i; ++j)
1892
+ this->priv_deallocate_node(*(this->members_.m_start.m_node - j));
1893
+ BOOST_RETHROW
1894
+ }
1895
+ BOOST_CATCH_END
1896
+ }
1897
+ return this->members_.m_start - difference_type(n);
1898
+ }
1899
+
1900
+ iterator priv_reserve_elements_at_back(size_type n)
1901
+ {
1902
+ size_type vacancies = (this->members_.m_finish.m_last - this->members_.m_finish.m_cur) - 1;
1903
+ if (n > vacancies){
1904
+ size_type new_elems = n - vacancies;
1905
+ size_type new_nodes = (new_elems + this->s_buffer_size() - 1)/s_buffer_size();
1906
+ size_type s = (size_type)(this->members_.m_map_size - (this->members_.m_finish.m_node - this->members_.m_map));
1907
+ if (new_nodes + 1 > s){
1908
+ this->priv_reallocate_map(new_nodes, false);
1909
+ }
1910
+ size_type i;
1911
+ BOOST_TRY {
1912
+ for (i = 1; i <= new_nodes; ++i)
1913
+ *(this->members_.m_finish.m_node + i) = this->priv_allocate_node();
1914
+ }
1915
+ BOOST_CATCH(...) {
1916
+ for (size_type j = 1; j < i; ++j)
1917
+ this->priv_deallocate_node(*(this->members_.m_finish.m_node + j));
1918
+ BOOST_RETHROW
1919
+ }
1920
+ BOOST_CATCH_END
1921
+ }
1922
+ return this->members_.m_finish + difference_type(n);
1923
+ }
1924
+
1925
+ void priv_reallocate_map(size_type nodes_to_add, bool add_at_front)
1926
+ {
1927
+ size_type old_num_nodes = this->members_.m_finish.m_node - this->members_.m_start.m_node + 1;
1928
+ size_type new_num_nodes = old_num_nodes + nodes_to_add;
1929
+
1930
+ index_pointer new_nstart;
1931
+ if (this->members_.m_map_size > 2 * new_num_nodes) {
1932
+ new_nstart = this->members_.m_map + (this->members_.m_map_size - new_num_nodes) / 2
1933
+ + (add_at_front ? nodes_to_add : 0);
1934
+ if (new_nstart < this->members_.m_start.m_node)
1935
+ boost::move(this->members_.m_start.m_node, this->members_.m_finish.m_node + 1, new_nstart);
1936
+ else
1937
+ boost::move_backward
1938
+ (this->members_.m_start.m_node, this->members_.m_finish.m_node + 1, new_nstart + old_num_nodes);
1939
+ }
1940
+ else {
1941
+ size_type new_map_size =
1942
+ this->members_.m_map_size + container_detail::max_value(this->members_.m_map_size, nodes_to_add) + 2;
1943
+
1944
+ index_pointer new_map = this->priv_allocate_map(new_map_size);
1945
+ new_nstart = new_map + (new_map_size - new_num_nodes) / 2
1946
+ + (add_at_front ? nodes_to_add : 0);
1947
+ boost::move(this->members_.m_start.m_node, this->members_.m_finish.m_node + 1, new_nstart);
1948
+ this->priv_deallocate_map(this->members_.m_map, this->members_.m_map_size);
1949
+
1950
+ this->members_.m_map = new_map;
1951
+ this->members_.m_map_size = new_map_size;
1952
+ }
1953
+
1954
+ this->members_.m_start.priv_set_node(new_nstart);
1955
+ this->members_.m_finish.priv_set_node(new_nstart + old_num_nodes - 1);
1956
+ }
1957
+ /// @endcond
1958
+ };
1959
+
1960
+ // Nonmember functions.
1961
+ template <class T, class Allocator>
1962
+ inline bool operator==(const deque<T, Allocator>& x, const deque<T, Allocator>& y)
1963
+ {
1964
+ return x.size() == y.size() && equal(x.begin(), x.end(), y.begin());
1965
+ }
1966
+
1967
+ template <class T, class Allocator>
1968
+ inline bool operator<(const deque<T, Allocator>& x, const deque<T, Allocator>& y)
1969
+ {
1970
+ return lexicographical_compare(x.begin(), x.end(), y.begin(), y.end());
1971
+ }
1972
+
1973
+ template <class T, class Allocator>
1974
+ inline bool operator!=(const deque<T, Allocator>& x, const deque<T, Allocator>& y)
1975
+ { return !(x == y); }
1976
+
1977
+ template <class T, class Allocator>
1978
+ inline bool operator>(const deque<T, Allocator>& x, const deque<T, Allocator>& y)
1979
+ { return y < x; }
1980
+
1981
+ template <class T, class Allocator>
1982
+ inline bool operator>=(const deque<T, Allocator>& x, const deque<T, Allocator>& y)
1983
+ { return !(x < y); }
1984
+
1985
+ template <class T, class Allocator>
1986
+ inline bool operator<=(const deque<T, Allocator>& x, const deque<T, Allocator>& y)
1987
+ { return !(y < x); }
1988
+
1989
+ template <class T, class Allocator>
1990
+ inline void swap(deque<T, Allocator>& x, deque<T, Allocator>& y)
1991
+ { x.swap(y); }
1992
+
1993
+ }}
1994
+
1995
+ /// @cond
1996
+
1997
+ namespace boost {
1998
+
1999
+ //!has_trivial_destructor_after_move<> == true_type
2000
+ //!specialization for optimizations
2001
+ template <class T, class Allocator>
2002
+ struct has_trivial_destructor_after_move<boost::container::deque<T, Allocator> >
2003
+ : public ::boost::has_trivial_destructor_after_move<Allocator>
2004
+ {};
2005
+
2006
+ }
2007
+
2008
+ /// @endcond
2009
+
2010
+ #include <boost/container/detail/config_end.hpp>
2011
+
2012
+ #endif // #ifndef BOOST_CONTAINER_DEQUE_HPP