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