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,1508 @@
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
+
11
+ #ifndef BOOST_CONTAINER_MAP_HPP
12
+ #define BOOST_CONTAINER_MAP_HPP
13
+
14
+ #if (defined _MSC_VER) && (_MSC_VER >= 1200)
15
+ # pragma once
16
+ #endif
17
+
18
+ #include <boost/container/detail/config_begin.hpp>
19
+ #include <boost/container/detail/workaround.hpp>
20
+
21
+ #include <boost/container/container_fwd.hpp>
22
+ #include <utility>
23
+ #include <functional>
24
+ #include <memory>
25
+ #include <boost/container/detail/tree.hpp>
26
+ #include <boost/container/detail/value_init.hpp>
27
+ #include <boost/type_traits/has_trivial_destructor.hpp>
28
+ #include <boost/container/detail/mpl.hpp>
29
+ #include <boost/container/detail/utilities.hpp>
30
+ #include <boost/container/detail/pair.hpp>
31
+ #include <boost/container/detail/type_traits.hpp>
32
+ #include <boost/container/throw_exception.hpp>
33
+ #include <boost/move/utility.hpp>
34
+ #include <boost/move/detail/move_helpers.hpp>
35
+ #include <boost/static_assert.hpp>
36
+ #include <boost/container/detail/value_init.hpp>
37
+ #include <boost/detail/no_exceptions_support.hpp>
38
+
39
+ namespace boost {
40
+ namespace container {
41
+
42
+ /// @cond
43
+ // Forward declarations of operators == and <, needed for friend declarations.
44
+ template <class Key, class T, class Compare, class Allocator>
45
+ inline bool operator==(const map<Key,T,Compare,Allocator>& x,
46
+ const map<Key,T,Compare,Allocator>& y);
47
+
48
+ template <class Key, class T, class Compare, class Allocator>
49
+ inline bool operator<(const map<Key,T,Compare,Allocator>& x,
50
+ const map<Key,T,Compare,Allocator>& y);
51
+ /// @endcond
52
+
53
+ //! A map is a kind of associative container that supports unique keys (contains at
54
+ //! most one of each key value) and provides for fast retrieval of values of another
55
+ //! type T based on the keys. The map class supports bidirectional iterators.
56
+ //!
57
+ //! A map satisfies all of the requirements of a container and of a reversible
58
+ //! container and of an associative container. For a
59
+ //! map<Key,T> the key_type is Key and the value_type is std::pair<const Key,T>.
60
+ //!
61
+ //! Compare is the ordering function for Keys (e.g. <i>std::less<Key></i>).
62
+ //!
63
+ //! Allocator is the allocator to allocate the value_types
64
+ //! (e.g. <i>allocator< std::pair<const Key, T> > </i>).
65
+ #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
66
+ template <class Key, class T, class Compare = std::less<Key>, class Allocator = std::allocator< std::pair< const Key, T> > >
67
+ #else
68
+ template <class Key, class T, class Compare, class Allocator>
69
+ #endif
70
+ class map
71
+ {
72
+ /// @cond
73
+ private:
74
+ BOOST_COPYABLE_AND_MOVABLE(map)
75
+
76
+ typedef std::pair<const Key, T> value_type_impl;
77
+ typedef container_detail::rbtree
78
+ <Key, value_type_impl, container_detail::select1st<value_type_impl>, Compare, Allocator> tree_t;
79
+ typedef container_detail::pair <Key, T> movable_value_type_impl;
80
+ typedef container_detail::tree_value_compare
81
+ < Key, value_type_impl, Compare, container_detail::select1st<value_type_impl>
82
+ > value_compare_impl;
83
+ tree_t m_tree; // red-black tree representing map
84
+ /// @endcond
85
+
86
+ public:
87
+ //////////////////////////////////////////////
88
+ //
89
+ // types
90
+ //
91
+ //////////////////////////////////////////////
92
+
93
+ typedef Key key_type;
94
+ typedef T mapped_type;
95
+ typedef std::pair<const Key, T> value_type;
96
+ typedef typename boost::container::allocator_traits<Allocator>::pointer pointer;
97
+ typedef typename boost::container::allocator_traits<Allocator>::const_pointer const_pointer;
98
+ typedef typename boost::container::allocator_traits<Allocator>::reference reference;
99
+ typedef typename boost::container::allocator_traits<Allocator>::const_reference const_reference;
100
+ typedef typename boost::container::allocator_traits<Allocator>::size_type size_type;
101
+ typedef typename boost::container::allocator_traits<Allocator>::difference_type difference_type;
102
+ typedef Allocator allocator_type;
103
+ typedef typename BOOST_CONTAINER_IMPDEF(tree_t::stored_allocator_type) stored_allocator_type;
104
+ typedef BOOST_CONTAINER_IMPDEF(value_compare_impl) value_compare;
105
+ typedef Compare key_compare;
106
+ typedef typename BOOST_CONTAINER_IMPDEF(tree_t::iterator) iterator;
107
+ typedef typename BOOST_CONTAINER_IMPDEF(tree_t::const_iterator) const_iterator;
108
+ typedef typename BOOST_CONTAINER_IMPDEF(tree_t::reverse_iterator) reverse_iterator;
109
+ typedef typename BOOST_CONTAINER_IMPDEF(tree_t::const_reverse_iterator) const_reverse_iterator;
110
+ typedef std::pair<key_type, mapped_type> nonconst_value_type;
111
+ typedef BOOST_CONTAINER_IMPDEF(movable_value_type_impl) movable_value_type;
112
+
113
+ //////////////////////////////////////////////
114
+ //
115
+ // construct/copy/destroy
116
+ //
117
+ //////////////////////////////////////////////
118
+
119
+ //! <b>Effects</b>: Default constructs an empty map.
120
+ //!
121
+ //! <b>Complexity</b>: Constant.
122
+ map()
123
+ : m_tree()
124
+ {
125
+ //Allocator type must be std::pair<CONST Key, T>
126
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
127
+ }
128
+
129
+ //! <b>Effects</b>: Constructs an empty map using the specified comparison object
130
+ //! and allocator.
131
+ //!
132
+ //! <b>Complexity</b>: Constant.
133
+ explicit map(const Compare& comp,
134
+ const allocator_type& a = allocator_type())
135
+ : m_tree(comp, a)
136
+ {
137
+ //Allocator type must be std::pair<CONST Key, T>
138
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
139
+ }
140
+
141
+ //! <b>Effects</b>: Constructs an empty map using the specified comparison object and
142
+ //! allocator, and inserts elements from the range [first ,last ).
143
+ //!
144
+ //! <b>Complexity</b>: Linear in N if the range [first ,last ) is already sorted using
145
+ //! comp and otherwise N logN, where N is last - first.
146
+ template <class InputIterator>
147
+ map(InputIterator first, InputIterator last, const Compare& comp = Compare(),
148
+ const allocator_type& a = allocator_type())
149
+ : m_tree(true, first, last, comp, a)
150
+ {
151
+ //Allocator type must be std::pair<CONST Key, T>
152
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
153
+ }
154
+
155
+ //! <b>Effects</b>: Constructs an empty map using the specified comparison object and
156
+ //! allocator, and inserts elements from the ordered unique range [first ,last). This function
157
+ //! is more efficient than the normal range creation for ordered ranges.
158
+ //!
159
+ //! <b>Requires</b>: [first ,last) must be ordered according to the predicate and must be
160
+ //! unique values.
161
+ //!
162
+ //! <b>Complexity</b>: Linear in N.
163
+ template <class InputIterator>
164
+ map( ordered_unique_range_t, InputIterator first, InputIterator last
165
+ , const Compare& comp = Compare(), const allocator_type& a = allocator_type())
166
+ : m_tree(ordered_range, first, last, comp, a)
167
+ {
168
+ //Allocator type must be std::pair<CONST Key, T>
169
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
170
+ }
171
+
172
+ //! <b>Effects</b>: Copy constructs a map.
173
+ //!
174
+ //! <b>Complexity</b>: Linear in x.size().
175
+ map(const map& x)
176
+ : m_tree(x.m_tree)
177
+ {
178
+ //Allocator type must be std::pair<CONST Key, T>
179
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
180
+ }
181
+
182
+ //! <b>Effects</b>: Move constructs a map. Constructs *this using x's resources.
183
+ //!
184
+ //! <b>Complexity</b>: Constant.
185
+ //!
186
+ //! <b>Postcondition</b>: x is emptied.
187
+ map(BOOST_RV_REF(map) x)
188
+ : m_tree(boost::move(x.m_tree))
189
+ {
190
+ //Allocator type must be std::pair<CONST Key, T>
191
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
192
+ }
193
+
194
+ //! <b>Effects</b>: Copy constructs a map using the specified allocator.
195
+ //!
196
+ //! <b>Complexity</b>: Linear in x.size().
197
+ map(const map& x, const allocator_type &a)
198
+ : m_tree(x.m_tree, a)
199
+ {
200
+ //Allocator type must be std::pair<CONST Key, T>
201
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
202
+ }
203
+
204
+ //! <b>Effects</b>: Move constructs a map using the specified allocator.
205
+ //! Constructs *this using x's resources.
206
+ //!
207
+ //! <b>Complexity</b>: Constant if x == x.get_allocator(), linear otherwise.
208
+ //!
209
+ //! <b>Postcondition</b>: x is emptied.
210
+ map(BOOST_RV_REF(map) x, const allocator_type &a)
211
+ : m_tree(boost::move(x.m_tree), a)
212
+ {
213
+ //Allocator type must be std::pair<CONST Key, T>
214
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
215
+ }
216
+
217
+ //! <b>Effects</b>: Makes *this a copy of x.
218
+ //!
219
+ //! <b>Complexity</b>: Linear in x.size().
220
+ map& operator=(BOOST_COPY_ASSIGN_REF(map) x)
221
+ { m_tree = x.m_tree; return *this; }
222
+
223
+ //! <b>Effects</b>: this->swap(x.get()).
224
+ //!
225
+ //! <b>Complexity</b>: Constant.
226
+ map& operator=(BOOST_RV_REF(map) x)
227
+ { m_tree = boost::move(x.m_tree); return *this; }
228
+
229
+ //! <b>Effects</b>: Returns a copy of the Allocator that
230
+ //! was passed to the object's constructor.
231
+ //!
232
+ //! <b>Complexity</b>: Constant.
233
+ allocator_type get_allocator() const BOOST_CONTAINER_NOEXCEPT
234
+ { return m_tree.get_allocator(); }
235
+
236
+ //! <b>Effects</b>: Returns a reference to the internal allocator.
237
+ //!
238
+ //! <b>Throws</b>: Nothing
239
+ //!
240
+ //! <b>Complexity</b>: Constant.
241
+ //!
242
+ //! <b>Note</b>: Non-standard extension.
243
+ stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT
244
+ { return m_tree.get_stored_allocator(); }
245
+
246
+ //! <b>Effects</b>: Returns a reference to the internal allocator.
247
+ //!
248
+ //! <b>Throws</b>: Nothing
249
+ //!
250
+ //! <b>Complexity</b>: Constant.
251
+ //!
252
+ //! <b>Note</b>: Non-standard extension.
253
+ const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT
254
+ { return m_tree.get_stored_allocator(); }
255
+
256
+ //////////////////////////////////////////////
257
+ //
258
+ // iterators
259
+ //
260
+ //////////////////////////////////////////////
261
+
262
+ //! <b>Effects</b>: Returns an iterator to the first element contained in the container.
263
+ //!
264
+ //! <b>Throws</b>: Nothing.
265
+ //!
266
+ //! <b>Complexity</b>: Constant.
267
+ iterator begin() BOOST_CONTAINER_NOEXCEPT
268
+ { return m_tree.begin(); }
269
+
270
+ //! <b>Effects</b>: Returns a const_iterator to the first element contained in the container.
271
+ //!
272
+ //! <b>Throws</b>: Nothing.
273
+ //!
274
+ //! <b>Complexity</b>: Constant.
275
+ const_iterator begin() const BOOST_CONTAINER_NOEXCEPT
276
+ { return this->cbegin(); }
277
+
278
+ //! <b>Effects</b>: Returns an iterator to the end of the container.
279
+ //!
280
+ //! <b>Throws</b>: Nothing.
281
+ //!
282
+ //! <b>Complexity</b>: Constant.
283
+ iterator end() BOOST_CONTAINER_NOEXCEPT
284
+ { return m_tree.end(); }
285
+
286
+ //! <b>Effects</b>: Returns a const_iterator to the end of the container.
287
+ //!
288
+ //! <b>Throws</b>: Nothing.
289
+ //!
290
+ //! <b>Complexity</b>: Constant.
291
+ const_iterator end() const BOOST_CONTAINER_NOEXCEPT
292
+ { return this->cend(); }
293
+
294
+ //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning
295
+ //! of the reversed container.
296
+ //!
297
+ //! <b>Throws</b>: Nothing.
298
+ //!
299
+ //! <b>Complexity</b>: Constant.
300
+ reverse_iterator rbegin() BOOST_CONTAINER_NOEXCEPT
301
+ { return m_tree.rbegin(); }
302
+
303
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
304
+ //! of the reversed container.
305
+ //!
306
+ //! <b>Throws</b>: Nothing.
307
+ //!
308
+ //! <b>Complexity</b>: Constant.
309
+ const_reverse_iterator rbegin() const BOOST_CONTAINER_NOEXCEPT
310
+ { return this->crbegin(); }
311
+
312
+ //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
313
+ //! of the reversed container.
314
+ //!
315
+ //! <b>Throws</b>: Nothing.
316
+ //!
317
+ //! <b>Complexity</b>: Constant.
318
+ reverse_iterator rend() BOOST_CONTAINER_NOEXCEPT
319
+ { return m_tree.rend(); }
320
+
321
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
322
+ //! of the reversed container.
323
+ //!
324
+ //! <b>Throws</b>: Nothing.
325
+ //!
326
+ //! <b>Complexity</b>: Constant.
327
+ const_reverse_iterator rend() const BOOST_CONTAINER_NOEXCEPT
328
+ { return this->crend(); }
329
+
330
+ //! <b>Effects</b>: Returns a const_iterator to the first element contained in the container.
331
+ //!
332
+ //! <b>Throws</b>: Nothing.
333
+ //!
334
+ //! <b>Complexity</b>: Constant.
335
+ const_iterator cbegin() const BOOST_CONTAINER_NOEXCEPT
336
+ { return m_tree.begin(); }
337
+
338
+ //! <b>Effects</b>: Returns a const_iterator to the end of the container.
339
+ //!
340
+ //! <b>Throws</b>: Nothing.
341
+ //!
342
+ //! <b>Complexity</b>: Constant.
343
+ const_iterator cend() const BOOST_CONTAINER_NOEXCEPT
344
+ { return m_tree.end(); }
345
+
346
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
347
+ //! of the reversed container.
348
+ //!
349
+ //! <b>Throws</b>: Nothing.
350
+ //!
351
+ //! <b>Complexity</b>: Constant.
352
+ const_reverse_iterator crbegin() const BOOST_CONTAINER_NOEXCEPT
353
+ { return m_tree.rbegin(); }
354
+
355
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
356
+ //! of the reversed container.
357
+ //!
358
+ //! <b>Throws</b>: Nothing.
359
+ //!
360
+ //! <b>Complexity</b>: Constant.
361
+ const_reverse_iterator crend() const BOOST_CONTAINER_NOEXCEPT
362
+ { return m_tree.rend(); }
363
+
364
+ //////////////////////////////////////////////
365
+ //
366
+ // capacity
367
+ //
368
+ //////////////////////////////////////////////
369
+
370
+ //! <b>Effects</b>: Returns true if the container contains no elements.
371
+ //!
372
+ //! <b>Throws</b>: Nothing.
373
+ //!
374
+ //! <b>Complexity</b>: Constant.
375
+ bool empty() const BOOST_CONTAINER_NOEXCEPT
376
+ { return m_tree.empty(); }
377
+
378
+ //! <b>Effects</b>: Returns the number of the elements contained in the container.
379
+ //!
380
+ //! <b>Throws</b>: Nothing.
381
+ //!
382
+ //! <b>Complexity</b>: Constant.
383
+ size_type size() const BOOST_CONTAINER_NOEXCEPT
384
+ { return m_tree.size(); }
385
+
386
+ //! <b>Effects</b>: Returns the largest possible size of the container.
387
+ //!
388
+ //! <b>Throws</b>: Nothing.
389
+ //!
390
+ //! <b>Complexity</b>: Constant.
391
+ size_type max_size() const BOOST_CONTAINER_NOEXCEPT
392
+ { return m_tree.max_size(); }
393
+
394
+ //////////////////////////////////////////////
395
+ //
396
+ // element access
397
+ //
398
+ //////////////////////////////////////////////
399
+
400
+ #if defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
401
+ //! Effects: If there is no key equivalent to x in the map, inserts
402
+ //! value_type(x, T()) into the map.
403
+ //!
404
+ //! Returns: Allocator reference to the mapped_type corresponding to x in *this.
405
+ //!
406
+ //! Complexity: Logarithmic.
407
+ mapped_type& operator[](const key_type &k);
408
+
409
+ //! Effects: If there is no key equivalent to x in the map, inserts
410
+ //! value_type(boost::move(x), T()) into the map (the key is move-constructed)
411
+ //!
412
+ //! Returns: Allocator reference to the mapped_type corresponding to x in *this.
413
+ //!
414
+ //! Complexity: Logarithmic.
415
+ mapped_type& operator[](key_type &&k);
416
+ #else
417
+ BOOST_MOVE_CONVERSION_AWARE_CATCH( operator[] , key_type, mapped_type&, this->priv_subscript)
418
+ #endif
419
+
420
+ //! Returns: Allocator reference to the element whose key is equivalent to x.
421
+ //! Throws: An exception object of type out_of_range if no such element is present.
422
+ //! Complexity: logarithmic.
423
+ T& at(const key_type& k)
424
+ {
425
+ iterator i = this->find(k);
426
+ if(i == this->end()){
427
+ throw_out_of_range("map::at key not found");
428
+ }
429
+ return i->second;
430
+ }
431
+
432
+ //! Returns: Allocator reference to the element whose key is equivalent to x.
433
+ //! Throws: An exception object of type out_of_range if no such element is present.
434
+ //! Complexity: logarithmic.
435
+ const T& at(const key_type& k) const
436
+ {
437
+ const_iterator i = this->find(k);
438
+ if(i == this->end()){
439
+ throw_out_of_range("map::at key not found");
440
+ }
441
+ return i->second;
442
+ }
443
+
444
+ //////////////////////////////////////////////
445
+ //
446
+ // modifiers
447
+ //
448
+ //////////////////////////////////////////////
449
+
450
+ //! <b>Effects</b>: Inserts x if and only if there is no element in the container
451
+ //! with key equivalent to the key of x.
452
+ //!
453
+ //! <b>Returns</b>: The bool component of the returned pair is true if and only
454
+ //! if the insertion takes place, and the iterator component of the pair
455
+ //! points to the element with key equivalent to the key of x.
456
+ //!
457
+ //! <b>Complexity</b>: Logarithmic.
458
+ std::pair<iterator,bool> insert(const value_type& x)
459
+ { return m_tree.insert_unique(x); }
460
+
461
+ //! <b>Effects</b>: Inserts a new value_type created from the pair if and only if
462
+ //! there is no element in the container with key equivalent to the key of x.
463
+ //!
464
+ //! <b>Returns</b>: The bool component of the returned pair is true if and only
465
+ //! if the insertion takes place, and the iterator component of the pair
466
+ //! points to the element with key equivalent to the key of x.
467
+ //!
468
+ //! <b>Complexity</b>: Logarithmic.
469
+ std::pair<iterator,bool> insert(const nonconst_value_type& x)
470
+ { return m_tree.insert_unique(x); }
471
+
472
+ //! <b>Effects</b>: Inserts a new value_type move constructed from the pair if and
473
+ //! only if there is no element in the container with key equivalent to the key of x.
474
+ //!
475
+ //! <b>Returns</b>: The bool component of the returned pair is true if and only
476
+ //! if the insertion takes place, and the iterator component of the pair
477
+ //! points to the element with key equivalent to the key of x.
478
+ //!
479
+ //! <b>Complexity</b>: Logarithmic.
480
+ std::pair<iterator,bool> insert(BOOST_RV_REF(nonconst_value_type) x)
481
+ { return m_tree.insert_unique(boost::move(x)); }
482
+
483
+ //! <b>Effects</b>: Inserts a new value_type move constructed from the pair if and
484
+ //! only if there is no element in the container with key equivalent to the key of x.
485
+ //!
486
+ //! <b>Returns</b>: The bool component of the returned pair is true if and only
487
+ //! if the insertion takes place, and the iterator component of the pair
488
+ //! points to the element with key equivalent to the key of x.
489
+ //!
490
+ //! <b>Complexity</b>: Logarithmic.
491
+ std::pair<iterator,bool> insert(BOOST_RV_REF(movable_value_type) x)
492
+ { return m_tree.insert_unique(boost::move(x)); }
493
+
494
+ //! <b>Effects</b>: Move constructs a new value from x if and only if there is
495
+ //! no element in the container with key equivalent to the key of x.
496
+ //!
497
+ //! <b>Returns</b>: The bool component of the returned pair is true if and only
498
+ //! if the insertion takes place, and the iterator component of the pair
499
+ //! points to the element with key equivalent to the key of x.
500
+ //!
501
+ //! <b>Complexity</b>: Logarithmic.
502
+ std::pair<iterator,bool> insert(BOOST_RV_REF(value_type) x)
503
+ { return m_tree.insert_unique(boost::move(x)); }
504
+
505
+ //! <b>Effects</b>: Inserts a copy of x in the container if and only if there is
506
+ //! no element in the container with key equivalent to the key of x.
507
+ //! p is a hint pointing to where the insert should start to search.
508
+ //!
509
+ //! <b>Returns</b>: An iterator pointing to the element with key equivalent
510
+ //! to the key of x.
511
+ //!
512
+ //! <b>Complexity</b>: Logarithmic in general, but amortized constant if t
513
+ //! is inserted right before p.
514
+ iterator insert(const_iterator position, const value_type& x)
515
+ { return m_tree.insert_unique(position, x); }
516
+
517
+ //! <b>Effects</b>: Move constructs a new value from x if and only if there is
518
+ //! no element in the container with key equivalent to the key of x.
519
+ //! p is a hint pointing to where the insert should start to search.
520
+ //!
521
+ //! <b>Returns</b>: An iterator pointing to the element with key equivalent
522
+ //! to the key of x.
523
+ //!
524
+ //! <b>Complexity</b>: Logarithmic in general, but amortized constant if t
525
+ //! is inserted right before p.
526
+ iterator insert(const_iterator position, BOOST_RV_REF(nonconst_value_type) x)
527
+ { return m_tree.insert_unique(position, boost::move(x)); }
528
+
529
+ //! <b>Effects</b>: Move constructs a new value from x if and only if there is
530
+ //! no element in the container with key equivalent to the key of x.
531
+ //! p is a hint pointing to where the insert should start to search.
532
+ //!
533
+ //! <b>Returns</b>: An iterator pointing to the element with key equivalent
534
+ //! to the key of x.
535
+ //!
536
+ //! <b>Complexity</b>: Logarithmic in general, but amortized constant if t
537
+ //! is inserted right before p.
538
+ iterator insert(const_iterator position, BOOST_RV_REF(movable_value_type) x)
539
+ { return m_tree.insert_unique(position, boost::move(x)); }
540
+
541
+ //! <b>Effects</b>: Inserts a copy of x in the container.
542
+ //! p is a hint pointing to where the insert should start to search.
543
+ //!
544
+ //! <b>Returns</b>: An iterator pointing to the element with key equivalent to the key of x.
545
+ //!
546
+ //! <b>Complexity</b>: Logarithmic.
547
+ iterator insert(const_iterator position, const nonconst_value_type& x)
548
+ { return m_tree.insert_unique(position, x); }
549
+
550
+ //! <b>Effects</b>: Inserts an element move constructed from x in the container.
551
+ //! p is a hint pointing to where the insert should start to search.
552
+ //!
553
+ //! <b>Returns</b>: An iterator pointing to the element with key equivalent to the key of x.
554
+ //!
555
+ //! <b>Complexity</b>: Logarithmic.
556
+ iterator insert(const_iterator position, BOOST_RV_REF(value_type) x)
557
+ { return m_tree.insert_unique(position, boost::move(x)); }
558
+
559
+ //! <b>Requires</b>: first, last are not iterators into *this.
560
+ //!
561
+ //! <b>Effects</b>: inserts each element from the range [first,last) if and only
562
+ //! if there is no element with key equivalent to the key of that element.
563
+ //!
564
+ //! <b>Complexity</b>: At most N log(size()+N) (N is the distance from first to last)
565
+ template <class InputIterator>
566
+ void insert(InputIterator first, InputIterator last)
567
+ { m_tree.insert_unique(first, last); }
568
+
569
+ #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
570
+
571
+ //! <b>Effects</b>: Inserts an object x of type T constructed with
572
+ //! std::forward<Args>(args)... in the container if and only if there is
573
+ //! no element in the container with an equivalent key.
574
+ //! p is a hint pointing to where the insert should start to search.
575
+ //!
576
+ //! <b>Returns</b>: The bool component of the returned pair is true if and only
577
+ //! if the insertion takes place, and the iterator component of the pair
578
+ //! points to the element with key equivalent to the key of x.
579
+ //!
580
+ //! <b>Complexity</b>: Logarithmic in general, but amortized constant if t
581
+ //! is inserted right before p.
582
+ template <class... Args>
583
+ std::pair<iterator,bool> emplace(Args&&... args)
584
+ { return m_tree.emplace_unique(boost::forward<Args>(args)...); }
585
+
586
+ //! <b>Effects</b>: Inserts an object of type T constructed with
587
+ //! std::forward<Args>(args)... in the container if and only if there is
588
+ //! no element in the container with an equivalent key.
589
+ //! p is a hint pointing to where the insert should start to search.
590
+ //!
591
+ //! <b>Returns</b>: An iterator pointing to the element with key equivalent
592
+ //! to the key of x.
593
+ //!
594
+ //! <b>Complexity</b>: Logarithmic in general, but amortized constant if t
595
+ //! is inserted right before p.
596
+ template <class... Args>
597
+ iterator emplace_hint(const_iterator hint, Args&&... args)
598
+ { return m_tree.emplace_hint_unique(hint, boost::forward<Args>(args)...); }
599
+
600
+ #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING
601
+
602
+ #define BOOST_PP_LOCAL_MACRO(n) \
603
+ BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \
604
+ std::pair<iterator,bool> emplace(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \
605
+ { return m_tree.emplace_unique(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); } \
606
+ \
607
+ BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \
608
+ iterator emplace_hint(const_iterator hint \
609
+ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \
610
+ { return m_tree.emplace_hint_unique(hint \
611
+ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _));} \
612
+ //!
613
+ #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
614
+ #include BOOST_PP_LOCAL_ITERATE()
615
+
616
+ #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING
617
+
618
+ //! <b>Effects</b>: Erases the element pointed to by position.
619
+ //!
620
+ //! <b>Returns</b>: Returns an iterator pointing to the element immediately
621
+ //! following q prior to the element being erased. If no such element exists,
622
+ //! returns end().
623
+ //!
624
+ //! <b>Complexity</b>: Amortized constant time
625
+ iterator erase(const_iterator position) BOOST_CONTAINER_NOEXCEPT
626
+ { return m_tree.erase(position); }
627
+
628
+ //! <b>Effects</b>: Erases all elements in the container with key equivalent to x.
629
+ //!
630
+ //! <b>Returns</b>: Returns the number of erased elements.
631
+ //!
632
+ //! <b>Complexity</b>: log(size()) + count(k)
633
+ size_type erase(const key_type& x) BOOST_CONTAINER_NOEXCEPT
634
+ { return m_tree.erase(x); }
635
+
636
+ //! <b>Effects</b>: Erases all the elements in the range [first, last).
637
+ //!
638
+ //! <b>Returns</b>: Returns last.
639
+ //!
640
+ //! <b>Complexity</b>: log(size())+N where N is the distance from first to last.
641
+ iterator erase(const_iterator first, const_iterator last) BOOST_CONTAINER_NOEXCEPT
642
+ { return m_tree.erase(first, last); }
643
+
644
+ //! <b>Effects</b>: Swaps the contents of *this and x.
645
+ //!
646
+ //! <b>Throws</b>: Nothing.
647
+ //!
648
+ //! <b>Complexity</b>: Constant.
649
+ void swap(map& x)
650
+ { m_tree.swap(x.m_tree); }
651
+
652
+ //! <b>Effects</b>: erase(a.begin(),a.end()).
653
+ //!
654
+ //! <b>Postcondition</b>: size() == 0.
655
+ //!
656
+ //! <b>Complexity</b>: linear in size().
657
+ void clear() BOOST_CONTAINER_NOEXCEPT
658
+ { m_tree.clear(); }
659
+
660
+ //////////////////////////////////////////////
661
+ //
662
+ // observers
663
+ //
664
+ //////////////////////////////////////////////
665
+
666
+ //! <b>Effects</b>: Returns the comparison object out
667
+ //! of which a was constructed.
668
+ //!
669
+ //! <b>Complexity</b>: Constant.
670
+ key_compare key_comp() const
671
+ { return m_tree.key_comp(); }
672
+
673
+ //! <b>Effects</b>: Returns an object of value_compare constructed out
674
+ //! of the comparison object.
675
+ //!
676
+ //! <b>Complexity</b>: Constant.
677
+ value_compare value_comp() const
678
+ { return value_compare(m_tree.key_comp()); }
679
+
680
+ //////////////////////////////////////////////
681
+ //
682
+ // map operations
683
+ //
684
+ //////////////////////////////////////////////
685
+
686
+ //! <b>Returns</b>: An iterator pointing to an element with the key
687
+ //! equivalent to x, or end() if such an element is not found.
688
+ //!
689
+ //! <b>Complexity</b>: Logarithmic.
690
+ iterator find(const key_type& x)
691
+ { return m_tree.find(x); }
692
+
693
+ //! <b>Returns</b>: Allocator const_iterator pointing to an element with the key
694
+ //! equivalent to x, or end() if such an element is not found.
695
+ //!
696
+ //! <b>Complexity</b>: Logarithmic.
697
+ const_iterator find(const key_type& x) const
698
+ { return m_tree.find(x); }
699
+
700
+ //! <b>Returns</b>: The number of elements with key equivalent to x.
701
+ //!
702
+ //! <b>Complexity</b>: log(size())+count(k)
703
+ size_type count(const key_type& x) const
704
+ { return m_tree.find(x) == m_tree.end() ? 0 : 1; }
705
+
706
+ //! <b>Returns</b>: An iterator pointing to the first element with key not less
707
+ //! than k, or a.end() if such an element is not found.
708
+ //!
709
+ //! <b>Complexity</b>: Logarithmic
710
+ iterator lower_bound(const key_type& x)
711
+ { return m_tree.lower_bound(x); }
712
+
713
+ //! <b>Returns</b>: Allocator const iterator pointing to the first element with key not
714
+ //! less than k, or a.end() if such an element is not found.
715
+ //!
716
+ //! <b>Complexity</b>: Logarithmic
717
+ const_iterator lower_bound(const key_type& x) const
718
+ { return m_tree.lower_bound(x); }
719
+
720
+ //! <b>Returns</b>: An iterator pointing to the first element with key not less
721
+ //! than x, or end() if such an element is not found.
722
+ //!
723
+ //! <b>Complexity</b>: Logarithmic
724
+ iterator upper_bound(const key_type& x)
725
+ { return m_tree.upper_bound(x); }
726
+
727
+ //! <b>Returns</b>: Allocator const iterator pointing to the first element with key not
728
+ //! less than x, or end() if such an element is not found.
729
+ //!
730
+ //! <b>Complexity</b>: Logarithmic
731
+ const_iterator upper_bound(const key_type& x) const
732
+ { return m_tree.upper_bound(x); }
733
+
734
+ //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
735
+ //!
736
+ //! <b>Complexity</b>: Logarithmic
737
+ std::pair<iterator,iterator> equal_range(const key_type& x)
738
+ { return m_tree.equal_range(x); }
739
+
740
+ //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
741
+ //!
742
+ //! <b>Complexity</b>: Logarithmic
743
+ std::pair<const_iterator,const_iterator> equal_range(const key_type& x) const
744
+ { return m_tree.equal_range(x); }
745
+
746
+ /// @cond
747
+ template <class K1, class T1, class C1, class A1>
748
+ friend bool operator== (const map<K1, T1, C1, A1>&,
749
+ const map<K1, T1, C1, A1>&);
750
+ template <class K1, class T1, class C1, class A1>
751
+ friend bool operator< (const map<K1, T1, C1, A1>&,
752
+ const map<K1, T1, C1, A1>&);
753
+ private:
754
+ mapped_type& priv_subscript(const key_type &k)
755
+ {
756
+ //we can optimize this
757
+ iterator i = lower_bound(k);
758
+ // i->first is greater than or equivalent to k.
759
+ if (i == end() || key_comp()(k, (*i).first)){
760
+ container_detail::value_init<mapped_type> m;
761
+ movable_value_type val(k, boost::move(m.m_t));
762
+ i = insert(i, boost::move(val));
763
+ }
764
+ return (*i).second;
765
+ }
766
+
767
+ mapped_type& priv_subscript(BOOST_RV_REF(key_type) mk)
768
+ {
769
+ key_type &k = mk;
770
+ //we can optimize this
771
+ iterator i = lower_bound(k);
772
+ // i->first is greater than or equivalent to k.
773
+ if (i == end() || key_comp()(k, (*i).first)){
774
+ container_detail::value_init<mapped_type> m;
775
+ movable_value_type val(boost::move(k), boost::move(m.m_t));
776
+ i = insert(i, boost::move(val));
777
+ }
778
+ return (*i).second;
779
+ }
780
+
781
+ /// @endcond
782
+ };
783
+
784
+ template <class Key, class T, class Compare, class Allocator>
785
+ inline bool operator==(const map<Key,T,Compare,Allocator>& x,
786
+ const map<Key,T,Compare,Allocator>& y)
787
+ { return x.m_tree == y.m_tree; }
788
+
789
+ template <class Key, class T, class Compare, class Allocator>
790
+ inline bool operator<(const map<Key,T,Compare,Allocator>& x,
791
+ const map<Key,T,Compare,Allocator>& y)
792
+ { return x.m_tree < y.m_tree; }
793
+
794
+ template <class Key, class T, class Compare, class Allocator>
795
+ inline bool operator!=(const map<Key,T,Compare,Allocator>& x,
796
+ const map<Key,T,Compare,Allocator>& y)
797
+ { return !(x == y); }
798
+
799
+ template <class Key, class T, class Compare, class Allocator>
800
+ inline bool operator>(const map<Key,T,Compare,Allocator>& x,
801
+ const map<Key,T,Compare,Allocator>& y)
802
+ { return y < x; }
803
+
804
+ template <class Key, class T, class Compare, class Allocator>
805
+ inline bool operator<=(const map<Key,T,Compare,Allocator>& x,
806
+ const map<Key,T,Compare,Allocator>& y)
807
+ { return !(y < x); }
808
+
809
+ template <class Key, class T, class Compare, class Allocator>
810
+ inline bool operator>=(const map<Key,T,Compare,Allocator>& x,
811
+ const map<Key,T,Compare,Allocator>& y)
812
+ { return !(x < y); }
813
+
814
+ template <class Key, class T, class Compare, class Allocator>
815
+ inline void swap(map<Key,T,Compare,Allocator>& x, map<Key,T,Compare,Allocator>& y)
816
+ { x.swap(y); }
817
+
818
+ /// @cond
819
+
820
+ // Forward declaration of operators < and ==, needed for friend declaration.
821
+
822
+ template <class Key, class T, class Compare, class Allocator>
823
+ inline bool operator==(const multimap<Key,T,Compare,Allocator>& x,
824
+ const multimap<Key,T,Compare,Allocator>& y);
825
+
826
+ template <class Key, class T, class Compare, class Allocator>
827
+ inline bool operator<(const multimap<Key,T,Compare,Allocator>& x,
828
+ const multimap<Key,T,Compare,Allocator>& y);
829
+
830
+ } //namespace container {
831
+
832
+ //!has_trivial_destructor_after_move<> == true_type
833
+ //!specialization for optimizations
834
+ template <class K, class T, class C, class Allocator>
835
+ struct has_trivial_destructor_after_move<boost::container::map<K, T, C, Allocator> >
836
+ {
837
+ static const bool value = has_trivial_destructor_after_move<Allocator>::value && has_trivial_destructor_after_move<C>::value;
838
+ };
839
+
840
+ namespace container {
841
+
842
+ /// @endcond
843
+
844
+ //! A multimap is a kind of associative container that supports equivalent keys
845
+ //! (possibly containing multiple copies of the same key value) and provides for
846
+ //! fast retrieval of values of another type T based on the keys. The multimap class
847
+ //! supports bidirectional iterators.
848
+ //!
849
+ //! A multimap satisfies all of the requirements of a container and of a reversible
850
+ //! container and of an associative container. For a
851
+ //! map<Key,T> the key_type is Key and the value_type is std::pair<const Key,T>.
852
+ //!
853
+ //! Compare is the ordering function for Keys (e.g. <i>std::less<Key></i>).
854
+ //!
855
+ //! Allocator is the allocator to allocate the value_types
856
+ //!(e.g. <i>allocator< std::pair<<b>const</b> Key, T> ></i>).
857
+ #ifdef BOOST_CONTAINER_DOXYGEN_INVOKED
858
+ template <class Key, class T, class Compare = std::less<Key>, class Allocator = std::allocator< std::pair< const Key, T> > >
859
+ #else
860
+ template <class Key, class T, class Compare, class Allocator>
861
+ #endif
862
+ class multimap
863
+ {
864
+ /// @cond
865
+ private:
866
+ BOOST_COPYABLE_AND_MOVABLE(multimap)
867
+
868
+ typedef std::pair<const Key, T> value_type_impl;
869
+ typedef container_detail::rbtree
870
+ <Key, value_type_impl, container_detail::select1st<value_type_impl>, Compare, Allocator> tree_t;
871
+ typedef container_detail::pair <Key, T> movable_value_type_impl;
872
+ typedef container_detail::tree_value_compare
873
+ < Key, value_type_impl, Compare, container_detail::select1st<value_type_impl>
874
+ > value_compare_impl;
875
+ tree_t m_tree; // red-black tree representing map
876
+ /// @endcond
877
+
878
+ public:
879
+ //////////////////////////////////////////////
880
+ //
881
+ // types
882
+ //
883
+ //////////////////////////////////////////////
884
+
885
+ typedef Key key_type;
886
+ typedef T mapped_type;
887
+ typedef std::pair<const Key, T> value_type;
888
+ typedef typename boost::container::allocator_traits<Allocator>::pointer pointer;
889
+ typedef typename boost::container::allocator_traits<Allocator>::const_pointer const_pointer;
890
+ typedef typename boost::container::allocator_traits<Allocator>::reference reference;
891
+ typedef typename boost::container::allocator_traits<Allocator>::const_reference const_reference;
892
+ typedef typename boost::container::allocator_traits<Allocator>::size_type size_type;
893
+ typedef typename boost::container::allocator_traits<Allocator>::difference_type difference_type;
894
+ typedef Allocator allocator_type;
895
+ typedef typename BOOST_CONTAINER_IMPDEF(tree_t::stored_allocator_type) stored_allocator_type;
896
+ typedef BOOST_CONTAINER_IMPDEF(value_compare_impl) value_compare;
897
+ typedef Compare key_compare;
898
+ typedef typename BOOST_CONTAINER_IMPDEF(tree_t::iterator) iterator;
899
+ typedef typename BOOST_CONTAINER_IMPDEF(tree_t::const_iterator) const_iterator;
900
+ typedef typename BOOST_CONTAINER_IMPDEF(tree_t::reverse_iterator) reverse_iterator;
901
+ typedef typename BOOST_CONTAINER_IMPDEF(tree_t::const_reverse_iterator) const_reverse_iterator;
902
+ typedef std::pair<key_type, mapped_type> nonconst_value_type;
903
+ typedef BOOST_CONTAINER_IMPDEF(movable_value_type_impl) movable_value_type;
904
+
905
+ //////////////////////////////////////////////
906
+ //
907
+ // construct/copy/destroy
908
+ //
909
+ //////////////////////////////////////////////
910
+
911
+ //! <b>Effects</b>: Default constructs an empty multimap.
912
+ //!
913
+ //! <b>Complexity</b>: Constant.
914
+ multimap()
915
+ : m_tree()
916
+ {
917
+ //Allocator type must be std::pair<CONST Key, T>
918
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
919
+ }
920
+
921
+ //! <b>Effects</b>: Constructs an empty multimap using the specified comparison
922
+ //! object and allocator.
923
+ //!
924
+ //! <b>Complexity</b>: Constant.
925
+ explicit multimap(const Compare& comp, const allocator_type& a = allocator_type())
926
+ : m_tree(comp, a)
927
+ {
928
+ //Allocator type must be std::pair<CONST Key, T>
929
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
930
+ }
931
+
932
+ //! <b>Effects</b>: Constructs an empty multimap using the specified comparison object
933
+ //! and allocator, and inserts elements from the range [first ,last ).
934
+ //!
935
+ //! <b>Complexity</b>: Linear in N if the range [first ,last ) is already sorted using
936
+ //! comp and otherwise N logN, where N is last - first.
937
+ template <class InputIterator>
938
+ multimap(InputIterator first, InputIterator last,
939
+ const Compare& comp = Compare(),
940
+ const allocator_type& a = allocator_type())
941
+ : m_tree(false, first, last, comp, a)
942
+ {
943
+ //Allocator type must be std::pair<CONST Key, T>
944
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
945
+ }
946
+
947
+ //! <b>Effects</b>: Constructs an empty multimap using the specified comparison object and
948
+ //! allocator, and inserts elements from the ordered range [first ,last). This function
949
+ //! is more efficient than the normal range creation for ordered ranges.
950
+ //!
951
+ //! <b>Requires</b>: [first ,last) must be ordered according to the predicate.
952
+ //!
953
+ //! <b>Complexity</b>: Linear in N.
954
+ template <class InputIterator>
955
+ multimap(ordered_range_t, InputIterator first, InputIterator last, const Compare& comp = Compare(),
956
+ const allocator_type& a = allocator_type())
957
+ : m_tree(ordered_range, first, last, comp, a)
958
+ {}
959
+
960
+ //! <b>Effects</b>: Copy constructs a multimap.
961
+ //!
962
+ //! <b>Complexity</b>: Linear in x.size().
963
+ multimap(const multimap& x)
964
+ : m_tree(x.m_tree)
965
+ {
966
+ //Allocator type must be std::pair<CONST Key, T>
967
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
968
+ }
969
+
970
+ //! <b>Effects</b>: Move constructs a multimap. Constructs *this using x's resources.
971
+ //!
972
+ //! <b>Complexity</b>: Constant.
973
+ //!
974
+ //! <b>Postcondition</b>: x is emptied.
975
+ multimap(BOOST_RV_REF(multimap) x)
976
+ : m_tree(boost::move(x.m_tree))
977
+ {
978
+ //Allocator type must be std::pair<CONST Key, T>
979
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
980
+ }
981
+
982
+ //! <b>Effects</b>: Copy constructs a multimap.
983
+ //!
984
+ //! <b>Complexity</b>: Linear in x.size().
985
+ multimap(const multimap& x, const allocator_type &a)
986
+ : m_tree(x.m_tree, a)
987
+ {
988
+ //Allocator type must be std::pair<CONST Key, T>
989
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
990
+ }
991
+
992
+ //! <b>Effects</b>: Move constructs a multimap using the specified allocator.
993
+ //! Constructs *this using x's resources.
994
+ //! <b>Complexity</b>: Constant if a == x.get_allocator(), linear otherwise.
995
+ //!
996
+ //! <b>Postcondition</b>: x is emptied.
997
+ multimap(BOOST_RV_REF(multimap) x, const allocator_type &a)
998
+ : m_tree(boost::move(x.m_tree), a)
999
+ {
1000
+ //Allocator type must be std::pair<CONST Key, T>
1001
+ BOOST_STATIC_ASSERT((container_detail::is_same<std::pair<const Key, T>, typename Allocator::value_type>::value));
1002
+ }
1003
+
1004
+ //! <b>Effects</b>: Makes *this a copy of x.
1005
+ //!
1006
+ //! <b>Complexity</b>: Linear in x.size().
1007
+ multimap& operator=(BOOST_COPY_ASSIGN_REF(multimap) x)
1008
+ { m_tree = x.m_tree; return *this; }
1009
+
1010
+ //! <b>Effects</b>: this->swap(x.get()).
1011
+ //!
1012
+ //! <b>Complexity</b>: Constant.
1013
+ multimap& operator=(BOOST_RV_REF(multimap) x)
1014
+ { m_tree = boost::move(x.m_tree); return *this; }
1015
+
1016
+ //! <b>Effects</b>: Returns a copy of the Allocator that
1017
+ //! was passed to the object's constructor.
1018
+ //!
1019
+ //! <b>Complexity</b>: Constant.
1020
+ allocator_type get_allocator() const BOOST_CONTAINER_NOEXCEPT
1021
+ { return m_tree.get_allocator(); }
1022
+
1023
+ //! <b>Effects</b>: Returns a reference to the internal allocator.
1024
+ //!
1025
+ //! <b>Throws</b>: Nothing
1026
+ //!
1027
+ //! <b>Complexity</b>: Constant.
1028
+ //!
1029
+ //! <b>Note</b>: Non-standard extension.
1030
+ stored_allocator_type &get_stored_allocator() BOOST_CONTAINER_NOEXCEPT
1031
+ { return m_tree.get_stored_allocator(); }
1032
+
1033
+ //! <b>Effects</b>: Returns a reference to the internal allocator.
1034
+ //!
1035
+ //! <b>Throws</b>: Nothing
1036
+ //!
1037
+ //! <b>Complexity</b>: Constant.
1038
+ //!
1039
+ //! <b>Note</b>: Non-standard extension.
1040
+ const stored_allocator_type &get_stored_allocator() const BOOST_CONTAINER_NOEXCEPT
1041
+ { return m_tree.get_stored_allocator(); }
1042
+
1043
+ //////////////////////////////////////////////
1044
+ //
1045
+ // iterators
1046
+ //
1047
+ //////////////////////////////////////////////
1048
+
1049
+ //! <b>Effects</b>: Returns an iterator to the first element contained in the container.
1050
+ //!
1051
+ //! <b>Throws</b>: Nothing.
1052
+ //!
1053
+ //! <b>Complexity</b>: Constant.
1054
+ iterator begin() BOOST_CONTAINER_NOEXCEPT
1055
+ { return m_tree.begin(); }
1056
+
1057
+ //! <b>Effects</b>: Returns a const_iterator to the first element contained in the container.
1058
+ //!
1059
+ //! <b>Throws</b>: Nothing.
1060
+ //!
1061
+ //! <b>Complexity</b>: Constant.
1062
+ const_iterator begin() const BOOST_CONTAINER_NOEXCEPT
1063
+ { return this->cbegin(); }
1064
+
1065
+ //! <b>Effects</b>: Returns an iterator to the end of the container.
1066
+ //!
1067
+ //! <b>Throws</b>: Nothing.
1068
+ //!
1069
+ //! <b>Complexity</b>: Constant.
1070
+ iterator end() BOOST_CONTAINER_NOEXCEPT
1071
+ { return m_tree.end(); }
1072
+
1073
+ //! <b>Effects</b>: Returns a const_iterator to the end of the container.
1074
+ //!
1075
+ //! <b>Throws</b>: Nothing.
1076
+ //!
1077
+ //! <b>Complexity</b>: Constant.
1078
+ const_iterator end() const BOOST_CONTAINER_NOEXCEPT
1079
+ { return this->cend(); }
1080
+
1081
+ //! <b>Effects</b>: Returns a reverse_iterator pointing to the beginning
1082
+ //! of the reversed container.
1083
+ //!
1084
+ //! <b>Throws</b>: Nothing.
1085
+ //!
1086
+ //! <b>Complexity</b>: Constant.
1087
+ reverse_iterator rbegin() BOOST_CONTAINER_NOEXCEPT
1088
+ { return m_tree.rbegin(); }
1089
+
1090
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
1091
+ //! of the reversed container.
1092
+ //!
1093
+ //! <b>Throws</b>: Nothing.
1094
+ //!
1095
+ //! <b>Complexity</b>: Constant.
1096
+ const_reverse_iterator rbegin() const BOOST_CONTAINER_NOEXCEPT
1097
+ { return this->crbegin(); }
1098
+
1099
+ //! <b>Effects</b>: Returns a reverse_iterator pointing to the end
1100
+ //! of the reversed container.
1101
+ //!
1102
+ //! <b>Throws</b>: Nothing.
1103
+ //!
1104
+ //! <b>Complexity</b>: Constant.
1105
+ reverse_iterator rend() BOOST_CONTAINER_NOEXCEPT
1106
+ { return m_tree.rend(); }
1107
+
1108
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
1109
+ //! of the reversed container.
1110
+ //!
1111
+ //! <b>Throws</b>: Nothing.
1112
+ //!
1113
+ //! <b>Complexity</b>: Constant.
1114
+ const_reverse_iterator rend() const BOOST_CONTAINER_NOEXCEPT
1115
+ { return this->crend(); }
1116
+
1117
+ //! <b>Effects</b>: Returns a const_iterator to the first element contained in the container.
1118
+ //!
1119
+ //! <b>Throws</b>: Nothing.
1120
+ //!
1121
+ //! <b>Complexity</b>: Constant.
1122
+ const_iterator cbegin() const BOOST_CONTAINER_NOEXCEPT
1123
+ { return m_tree.begin(); }
1124
+
1125
+ //! <b>Effects</b>: Returns a const_iterator to the end of the container.
1126
+ //!
1127
+ //! <b>Throws</b>: Nothing.
1128
+ //!
1129
+ //! <b>Complexity</b>: Constant.
1130
+ const_iterator cend() const BOOST_CONTAINER_NOEXCEPT
1131
+ { return m_tree.end(); }
1132
+
1133
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the beginning
1134
+ //! of the reversed container.
1135
+ //!
1136
+ //! <b>Throws</b>: Nothing.
1137
+ //!
1138
+ //! <b>Complexity</b>: Constant.
1139
+ const_reverse_iterator crbegin() const BOOST_CONTAINER_NOEXCEPT
1140
+ { return m_tree.rbegin(); }
1141
+
1142
+ //! <b>Effects</b>: Returns a const_reverse_iterator pointing to the end
1143
+ //! of the reversed container.
1144
+ //!
1145
+ //! <b>Throws</b>: Nothing.
1146
+ //!
1147
+ //! <b>Complexity</b>: Constant.
1148
+ const_reverse_iterator crend() const BOOST_CONTAINER_NOEXCEPT
1149
+ { return m_tree.rend(); }
1150
+
1151
+ //////////////////////////////////////////////
1152
+ //
1153
+ // capacity
1154
+ //
1155
+ //////////////////////////////////////////////
1156
+
1157
+ //! <b>Effects</b>: Returns true if the container contains no elements.
1158
+ //!
1159
+ //! <b>Throws</b>: Nothing.
1160
+ //!
1161
+ //! <b>Complexity</b>: Constant.
1162
+ bool empty() const BOOST_CONTAINER_NOEXCEPT
1163
+ { return m_tree.empty(); }
1164
+
1165
+ //! <b>Effects</b>: Returns the number of the elements contained in the container.
1166
+ //!
1167
+ //! <b>Throws</b>: Nothing.
1168
+ //!
1169
+ //! <b>Complexity</b>: Constant.
1170
+ size_type size() const BOOST_CONTAINER_NOEXCEPT
1171
+ { return m_tree.size(); }
1172
+
1173
+ //! <b>Effects</b>: Returns the largest possible size of the container.
1174
+ //!
1175
+ //! <b>Throws</b>: Nothing.
1176
+ //!
1177
+ //! <b>Complexity</b>: Constant.
1178
+ size_type max_size() const BOOST_CONTAINER_NOEXCEPT
1179
+ { return m_tree.max_size(); }
1180
+
1181
+ //////////////////////////////////////////////
1182
+ //
1183
+ // modifiers
1184
+ //
1185
+ //////////////////////////////////////////////
1186
+
1187
+ #if defined(BOOST_CONTAINER_PERFECT_FORWARDING) || defined(BOOST_CONTAINER_DOXYGEN_INVOKED)
1188
+
1189
+ //! <b>Effects</b>: Inserts an object of type T constructed with
1190
+ //! std::forward<Args>(args)... in the container.
1191
+ //! p is a hint pointing to where the insert should start to search.
1192
+ //!
1193
+ //! <b>Returns</b>: An iterator pointing to the element with key equivalent
1194
+ //! to the key of x.
1195
+ //!
1196
+ //! <b>Complexity</b>: Logarithmic in general, but amortized constant if t
1197
+ //! is inserted right before p.
1198
+ template <class... Args>
1199
+ iterator emplace(Args&&... args)
1200
+ { return m_tree.emplace_equal(boost::forward<Args>(args)...); }
1201
+
1202
+ //! <b>Effects</b>: Inserts an object of type T constructed with
1203
+ //! std::forward<Args>(args)... in the container.
1204
+ //! p is a hint pointing to where the insert should start to search.
1205
+ //!
1206
+ //! <b>Returns</b>: An iterator pointing to the element with key equivalent
1207
+ //! to the key of x.
1208
+ //!
1209
+ //! <b>Complexity</b>: Logarithmic in general, but amortized constant if t
1210
+ //! is inserted right before p.
1211
+ template <class... Args>
1212
+ iterator emplace_hint(const_iterator hint, Args&&... args)
1213
+ { return m_tree.emplace_hint_equal(hint, boost::forward<Args>(args)...); }
1214
+
1215
+ #else //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING
1216
+
1217
+ #define BOOST_PP_LOCAL_MACRO(n) \
1218
+ BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \
1219
+ iterator emplace(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \
1220
+ { return m_tree.emplace_equal(BOOST_PP_ENUM(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _)); } \
1221
+ \
1222
+ BOOST_PP_EXPR_IF(n, template<) BOOST_PP_ENUM_PARAMS(n, class P) BOOST_PP_EXPR_IF(n, >) \
1223
+ iterator emplace_hint(const_iterator hint \
1224
+ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_LIST, _)) \
1225
+ { return m_tree.emplace_hint_equal(hint \
1226
+ BOOST_PP_ENUM_TRAILING(n, BOOST_CONTAINER_PP_PARAM_FORWARD, _));} \
1227
+ //!
1228
+ #define BOOST_PP_LOCAL_LIMITS (0, BOOST_CONTAINER_MAX_CONSTRUCTOR_PARAMETERS)
1229
+ #include BOOST_PP_LOCAL_ITERATE()
1230
+
1231
+ #endif //#ifdef BOOST_CONTAINER_PERFECT_FORWARDING
1232
+
1233
+ //! <b>Effects</b>: Inserts x and returns the iterator pointing to the
1234
+ //! newly inserted element.
1235
+ //!
1236
+ //! <b>Complexity</b>: Logarithmic.
1237
+ iterator insert(const value_type& x)
1238
+ { return m_tree.insert_equal(x); }
1239
+
1240
+ //! <b>Effects</b>: Inserts a new value constructed from x and returns
1241
+ //! the iterator pointing to the newly inserted element.
1242
+ //!
1243
+ //! <b>Complexity</b>: Logarithmic.
1244
+ iterator insert(const nonconst_value_type& x)
1245
+ { return m_tree.insert_equal(x); }
1246
+
1247
+ //! <b>Effects</b>: Inserts a new value move-constructed from x and returns
1248
+ //! the iterator pointing to the newly inserted element.
1249
+ //!
1250
+ //! <b>Complexity</b>: Logarithmic.
1251
+ iterator insert(BOOST_RV_REF(nonconst_value_type) x)
1252
+ { return m_tree.insert_equal(boost::move(x)); }
1253
+
1254
+ //! <b>Effects</b>: Inserts a new value move-constructed from x and returns
1255
+ //! the iterator pointing to the newly inserted element.
1256
+ //!
1257
+ //! <b>Complexity</b>: Logarithmic.
1258
+ iterator insert(BOOST_RV_REF(movable_value_type) x)
1259
+ { return m_tree.insert_equal(boost::move(x)); }
1260
+
1261
+ //! <b>Effects</b>: Inserts a copy of x in the container.
1262
+ //! p is a hint pointing to where the insert should start to search.
1263
+ //!
1264
+ //! <b>Returns</b>: An iterator pointing to the element with key equivalent
1265
+ //! to the key of x.
1266
+ //!
1267
+ //! <b>Complexity</b>: Logarithmic in general, but amortized constant if t
1268
+ //! is inserted right before p.
1269
+ iterator insert(const_iterator position, const value_type& x)
1270
+ { return m_tree.insert_equal(position, x); }
1271
+
1272
+ //! <b>Effects</b>: Inserts a new value constructed from x in the container.
1273
+ //! p is a hint pointing to where the insert should start to search.
1274
+ //!
1275
+ //! <b>Returns</b>: An iterator pointing to the element with key equivalent
1276
+ //! to the key of x.
1277
+ //!
1278
+ //! <b>Complexity</b>: Logarithmic in general, but amortized constant if t
1279
+ //! is inserted right before p.
1280
+ iterator insert(const_iterator position, const nonconst_value_type& x)
1281
+ { return m_tree.insert_equal(position, x); }
1282
+
1283
+ //! <b>Effects</b>: Inserts a new value move constructed from x in the container.
1284
+ //! p is a hint pointing to where the insert should start to search.
1285
+ //!
1286
+ //! <b>Returns</b>: An iterator pointing to the element with key equivalent
1287
+ //! to the key of x.
1288
+ //!
1289
+ //! <b>Complexity</b>: Logarithmic in general, but amortized constant if t
1290
+ //! is inserted right before p.
1291
+ iterator insert(const_iterator position, BOOST_RV_REF(nonconst_value_type) x)
1292
+ { return m_tree.insert_equal(position, boost::move(x)); }
1293
+
1294
+ //! <b>Effects</b>: Inserts a new value move constructed from x in the container.
1295
+ //! p is a hint pointing to where the insert should start to search.
1296
+ //!
1297
+ //! <b>Returns</b>: An iterator pointing to the element with key equivalent
1298
+ //! to the key of x.
1299
+ //!
1300
+ //! <b>Complexity</b>: Logarithmic in general, but amortized constant if t
1301
+ //! is inserted right before p.
1302
+ iterator insert(const_iterator position, BOOST_RV_REF(movable_value_type) x)
1303
+ { return m_tree.insert_equal(position, boost::move(x)); }
1304
+
1305
+ //! <b>Requires</b>: first, last are not iterators into *this.
1306
+ //!
1307
+ //! <b>Effects</b>: inserts each element from the range [first,last) .
1308
+ //!
1309
+ //! <b>Complexity</b>: At most N log(size()+N) (N is the distance from first to last)
1310
+ template <class InputIterator>
1311
+ void insert(InputIterator first, InputIterator last)
1312
+ { m_tree.insert_equal(first, last); }
1313
+
1314
+ //! <b>Effects</b>: Erases the element pointed to by position.
1315
+ //!
1316
+ //! <b>Returns</b>: Returns an iterator pointing to the element immediately
1317
+ //! following q prior to the element being erased. If no such element exists,
1318
+ //! returns end().
1319
+ //!
1320
+ //! <b>Complexity</b>: Amortized constant time
1321
+ iterator erase(const_iterator position) BOOST_CONTAINER_NOEXCEPT
1322
+ { return m_tree.erase(position); }
1323
+
1324
+ //! <b>Effects</b>: Erases all elements in the container with key equivalent to x.
1325
+ //!
1326
+ //! <b>Returns</b>: Returns the number of erased elements.
1327
+ //!
1328
+ //! <b>Complexity</b>: log(size()) + count(k)
1329
+ size_type erase(const key_type& x) BOOST_CONTAINER_NOEXCEPT
1330
+ { return m_tree.erase(x); }
1331
+
1332
+ //! <b>Effects</b>: Erases all the elements in the range [first, last).
1333
+ //!
1334
+ //! <b>Returns</b>: Returns last.
1335
+ //!
1336
+ //! <b>Complexity</b>: log(size())+N where N is the distance from first to last.
1337
+ iterator erase(const_iterator first, const_iterator last) BOOST_CONTAINER_NOEXCEPT
1338
+ { return m_tree.erase(first, last); }
1339
+
1340
+ //! <b>Effects</b>: Swaps the contents of *this and x.
1341
+ //!
1342
+ //! <b>Throws</b>: Nothing.
1343
+ //!
1344
+ //! <b>Complexity</b>: Constant.
1345
+ void swap(multimap& x)
1346
+ { m_tree.swap(x.m_tree); }
1347
+
1348
+ //! <b>Effects</b>: erase(a.begin(),a.end()).
1349
+ //!
1350
+ //! <b>Postcondition</b>: size() == 0.
1351
+ //!
1352
+ //! <b>Complexity</b>: linear in size().
1353
+ void clear() BOOST_CONTAINER_NOEXCEPT
1354
+ { m_tree.clear(); }
1355
+
1356
+ //////////////////////////////////////////////
1357
+ //
1358
+ // observers
1359
+ //
1360
+ //////////////////////////////////////////////
1361
+
1362
+ //! <b>Effects</b>: Returns the comparison object out
1363
+ //! of which a was constructed.
1364
+ //!
1365
+ //! <b>Complexity</b>: Constant.
1366
+ key_compare key_comp() const
1367
+ { return m_tree.key_comp(); }
1368
+
1369
+ //! <b>Effects</b>: Returns an object of value_compare constructed out
1370
+ //! of the comparison object.
1371
+ //!
1372
+ //! <b>Complexity</b>: Constant.
1373
+ value_compare value_comp() const
1374
+ { return value_compare(m_tree.key_comp()); }
1375
+
1376
+ //////////////////////////////////////////////
1377
+ //
1378
+ // map operations
1379
+ //
1380
+ //////////////////////////////////////////////
1381
+
1382
+ //! <b>Returns</b>: An iterator pointing to an element with the key
1383
+ //! equivalent to x, or end() if such an element is not found.
1384
+ //!
1385
+ //! <b>Complexity</b>: Logarithmic.
1386
+ iterator find(const key_type& x)
1387
+ { return m_tree.find(x); }
1388
+
1389
+ //! <b>Returns</b>: Allocator const iterator pointing to an element with the key
1390
+ //! equivalent to x, or end() if such an element is not found.
1391
+ //!
1392
+ //! <b>Complexity</b>: Logarithmic.
1393
+ const_iterator find(const key_type& x) const
1394
+ { return m_tree.find(x); }
1395
+
1396
+ //! <b>Returns</b>: The number of elements with key equivalent to x.
1397
+ //!
1398
+ //! <b>Complexity</b>: log(size())+count(k)
1399
+ size_type count(const key_type& x) const
1400
+ { return m_tree.count(x); }
1401
+
1402
+ //! <b>Returns</b>: An iterator pointing to the first element with key not less
1403
+ //! than k, or a.end() if such an element is not found.
1404
+ //!
1405
+ //! <b>Complexity</b>: Logarithmic
1406
+ iterator lower_bound(const key_type& x)
1407
+ {return m_tree.lower_bound(x); }
1408
+
1409
+ //! <b>Returns</b>: Allocator const iterator pointing to the first element with key not
1410
+ //! less than k, or a.end() if such an element is not found.
1411
+ //!
1412
+ //! <b>Complexity</b>: Logarithmic
1413
+ const_iterator lower_bound(const key_type& x) const
1414
+ { return m_tree.lower_bound(x); }
1415
+
1416
+ //! <b>Returns</b>: An iterator pointing to the first element with key not less
1417
+ //! than x, or end() if such an element is not found.
1418
+ //!
1419
+ //! <b>Complexity</b>: Logarithmic
1420
+ iterator upper_bound(const key_type& x)
1421
+ { return m_tree.upper_bound(x); }
1422
+
1423
+ //! <b>Returns</b>: Allocator const iterator pointing to the first element with key not
1424
+ //! less than x, or end() if such an element is not found.
1425
+ //!
1426
+ //! <b>Complexity</b>: Logarithmic
1427
+ const_iterator upper_bound(const key_type& x) const
1428
+ { return m_tree.upper_bound(x); }
1429
+
1430
+ //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
1431
+ //!
1432
+ //! <b>Complexity</b>: Logarithmic
1433
+ std::pair<iterator,iterator> equal_range(const key_type& x)
1434
+ { return m_tree.equal_range(x); }
1435
+
1436
+ //! <b>Effects</b>: Equivalent to std::make_pair(this->lower_bound(k), this->upper_bound(k)).
1437
+ //!
1438
+ //! <b>Complexity</b>: Logarithmic
1439
+ std::pair<const_iterator,const_iterator> equal_range(const key_type& x) const
1440
+ { return m_tree.equal_range(x); }
1441
+
1442
+ /// @cond
1443
+ template <class K1, class T1, class C1, class A1>
1444
+ friend bool operator== (const multimap<K1, T1, C1, A1>& x,
1445
+ const multimap<K1, T1, C1, A1>& y);
1446
+
1447
+ template <class K1, class T1, class C1, class A1>
1448
+ friend bool operator< (const multimap<K1, T1, C1, A1>& x,
1449
+ const multimap<K1, T1, C1, A1>& y);
1450
+ /// @endcond
1451
+ };
1452
+
1453
+ template <class Key, class T, class Compare, class Allocator>
1454
+ inline bool operator==(const multimap<Key,T,Compare,Allocator>& x,
1455
+ const multimap<Key,T,Compare,Allocator>& y)
1456
+ { return x.m_tree == y.m_tree; }
1457
+
1458
+ template <class Key, class T, class Compare, class Allocator>
1459
+ inline bool operator<(const multimap<Key,T,Compare,Allocator>& x,
1460
+ const multimap<Key,T,Compare,Allocator>& y)
1461
+ { return x.m_tree < y.m_tree; }
1462
+
1463
+ template <class Key, class T, class Compare, class Allocator>
1464
+ inline bool operator!=(const multimap<Key,T,Compare,Allocator>& x,
1465
+ const multimap<Key,T,Compare,Allocator>& y)
1466
+ { return !(x == y); }
1467
+
1468
+ template <class Key, class T, class Compare, class Allocator>
1469
+ inline bool operator>(const multimap<Key,T,Compare,Allocator>& x,
1470
+ const multimap<Key,T,Compare,Allocator>& y)
1471
+ { return y < x; }
1472
+
1473
+ template <class Key, class T, class Compare, class Allocator>
1474
+ inline bool operator<=(const multimap<Key,T,Compare,Allocator>& x,
1475
+ const multimap<Key,T,Compare,Allocator>& y)
1476
+ { return !(y < x); }
1477
+
1478
+ template <class Key, class T, class Compare, class Allocator>
1479
+ inline bool operator>=(const multimap<Key,T,Compare,Allocator>& x,
1480
+ const multimap<Key,T,Compare,Allocator>& y)
1481
+ { return !(x < y); }
1482
+
1483
+ template <class Key, class T, class Compare, class Allocator>
1484
+ inline void swap(multimap<Key,T,Compare,Allocator>& x, multimap<Key,T,Compare,Allocator>& y)
1485
+ { x.swap(y); }
1486
+
1487
+ /// @cond
1488
+
1489
+ } //namespace container {
1490
+
1491
+ //!has_trivial_destructor_after_move<> == true_type
1492
+ //!specialization for optimizations
1493
+ template <class K, class T, class C, class Allocator>
1494
+ struct has_trivial_destructor_after_move<boost::container::multimap<K, T, C, Allocator> >
1495
+ {
1496
+ static const bool value = has_trivial_destructor_after_move<Allocator>::value && has_trivial_destructor_after_move<C>::value;
1497
+ };
1498
+
1499
+ namespace container {
1500
+
1501
+ /// @endcond
1502
+
1503
+ }}
1504
+
1505
+ #include <boost/container/detail/config_end.hpp>
1506
+
1507
+ #endif /* BOOST_CONTAINER_MAP_HPP */
1508
+