passenger 3.0.0 → 3.0.1

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 (538) hide show
  1. data/DEVELOPERS.TXT +9 -6
  2. data/NEWS +50 -0
  3. data/Rakefile +2 -1
  4. data/bin/passenger-install-apache2-module +4 -4
  5. data/bin/passenger-install-nginx-module +1 -1
  6. data/bin/passenger-make-enterprisey +1 -1
  7. data/build/agents.rb +26 -19
  8. data/build/apache2.rb +49 -46
  9. data/build/basics.rb +37 -13
  10. data/build/common_library.rb +134 -64
  11. data/build/config.rb +18 -11
  12. data/build/cplusplus_support.rb +4 -0
  13. data/build/cxx_tests.rb +26 -12
  14. data/build/documentation.rb +18 -11
  15. data/build/integration_tests.rb +18 -11
  16. data/build/misc.rb +18 -11
  17. data/build/nginx.rb +27 -19
  18. data/build/oxt_tests.rb +18 -11
  19. data/build/packaging.rb +45 -37
  20. data/build/rpm.rb +98 -0
  21. data/build/ruby_extension.rb +19 -13
  22. data/build/ruby_tests.rb +19 -12
  23. data/build/test_basics.rb +23 -11
  24. data/debian/README.Debian +15 -0
  25. data/debian/changelog +185 -0
  26. data/debian/control +47 -19
  27. data/debian/copyright +20 -0
  28. data/debian/libapache2-mod-passenger.install +1 -0
  29. data/debian/libapache2-mod-passenger.postinst +36 -0
  30. data/debian/libapache2-mod-passenger.prerm +15 -0
  31. data/debian/passenger-common.install +4 -0
  32. data/debian/passenger.conf +4 -0
  33. data/debian/passenger.load +1 -0
  34. data/debian/rules +37 -0
  35. data/debian/watch +3 -0
  36. data/{misc → dev}/copy_boost_headers.rb +3 -0
  37. data/{misc → dev}/find_owner_pipe_leaks.rb +0 -0
  38. data/{misc → dev}/render_error_pages.rb +0 -0
  39. data/doc/Users guide Apache.html +39 -1
  40. data/doc/Users guide Apache.txt +40 -0
  41. data/doc/Users guide Nginx.html +1 -1
  42. data/doc/Users guide Standalone.html +1 -1
  43. data/doc/cxxapi/Constants_8h_source.html +1 -1
  44. data/doc/cxxapi/DirectoryMapper_8h_source.html +6 -22
  45. data/doc/cxxapi/EventedClient_8h_source.html +572 -468
  46. data/doc/cxxapi/Exceptions_8h_source.html +142 -129
  47. data/doc/cxxapi/FileDescriptor_8h_source.html +263 -199
  48. data/doc/cxxapi/MessageChannel_8h_source.html +686 -770
  49. data/doc/cxxapi/MessageServer_8h_source.html +1 -1
  50. data/doc/cxxapi/PoolOptions_8h_source.html +79 -78
  51. data/doc/cxxapi/ResourceLocator_8h_source.html +105 -55
  52. data/doc/cxxapi/SafeLibev_8h_source.html +180 -0
  53. data/doc/cxxapi/ServerInstanceDir_8h_source.html +114 -110
  54. data/doc/cxxapi/Session_8h_source.html +1 -1
  55. data/doc/cxxapi/SpawnManager_8h_source.html +208 -208
  56. data/doc/cxxapi/StaticString_8h_source.html +258 -183
  57. data/doc/cxxapi/Utils_8h_source.html +71 -54
  58. data/doc/cxxapi/annotated.html +3 -0
  59. data/doc/cxxapi/classAgentWatcher.html +2 -2
  60. data/doc/cxxapi/classPassenger_1_1DirectoryMapper-members.html +0 -1
  61. data/doc/cxxapi/classPassenger_1_1DirectoryMapper.html +0 -27
  62. data/doc/cxxapi/classPassenger_1_1EventedClient-members.html +5 -0
  63. data/doc/cxxapi/classPassenger_1_1EventedClient.html +102 -7
  64. data/doc/cxxapi/classPassenger_1_1FileDescriptor-members.html +2 -1
  65. data/doc/cxxapi/classPassenger_1_1FileDescriptor.html +34 -8
  66. data/doc/cxxapi/classPassenger_1_1FileDescriptorPair-members.html +36 -0
  67. data/doc/cxxapi/classPassenger_1_1FileDescriptorPair.html +52 -0
  68. data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +0 -3
  69. data/doc/cxxapi/classPassenger_1_1MessageChannel.html +0 -120
  70. data/doc/cxxapi/classPassenger_1_1SafeLibev-members.html +36 -0
  71. data/doc/cxxapi/classPassenger_1_1SafeLibev.html +51 -0
  72. data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +1 -0
  73. data/doc/cxxapi/classPassenger_1_1SpawnException.html +22 -0
  74. data/doc/cxxapi/classes.html +14 -14
  75. data/doc/cxxapi/files.html +2 -0
  76. data/doc/cxxapi/functions_0x63.html +6 -3
  77. data/doc/cxxapi/functions_0x64.html +9 -2
  78. data/doc/cxxapi/functions_0x67.html +6 -9
  79. data/doc/cxxapi/functions_0x69.html +3 -0
  80. data/doc/cxxapi/functions_0x77.html +8 -8
  81. data/doc/cxxapi/functions_eval.html +6 -0
  82. data/doc/cxxapi/functions_func.html +18 -17
  83. data/doc/cxxapi/functions_vars.html +8 -0
  84. data/doc/cxxapi/graph_legend.png +0 -0
  85. data/doc/cxxapi/group__Core.png +0 -0
  86. data/doc/cxxapi/group__Hooks.png +0 -0
  87. data/doc/cxxapi/hierarchy.html +3 -0
  88. data/doc/cxxapi/inherit__graph__14.map +1 -1
  89. data/doc/cxxapi/inherit__graph__14.md5 +1 -1
  90. data/doc/cxxapi/inherit__graph__14.png +0 -0
  91. data/doc/cxxapi/inherit__graph__15.map +1 -3
  92. data/doc/cxxapi/inherit__graph__15.md5 +1 -1
  93. data/doc/cxxapi/inherit__graph__15.png +0 -0
  94. data/doc/cxxapi/inherit__graph__16.map +3 -1
  95. data/doc/cxxapi/inherit__graph__16.md5 +1 -1
  96. data/doc/cxxapi/inherit__graph__16.png +0 -0
  97. data/doc/cxxapi/inherit__graph__17.map +1 -1
  98. data/doc/cxxapi/inherit__graph__17.md5 +1 -1
  99. data/doc/cxxapi/inherit__graph__17.png +0 -0
  100. data/doc/cxxapi/inherit__graph__18.map +1 -2
  101. data/doc/cxxapi/inherit__graph__18.md5 +1 -1
  102. data/doc/cxxapi/inherit__graph__18.png +0 -0
  103. data/doc/cxxapi/inherit__graph__19.map +2 -1
  104. data/doc/cxxapi/inherit__graph__19.md5 +1 -1
  105. data/doc/cxxapi/inherit__graph__19.png +0 -0
  106. data/doc/cxxapi/inherit__graph__20.map +1 -1
  107. data/doc/cxxapi/inherit__graph__20.md5 +1 -1
  108. data/doc/cxxapi/inherit__graph__20.png +0 -0
  109. data/doc/cxxapi/inherit__graph__21.map +1 -1
  110. data/doc/cxxapi/inherit__graph__21.md5 +1 -1
  111. data/doc/cxxapi/inherit__graph__21.png +0 -0
  112. data/doc/cxxapi/inherit__graph__22.map +1 -1
  113. data/doc/cxxapi/inherit__graph__22.md5 +1 -1
  114. data/doc/cxxapi/inherit__graph__22.png +0 -0
  115. data/doc/cxxapi/inherit__graph__23.map +1 -1
  116. data/doc/cxxapi/inherit__graph__23.md5 +1 -1
  117. data/doc/cxxapi/inherit__graph__23.png +0 -0
  118. data/doc/cxxapi/inherit__graph__24.map +1 -1
  119. data/doc/cxxapi/inherit__graph__24.md5 +1 -1
  120. data/doc/cxxapi/inherit__graph__24.png +0 -0
  121. data/doc/cxxapi/inherit__graph__25.map +1 -1
  122. data/doc/cxxapi/inherit__graph__25.md5 +1 -1
  123. data/doc/cxxapi/inherit__graph__25.png +0 -0
  124. data/doc/cxxapi/inherit__graph__26.map +1 -1
  125. data/doc/cxxapi/inherit__graph__26.md5 +1 -1
  126. data/doc/cxxapi/inherit__graph__26.png +0 -0
  127. data/doc/cxxapi/inherit__graph__27.map +1 -1
  128. data/doc/cxxapi/inherit__graph__27.md5 +1 -1
  129. data/doc/cxxapi/inherit__graph__27.png +0 -0
  130. data/doc/cxxapi/inherit__graph__28.map +1 -2
  131. data/doc/cxxapi/inherit__graph__28.md5 +1 -1
  132. data/doc/cxxapi/inherit__graph__28.png +0 -0
  133. data/doc/cxxapi/inherit__graph__29.map +1 -1
  134. data/doc/cxxapi/inherit__graph__29.md5 +1 -1
  135. data/doc/cxxapi/inherit__graph__29.png +0 -0
  136. data/doc/cxxapi/inherit__graph__30.map +1 -1
  137. data/doc/cxxapi/inherit__graph__30.md5 +1 -1
  138. data/doc/cxxapi/inherit__graph__30.png +0 -0
  139. data/doc/cxxapi/inherit__graph__31.map +2 -1
  140. data/doc/cxxapi/inherit__graph__31.md5 +1 -1
  141. data/doc/cxxapi/inherit__graph__31.png +0 -0
  142. data/doc/cxxapi/inherit__graph__32.map +1 -3
  143. data/doc/cxxapi/inherit__graph__32.md5 +1 -1
  144. data/doc/cxxapi/inherit__graph__32.png +0 -0
  145. data/doc/cxxapi/inherit__graph__33.map +1 -1
  146. data/doc/cxxapi/inherit__graph__33.md5 +1 -1
  147. data/doc/cxxapi/inherit__graph__33.png +0 -0
  148. data/doc/cxxapi/inherit__graph__34.map +1 -1
  149. data/doc/cxxapi/inherit__graph__34.md5 +1 -1
  150. data/doc/cxxapi/inherit__graph__34.png +0 -0
  151. data/doc/cxxapi/inherit__graph__35.map +3 -1
  152. data/doc/cxxapi/inherit__graph__35.md5 +1 -1
  153. data/doc/cxxapi/inherit__graph__35.png +0 -0
  154. data/doc/cxxapi/inherit__graph__36.map +1 -1
  155. data/doc/cxxapi/inherit__graph__36.md5 +1 -1
  156. data/doc/cxxapi/inherit__graph__36.png +0 -0
  157. data/doc/cxxapi/inherit__graph__37.map +1 -1
  158. data/doc/cxxapi/inherit__graph__37.md5 +1 -1
  159. data/doc/cxxapi/inherit__graph__37.png +0 -0
  160. data/doc/cxxapi/inherit__graph__38.map +3 -1
  161. data/doc/cxxapi/inherit__graph__38.md5 +1 -1
  162. data/doc/cxxapi/inherit__graph__38.png +0 -0
  163. data/doc/cxxapi/inherit__graph__39.map +3 -1
  164. data/doc/cxxapi/inherit__graph__39.md5 +1 -1
  165. data/doc/cxxapi/inherit__graph__39.png +0 -0
  166. data/doc/cxxapi/inherits.html +33 -24
  167. data/doc/cxxapi/namespacePassenger.html +52 -0
  168. data/doc/cxxapi/namespacemembers.html +6 -0
  169. data/doc/cxxapi/namespacemembers_func.html +6 -0
  170. data/doc/cxxapi/tree.html +8 -0
  171. data/ext/apache2/Configuration.cpp +30 -8
  172. data/ext/apache2/Configuration.hpp +15 -14
  173. data/ext/apache2/DirectoryMapper.h +0 -16
  174. data/ext/apache2/Hooks.cpp +30 -29
  175. data/ext/boost/algorithm/string/detail/case_conv.hpp +6 -6
  176. data/ext/boost/algorithm/string/detail/find_format.hpp +14 -4
  177. data/ext/boost/algorithm/string/detail/find_format_all.hpp +13 -3
  178. data/ext/boost/algorithm/string/detail/find_format_store.hpp +11 -0
  179. data/ext/boost/algorithm/string/erase.hpp +2 -2
  180. data/ext/boost/bind/placeholders.hpp +2 -2
  181. data/ext/boost/concept/detail/backward_compatibility.hpp +16 -0
  182. data/ext/boost/concept/detail/general.hpp +15 -6
  183. data/ext/boost/concept/detail/has_constraints.hpp +5 -3
  184. data/ext/boost/concept/usage.hpp +5 -4
  185. data/ext/boost/concept_check.hpp +10 -1
  186. data/ext/boost/config/abi/borland_prefix.hpp +1 -1
  187. data/ext/boost/config/auto_link.hpp +68 -21
  188. data/ext/boost/config/compiler/borland.hpp +11 -3
  189. data/ext/boost/config/compiler/clang.hpp +62 -0
  190. data/ext/boost/config/compiler/codegear.hpp +21 -7
  191. data/ext/boost/config/compiler/common_edg.hpp +4 -2
  192. data/ext/boost/config/compiler/digitalmars.hpp +1 -1
  193. data/ext/boost/config/compiler/gcc.hpp +46 -7
  194. data/ext/boost/config/compiler/gcc_xml.hpp +25 -0
  195. data/ext/boost/config/compiler/intel.hpp +23 -0
  196. data/ext/boost/config/compiler/kai.hpp +1 -1
  197. data/ext/boost/config/compiler/metrowerks.hpp +1 -1
  198. data/ext/boost/config/compiler/nvcc.hpp +86 -0
  199. data/ext/boost/config/compiler/pgi.hpp +18 -3
  200. data/ext/boost/config/compiler/sunpro_cc.hpp +19 -5
  201. data/ext/boost/config/compiler/vacpp.hpp +8 -0
  202. data/ext/boost/config/compiler/visualc.hpp +27 -11
  203. data/ext/boost/config/platform/cygwin.hpp +0 -3
  204. data/ext/boost/config/platform/symbian.hpp +94 -0
  205. data/ext/boost/config/platform/win32.hpp +8 -1
  206. data/ext/boost/config/select_compiler_config.hpp +10 -0
  207. data/ext/boost/config/select_platform_config.hpp +4 -0
  208. data/ext/boost/config/stdlib/dinkumware.hpp +11 -1
  209. data/ext/boost/config/stdlib/libcomo.hpp +1 -0
  210. data/ext/boost/config/stdlib/libstdcpp3.hpp +1 -0
  211. data/ext/boost/config/stdlib/modena.hpp +1 -0
  212. data/ext/boost/config/stdlib/msl.hpp +1 -0
  213. data/ext/boost/config/stdlib/roguewave.hpp +1 -0
  214. data/ext/boost/config/stdlib/sgi.hpp +1 -0
  215. data/ext/boost/config/stdlib/stlport.hpp +1 -0
  216. data/ext/boost/config/stdlib/vacpp.hpp +1 -0
  217. data/ext/boost/config/suffix.hpp +40 -2
  218. data/ext/boost/cstdint.hpp +36 -7
  219. data/ext/boost/date_time/gregorian/conversion.hpp +4 -2
  220. data/ext/boost/date_time/microsec_time_clock.hpp +7 -7
  221. data/ext/boost/date_time/posix_time/conversion.hpp +4 -2
  222. data/ext/boost/date_time/time_facet.hpp +43 -4
  223. data/ext/boost/detail/endian.hpp +5 -2
  224. data/ext/boost/detail/lcast_precision.hpp +2 -2
  225. data/ext/boost/detail/sp_typeinfo.hpp +1 -1
  226. data/ext/boost/detail/workaround.hpp +5 -0
  227. data/ext/boost/exception/detail/error_info_impl.hpp +3 -3
  228. data/ext/boost/exception/detail/exception_ptr.hpp +76 -135
  229. data/ext/boost/exception/detail/is_output_streamable.hpp +15 -2
  230. data/ext/boost/exception/detail/type_info.hpp +9 -5
  231. data/ext/boost/exception/diagnostic_information.hpp +5 -3
  232. data/ext/boost/exception/exception.hpp +60 -46
  233. data/ext/boost/exception/info.hpp +47 -14
  234. data/ext/boost/function/function_base.hpp +4 -4
  235. data/ext/boost/integer.hpp +4 -0
  236. data/ext/boost/integer_fwd.hpp +9 -3
  237. data/ext/boost/iterator/iterator_concepts.hpp +284 -0
  238. data/ext/boost/iterator/transform_iterator.hpp +0 -1
  239. data/ext/boost/make_shared.hpp +17 -0
  240. data/ext/boost/mpl/aux_/config/has_xxx.hpp +4 -3
  241. data/ext/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp +2 -6
  242. data/ext/boost/mpl/aux_/template_arity.hpp +4 -4
  243. data/ext/boost/mpl/eval_if.hpp +3 -3
  244. data/ext/boost/mpl/has_xxx.hpp +369 -3
  245. data/ext/boost/optional/optional.hpp +3 -1
  246. data/ext/boost/optional/optional_fwd.hpp +1 -1
  247. data/ext/boost/preprocessor/repetition/enum_trailing_params.hpp +38 -0
  248. data/ext/boost/range/algorithm/equal.hpp +188 -0
  249. data/ext/boost/range/as_literal.hpp +15 -15
  250. data/ext/boost/range/concepts.hpp +331 -0
  251. data/ext/boost/range/const_iterator.hpp +7 -4
  252. data/ext/boost/range/detail/extract_optional_type.hpp +52 -0
  253. data/ext/boost/range/detail/implementation_help.hpp +7 -7
  254. data/ext/boost/range/detail/misc_concept.hpp +33 -0
  255. data/ext/boost/range/iterator.hpp +32 -32
  256. data/ext/boost/range/iterator_range.hpp +8 -651
  257. data/ext/boost/range/iterator_range_core.hpp +542 -0
  258. data/ext/boost/range/iterator_range_io.hpp +93 -0
  259. data/ext/boost/range/mutable_iterator.hpp +7 -4
  260. data/ext/boost/range/size.hpp +1 -1
  261. data/ext/boost/range/size_type.hpp +2 -1
  262. data/ext/boost/shared_array.hpp +19 -0
  263. data/ext/boost/smart_ptr/detail/sp_convertible.hpp +2 -2
  264. data/ext/boost/smart_ptr/detail/yield_k.hpp +1 -1
  265. data/ext/boost/smart_ptr/make_shared.hpp +508 -0
  266. data/ext/boost/smart_ptr/shared_array.hpp +147 -0
  267. data/ext/boost/src/pthread/thread.cpp +16 -21
  268. data/ext/boost/src/pthread/timeconv.inl +7 -4
  269. data/ext/boost/thread/barrier.hpp +2 -1
  270. data/ext/boost/thread/detail/config.hpp +7 -1
  271. data/ext/boost/thread/detail/platform.hpp +1 -1
  272. data/ext/boost/thread/detail/thread.hpp +62 -18
  273. data/ext/boost/thread/detail/thread_group.hpp +5 -2
  274. data/ext/boost/thread/detail/tss_hooks.hpp +8 -25
  275. data/ext/boost/thread/future.hpp +45 -34
  276. data/ext/boost/thread/locks.hpp +184 -55
  277. data/ext/boost/thread/pthread/condition_variable.hpp +7 -7
  278. data/ext/boost/thread/pthread/condition_variable_fwd.hpp +4 -2
  279. data/ext/boost/thread/pthread/mutex.hpp +29 -17
  280. data/ext/boost/thread/pthread/once.hpp +5 -0
  281. data/ext/boost/thread/pthread/recursive_mutex.hpp +97 -18
  282. data/ext/boost/thread/pthread/shared_mutex.hpp +1 -1
  283. data/ext/boost/thread/pthread/thread_heap_alloc.hpp +1 -1
  284. data/ext/boost/thread/tss.hpp +2 -0
  285. data/ext/boost/throw_exception.hpp +21 -5
  286. data/ext/boost/token_functions.hpp +111 -91
  287. data/ext/boost/type_traits/add_reference.hpp +19 -1
  288. data/ext/boost/type_traits/function_traits.hpp +2 -2
  289. data/ext/boost/type_traits/is_const.hpp +24 -5
  290. data/ext/boost/type_traits/is_convertible.hpp +1 -1
  291. data/ext/boost/type_traits/is_function.hpp +3 -0
  292. data/ext/boost/type_traits/is_lvalue_reference.hpp +118 -0
  293. data/ext/boost/type_traits/is_reference.hpp +8 -81
  294. data/ext/boost/type_traits/is_rvalue_reference.hpp +29 -0
  295. data/ext/boost/type_traits/is_same.hpp +2 -2
  296. data/ext/boost/type_traits/is_volatile.hpp +26 -7
  297. data/ext/boost/type_traits/remove_const.hpp +12 -0
  298. data/ext/boost/type_traits/remove_cv.hpp +23 -1
  299. data/ext/boost/type_traits/remove_reference.hpp +21 -1
  300. data/ext/boost/type_traits/type_with_alignment.hpp +10 -10
  301. data/ext/boost/units/detail/utility.hpp +104 -0
  302. data/ext/boost/utility/compare_pointees.hpp +1 -1
  303. data/ext/common/AgentsStarter.hpp +151 -161
  304. data/ext/common/ApplicationPool/Pool.h +16 -4
  305. data/ext/common/Constants.h +1 -1
  306. data/ext/common/EventedClient.h +130 -26
  307. data/ext/common/Exceptions.h +15 -2
  308. data/ext/common/FileDescriptor.h +76 -12
  309. data/ext/common/IniFile.h +488 -0
  310. data/ext/common/LoggingAgent/LoggingServer.h +2 -2
  311. data/ext/common/LoggingAgent/RemoteSender.h +15 -6
  312. data/ext/common/MessageChannel.h +17 -101
  313. data/ext/common/PoolOptions.h +1 -0
  314. data/ext/common/ResourceLocator.h +78 -28
  315. data/ext/common/SafeLibev.h +149 -0
  316. data/ext/common/ServerInstanceDir.h +11 -7
  317. data/ext/common/Session.h +1 -1
  318. data/ext/common/SpawnManager.h +14 -14
  319. data/ext/common/StaticString.h +75 -0
  320. data/ext/common/Utils.cpp +304 -12
  321. data/ext/common/Utils.h +17 -0
  322. data/ext/common/Utils/BufferedIO.h +196 -0
  323. data/ext/common/Utils/IOUtils.cpp +159 -0
  324. data/ext/common/Utils/IOUtils.h +118 -1
  325. data/ext/common/Utils/ProcessMetricsCollector.h +184 -56
  326. data/ext/common/Utils/StrIntUtils.cpp +45 -11
  327. data/ext/common/Utils/StrIntUtils.h +8 -5
  328. data/ext/common/Utils/Timer.h +22 -0
  329. data/ext/common/Utils/utf8.h +35 -0
  330. data/ext/common/Utils/utf8/checked.h +324 -0
  331. data/ext/common/Utils/utf8/core.h +359 -0
  332. data/ext/common/Utils/utf8/unchecked.h +229 -0
  333. data/ext/common/Watchdog.cpp +52 -85
  334. data/ext/libev/config.h +122 -0
  335. data/ext/nginx/Configuration.c +7 -1
  336. data/ext/nginx/HelperAgent.cpp +16 -18
  337. data/ext/nginx/config +6 -4
  338. data/ext/oxt/system_calls.cpp +10 -0
  339. data/ext/oxt/system_calls.hpp +2 -0
  340. data/lib/phusion_passenger.rb +6 -11
  341. data/lib/phusion_passenger/dependencies.rb +2 -0
  342. data/lib/phusion_passenger/packaging.rb +5 -5
  343. data/lib/phusion_passenger/platform_info.rb +88 -0
  344. data/lib/phusion_passenger/platform_info/binary_compatibility.rb +3 -17
  345. data/lib/phusion_passenger/platform_info/compiler.rb +14 -32
  346. data/lib/phusion_passenger/platform_info/curl.rb +6 -1
  347. data/lib/phusion_passenger/platform_info/operating_system.rb +107 -0
  348. data/lib/phusion_passenger/public_api.rb +2 -2
  349. data/lib/phusion_passenger/rails3_extensions/init.rb +5 -2
  350. data/lib/phusion_passenger/standalone/command.rb +6 -2
  351. data/lib/phusion_passenger/standalone/package_runtime_command.rb +2 -2
  352. data/lib/phusion_passenger/standalone/runtime_installer.rb +17 -5
  353. data/lib/phusion_passenger/standalone/start_command.rb +12 -12
  354. data/lib/phusion_passenger/standalone/stop_command.rb +3 -3
  355. data/lib/phusion_passenger/standalone/utils.rb +6 -2
  356. data/lib/phusion_passenger/templates/standalone/config.erb +37 -5
  357. data/lib/phusion_passenger/utils.rb +4 -7
  358. data/resources/mime.types +73 -0
  359. data/{misc → resources}/union_station_gateway.crt +0 -0
  360. data/test/cxx/BufferedIOTest.cpp +364 -0
  361. data/test/cxx/EventedClientTest.cpp +150 -13
  362. data/test/cxx/IOUtilsTest.cpp +399 -1
  363. data/test/cxx/MessageChannelTest.cpp +5 -120
  364. data/test/cxx/ProcessMetricsCollectorTest.cpp +121 -0
  365. data/test/cxx/StaticStringTest.cpp +134 -0
  366. data/test/cxx/UtilsTest.cpp +16 -46
  367. data/test/stub/rails_apps/2.3/mycook/public/dispatch.cgi +2 -2
  368. data/test/stub/rails_apps/2.3/mycook/public/dispatch.fcgi +1 -1
  369. data/test/stub/rails_apps/2.3/mycook/public/dispatch.rb +1 -1
  370. data/test/stub/rails_apps/3.0/empty/Gemfile.lock +73 -0
  371. data/test/support/allocate_memory.c +14 -0
  372. data/test/support/test_helper.rb +3 -0
  373. metadata +57 -174
  374. data/bin/passenger-stress-test +0 -345
  375. data/debian/postinst +0 -24
  376. data/doc/rdoc/classes/ConditionVariable.html +0 -215
  377. data/doc/rdoc/classes/Exception.html +0 -120
  378. data/doc/rdoc/classes/GC.html +0 -113
  379. data/doc/rdoc/classes/IO.html +0 -221
  380. data/doc/rdoc/classes/PhusionPassenger.html +0 -397
  381. data/doc/rdoc/classes/PhusionPassenger/AbstractInstaller.html +0 -180
  382. data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +0 -647
  383. data/doc/rdoc/classes/PhusionPassenger/AbstractServer.html +0 -654
  384. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/InvalidPassword.html +0 -92
  385. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerAlreadyStarted.html +0 -97
  386. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerError.html +0 -96
  387. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerNotStarted.html +0 -97
  388. data/doc/rdoc/classes/PhusionPassenger/AbstractServer/UnknownMessage.html +0 -96
  389. data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +0 -619
  390. data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +0 -142
  391. data/doc/rdoc/classes/PhusionPassenger/AdminTools/MemoryStats.html +0 -368
  392. data/doc/rdoc/classes/PhusionPassenger/AdminTools/MemoryStats/Process.html +0 -231
  393. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance.html +0 -588
  394. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/CorruptedDirectoryError.html +0 -92
  395. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/GenerationsAbsentError.html +0 -92
  396. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Group.html +0 -147
  397. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Process.html +0 -279
  398. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/RoleDeniedError.html +0 -92
  399. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/StaleDirectoryError.html +0 -92
  400. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Stats.html +0 -123
  401. data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/UnsupportedGenerationStructureVersionError.html +0 -92
  402. data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger.html +0 -341
  403. data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger/Log.html +0 -294
  404. data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger/SharedData.html +0 -199
  405. data/doc/rdoc/classes/PhusionPassenger/AppInitError.html +0 -155
  406. data/doc/rdoc/classes/PhusionPassenger/AppProcess.html +0 -367
  407. data/doc/rdoc/classes/PhusionPassenger/ClassicRails.html +0 -95
  408. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/ApplicationSpawner.html +0 -351
  409. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/ApplicationSpawner/Error.html +0 -98
  410. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/CGIFixed.html +0 -200
  411. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/FrameworkSpawner.html +0 -410
  412. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/FrameworkSpawner/Error.html +0 -98
  413. data/doc/rdoc/classes/PhusionPassenger/ClassicRails/RequestHandler.html +0 -156
  414. data/doc/rdoc/classes/PhusionPassenger/ClassicRailsExtensions.html +0 -115
  415. data/doc/rdoc/classes/PhusionPassenger/ClassicRailsExtensions/AnalyticsLogging.html +0 -202
  416. data/doc/rdoc/classes/PhusionPassenger/ConsoleTextTemplate.html +0 -172
  417. data/doc/rdoc/classes/PhusionPassenger/DebugLogging.html +0 -273
  418. data/doc/rdoc/classes/PhusionPassenger/FrameworkInitError.html +0 -145
  419. data/doc/rdoc/classes/PhusionPassenger/HTMLTemplate.html +0 -162
  420. data/doc/rdoc/classes/PhusionPassenger/InitializationError.html +0 -141
  421. data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +0 -92
  422. data/doc/rdoc/classes/PhusionPassenger/MessageChannel.html +0 -673
  423. data/doc/rdoc/classes/PhusionPassenger/MessageChannel/InvalidHashError.html +0 -92
  424. data/doc/rdoc/classes/PhusionPassenger/MessageClient.html +0 -415
  425. data/doc/rdoc/classes/PhusionPassenger/NativeSupportLoader.html +0 -134
  426. data/doc/rdoc/classes/PhusionPassenger/Packaging.html +0 -129
  427. data/doc/rdoc/classes/PhusionPassenger/PlatformInfo.html +0 -1809
  428. data/doc/rdoc/classes/PhusionPassenger/Plugin.html +0 -237
  429. data/doc/rdoc/classes/PhusionPassenger/Rack.html +0 -91
  430. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +0 -312
  431. data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner/Error.html +0 -98
  432. data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +0 -218
  433. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions.html +0 -114
  434. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging.html +0 -256
  435. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ACExtension.html +0 -139
  436. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ASBenchmarkableExtension.html +0 -118
  437. data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ExceptionLogger.html +0 -135
  438. data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +0 -378
  439. data/doc/rdoc/classes/PhusionPassenger/Standalone.html +0 -111
  440. data/doc/rdoc/classes/PhusionPassenger/Standalone/AppFinder.html +0 -252
  441. data/doc/rdoc/classes/PhusionPassenger/Standalone/Command.html +0 -161
  442. data/doc/rdoc/classes/PhusionPassenger/Standalone/ConfigFile.html +0 -368
  443. data/doc/rdoc/classes/PhusionPassenger/Standalone/ConfigFile/DisallowedContextError.html +0 -132
  444. data/doc/rdoc/classes/PhusionPassenger/Standalone/HelpCommand.html +0 -151
  445. data/doc/rdoc/classes/PhusionPassenger/Standalone/Main.html +0 -189
  446. data/doc/rdoc/classes/PhusionPassenger/Standalone/PackageRuntimeCommand.html +0 -177
  447. data/doc/rdoc/classes/PhusionPassenger/Standalone/RuntimeInstaller.html +0 -341
  448. data/doc/rdoc/classes/PhusionPassenger/Standalone/StartCommand.html +0 -203
  449. data/doc/rdoc/classes/PhusionPassenger/Standalone/StatusCommand.html +0 -156
  450. data/doc/rdoc/classes/PhusionPassenger/Standalone/StopCommand.html +0 -168
  451. data/doc/rdoc/classes/PhusionPassenger/Standalone/Utils.html +0 -86
  452. data/doc/rdoc/classes/PhusionPassenger/Standalone/VersionCommand.html +0 -135
  453. data/doc/rdoc/classes/PhusionPassenger/UnknownError.html +0 -125
  454. data/doc/rdoc/classes/PhusionPassenger/Utils.html +0 -1550
  455. data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher.html +0 -204
  456. data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher/DirInfo.html +0 -171
  457. data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher/FileInfo.html +0 -140
  458. data/doc/rdoc/classes/PhusionPassenger/Utils/HostsFileParser.html +0 -260
  459. data/doc/rdoc/classes/PhusionPassenger/Utils/PseudoIO.html +0 -169
  460. data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput.html +0 -265
  461. data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput/Tempfile.html +0 -120
  462. data/doc/rdoc/classes/PhusionPassenger/Utils/UnseekableSocket.html +0 -561
  463. data/doc/rdoc/classes/PhusionPassenger/VersionNotFound.html +0 -140
  464. data/doc/rdoc/classes/PhusionPassenger/WSGI.html +0 -89
  465. data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +0 -182
  466. data/doc/rdoc/classes/Process.html +0 -115
  467. data/doc/rdoc/classes/Signal.html +0 -139
  468. data/doc/rdoc/created.rid +0 -1
  469. data/doc/rdoc/files/DEVELOPERS_TXT.html +0 -276
  470. data/doc/rdoc/files/README.html +0 -157
  471. data/doc/rdoc/files/lib/phusion_passenger/abstract_installer_rb.html +0 -130
  472. data/doc/rdoc/files/lib/phusion_passenger/abstract_request_handler_rb.html +0 -135
  473. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +0 -126
  474. data/doc/rdoc/files/lib/phusion_passenger/abstract_server_rb.html +0 -128
  475. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/memory_stats_rb.html +0 -126
  476. data/doc/rdoc/files/lib/phusion_passenger/admin_tools/server_instance_rb.html +0 -132
  477. data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +0 -122
  478. data/doc/rdoc/files/lib/phusion_passenger/analytics_logger_rb.html +0 -129
  479. data/doc/rdoc/files/lib/phusion_passenger/app_process_rb.html +0 -127
  480. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/application_spawner_rb.html +0 -141
  481. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/cgi_fixed_rb.html +0 -126
  482. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/framework_spawner_rb.html +0 -146
  483. data/doc/rdoc/files/lib/phusion_passenger/classic_rails/request_handler_rb.html +0 -125
  484. data/doc/rdoc/files/lib/phusion_passenger/classic_rails_extensions/init_rb.html +0 -132
  485. data/doc/rdoc/files/lib/phusion_passenger/console_text_template_rb.html +0 -126
  486. data/doc/rdoc/files/lib/phusion_passenger/constants_rb.html +0 -122
  487. data/doc/rdoc/files/lib/phusion_passenger/debug_logging_rb.html +0 -122
  488. data/doc/rdoc/files/lib/phusion_passenger/dependencies_rb.html +0 -147
  489. data/doc/rdoc/files/lib/phusion_passenger/exceptions_rb.html +0 -122
  490. data/doc/rdoc/files/lib/phusion_passenger/html_template_rb.html +0 -127
  491. data/doc/rdoc/files/lib/phusion_passenger/message_channel_rb.html +0 -120
  492. data/doc/rdoc/files/lib/phusion_passenger/message_client_rb.html +0 -127
  493. data/doc/rdoc/files/lib/phusion_passenger/native_support_rb.html +0 -132
  494. data/doc/rdoc/files/lib/phusion_passenger/packaging_rb.html +0 -122
  495. data/doc/rdoc/files/lib/phusion_passenger/platform_info/apache_rb.html +0 -127
  496. data/doc/rdoc/files/lib/phusion_passenger/platform_info/binary_compatibility_rb.html +0 -129
  497. data/doc/rdoc/files/lib/phusion_passenger/platform_info/compiler_rb.html +0 -126
  498. data/doc/rdoc/files/lib/phusion_passenger/platform_info/curl_rb.html +0 -126
  499. data/doc/rdoc/files/lib/phusion_passenger/platform_info/documentation_tools_rb.html +0 -126
  500. data/doc/rdoc/files/lib/phusion_passenger/platform_info/linux_rb.html +0 -126
  501. data/doc/rdoc/files/lib/phusion_passenger/platform_info/operating_system_rb.html +0 -127
  502. data/doc/rdoc/files/lib/phusion_passenger/platform_info/ruby_rb.html +0 -128
  503. data/doc/rdoc/files/lib/phusion_passenger/platform_info/zlib_rb.html +0 -126
  504. data/doc/rdoc/files/lib/phusion_passenger/platform_info_rb.html +0 -122
  505. data/doc/rdoc/files/lib/phusion_passenger/plugin_rb.html +0 -127
  506. data/doc/rdoc/files/lib/phusion_passenger/public_api_rb.html +0 -127
  507. data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +0 -137
  508. data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +0 -125
  509. data/doc/rdoc/files/lib/phusion_passenger/rails3_extensions/init_rb.html +0 -127
  510. data/doc/rdoc/files/lib/phusion_passenger/simple_benchmarking_rb.html +0 -122
  511. data/doc/rdoc/files/lib/phusion_passenger/spawn_manager_rb.html +0 -160
  512. data/doc/rdoc/files/lib/phusion_passenger/standalone/app_finder_rb.html +0 -127
  513. data/doc/rdoc/files/lib/phusion_passenger/standalone/command_rb.html +0 -135
  514. data/doc/rdoc/files/lib/phusion_passenger/standalone/config_file_rb.html +0 -126
  515. data/doc/rdoc/files/lib/phusion_passenger/standalone/help_command_rb.html +0 -126
  516. data/doc/rdoc/files/lib/phusion_passenger/standalone/main_rb.html +0 -126
  517. data/doc/rdoc/files/lib/phusion_passenger/standalone/package_runtime_command_rb.html +0 -127
  518. data/doc/rdoc/files/lib/phusion_passenger/standalone/runtime_installer_rb.html +0 -133
  519. data/doc/rdoc/files/lib/phusion_passenger/standalone/start_command_rb.html +0 -136
  520. data/doc/rdoc/files/lib/phusion_passenger/standalone/status_command_rb.html +0 -126
  521. data/doc/rdoc/files/lib/phusion_passenger/standalone/stop_command_rb.html +0 -126
  522. data/doc/rdoc/files/lib/phusion_passenger/standalone/utils_rb.html +0 -126
  523. data/doc/rdoc/files/lib/phusion_passenger/standalone/version_command_rb.html +0 -127
  524. data/doc/rdoc/files/lib/phusion_passenger/utils/file_system_watcher_rb.html +0 -126
  525. data/doc/rdoc/files/lib/phusion_passenger/utils/hosts_file_parser_rb.html +0 -120
  526. data/doc/rdoc/files/lib/phusion_passenger/utils/rewindable_input_rb.html +0 -100
  527. data/doc/rdoc/files/lib/phusion_passenger/utils/tmpdir_rb.html +0 -122
  528. data/doc/rdoc/files/lib/phusion_passenger/utils/unseekable_socket_rb.html +0 -126
  529. data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +0 -179
  530. data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +0 -132
  531. data/doc/rdoc/fr_class_index.html +0 -138
  532. data/doc/rdoc/fr_file_index.html +0 -108
  533. data/doc/rdoc/fr_method_index.html +0 -430
  534. data/doc/rdoc/index.html +0 -26
  535. data/doc/rdoc/rdoc-style.css +0 -187
  536. data/ext/apache2/LICENSE-CNRI.TXT +0 -79
  537. data/ext/common/Utils/BlockingScalar.h +0 -50
  538. data/ext/common/Utils/FileHandleGuard.h +0 -81
@@ -21,6 +21,7 @@
21
21
  #include <boost/range/detail/const_iterator.hpp>
22
22
  #else
23
23
 
24
+ #include <boost/range/detail/extract_optional_type.hpp>
24
25
  #include <boost/type_traits/remove_const.hpp>
25
26
  #include <cstddef>
26
27
  #include <utility>
@@ -31,11 +32,13 @@ namespace boost
31
32
  // default
32
33
  //////////////////////////////////////////////////////////////////////////
33
34
 
35
+ namespace range_detail {
36
+ BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( const_iterator )
37
+ }
38
+
34
39
  template< typename C >
35
- struct range_const_iterator
36
- {
37
- typedef BOOST_DEDUCED_TYPENAME C::const_iterator type;
38
- };
40
+ struct range_const_iterator : range_detail::extract_const_iterator<C>
41
+ {};
39
42
 
40
43
  //////////////////////////////////////////////////////////////////////////
41
44
  // pair
@@ -0,0 +1,52 @@
1
+ // Boost.Range library
2
+ //
3
+ // Copyright Arno Schoedl & Neil Groves 2009.
4
+ // Use, modification and distribution is subject to the Boost Software
5
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6
+ // http://www.boost.org/LICENSE_1_0.txt)
7
+ //
8
+ // For more information, see http://www.boost.org/libs/range/
9
+ //
10
+ #ifndef BOOST_RANGE_DETAIL_EXTRACT_OPTIONAL_TYPE_HPP_INCLUDED
11
+ #define BOOST_RANGE_DETAIL_EXTRACT_OPTIONAL_TYPE_HPP_INCLUDED
12
+
13
+ #if defined(_MSC_VER) && (_MSC_VER >= 1200)
14
+ # pragma once
15
+ #endif
16
+
17
+ #include <boost/config.hpp>
18
+
19
+ #ifdef BOOST_NO_PARTIAL_TEMPLATE_SPECIALIZATION
20
+
21
+ #define BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( a_typedef ) \
22
+ template< typename C > \
23
+ struct extract_ ## a_typedef \
24
+ { \
25
+ typedef BOOST_DEDUCED_TYPENAME C::a_typedef type; \
26
+ };
27
+
28
+ #else
29
+
30
+ namespace boost {
31
+ namespace range_detail {
32
+ template< typename T > struct exists { typedef void type; };
33
+ }
34
+ }
35
+
36
+ // Defines extract_some_typedef<T> which exposes T::some_typedef as
37
+ // extract_some_typedef<T>::type if T::some_typedef exists. Otherwise
38
+ // extract_some_typedef<T> is empty.
39
+ #define BOOST_RANGE_EXTRACT_OPTIONAL_TYPE( a_typedef ) \
40
+ template< typename C, typename Enable=void > \
41
+ struct extract_ ## a_typedef \
42
+ {}; \
43
+ template< typename C > \
44
+ struct extract_ ## a_typedef< C \
45
+ , BOOST_DEDUCED_TYPENAME boost::range_detail::exists< BOOST_DEDUCED_TYPENAME C::a_typedef >::type \
46
+ > { \
47
+ typedef BOOST_DEDUCED_TYPENAME C::a_typedef type; \
48
+ };
49
+
50
+ #endif
51
+
52
+ #endif // include guard
@@ -21,13 +21,13 @@
21
21
  #include <wchar.h>
22
22
  #endif
23
23
 
24
- namespace boost
24
+ namespace boost
25
25
  {
26
26
  namespace range_detail
27
27
  {
28
28
  template <typename T>
29
29
  inline void boost_range_silence_warning( const T& ) { }
30
-
30
+
31
31
  /////////////////////////////////////////////////////////////////////
32
32
  // end() help
33
33
  /////////////////////////////////////////////////////////////////////
@@ -36,7 +36,7 @@ namespace boost
36
36
  {
37
37
  return s + strlen( s );
38
38
  }
39
-
39
+
40
40
  #ifndef BOOST_NO_CWCHAR
41
41
  inline const wchar_t* str_end( const wchar_t* s, const wchar_t* )
42
42
  {
@@ -51,7 +51,7 @@ namespace boost
51
51
  ;
52
52
  return s;
53
53
  }
54
- #endif
54
+ #endif
55
55
 
56
56
  template< class Char >
57
57
  inline Char* str_end( Char* s )
@@ -64,7 +64,7 @@ namespace boost
64
64
  {
65
65
  return boost_range_array + sz;
66
66
  }
67
-
67
+
68
68
  template< class T, std::size_t sz >
69
69
  inline const T* array_end( const T BOOST_RANGE_ARRAY_REF()[sz] )
70
70
  {
@@ -74,7 +74,7 @@ namespace boost
74
74
  /////////////////////////////////////////////////////////////////////
75
75
  // size() help
76
76
  /////////////////////////////////////////////////////////////////////
77
-
77
+
78
78
  template< class Char >
79
79
  inline std::size_t str_size( const Char* const& s )
80
80
  {
@@ -96,7 +96,7 @@ namespace boost
96
96
  }
97
97
 
98
98
  } // namespace 'range_detail'
99
-
99
+
100
100
  } // namespace 'boost'
101
101
 
102
102
 
@@ -0,0 +1,33 @@
1
+ // Boost.Range library concept checks
2
+ //
3
+ // Copyright Neil Groves 2009. Use, modification and distribution
4
+ // are subject to the Boost Software License, Version 1.0. (See
5
+ // accompanying file LICENSE_1_0.txt or copy at
6
+ // http://www.boost.org/LICENSE_1_0.txt)
7
+ //
8
+ #ifndef BOOST_RANGE_DETAIL_MISC_CONCEPT_HPP_INCLUDED
9
+ #define BOOST_RANGE_DETAIL_MISC_CONCEPT_HPP_INCLUDED
10
+
11
+ #include <boost/concept_check.hpp>
12
+
13
+ namespace boost
14
+ {
15
+ namespace range_detail
16
+ {
17
+ template<typename T1, typename T2>
18
+ class SameTypeConcept
19
+ {
20
+ public:
21
+ BOOST_CONCEPT_USAGE(SameTypeConcept)
22
+ {
23
+ same_type(a,b);
24
+ }
25
+ private:
26
+ template<typename T> void same_type(T,T) {}
27
+ T1 a;
28
+ T2 b;
29
+ };
30
+ }
31
+ }
32
+
33
+ #endif // include guard
@@ -25,46 +25,46 @@
25
25
  namespace boost
26
26
  {
27
27
 
28
- #if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
29
-
30
- namespace range_detail_vc7_1
31
- {
32
- template< typename C, typename Sig = void(C) >
33
- struct range_iterator
34
- {
35
- typedef BOOST_RANGE_DEDUCED_TYPENAME
36
- mpl::eval_if_c< is_const<C>::value,
37
- range_const_iterator< typename remove_const<C>::type >,
38
- range_mutable_iterator<C> >::type type;
39
- };
40
-
41
- template< typename C, typename T >
42
- struct range_iterator< C, void(T[]) >
43
- {
44
- typedef T* type;
45
- };
46
- }
47
-
48
- #endif
28
+ #if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
29
+
30
+ namespace range_detail_vc7_1
31
+ {
32
+ template< typename C, typename Sig = void(C) >
33
+ struct range_iterator
34
+ {
35
+ typedef BOOST_RANGE_DEDUCED_TYPENAME
36
+ mpl::eval_if_c< is_const<C>::value,
37
+ range_const_iterator< typename remove_const<C>::type >,
38
+ range_mutable_iterator<C> >::type type;
39
+ };
40
+
41
+ template< typename C, typename T >
42
+ struct range_iterator< C, void(T[]) >
43
+ {
44
+ typedef T* type;
45
+ };
46
+ }
47
+
48
+ #endif
49
49
 
50
50
  template< typename C >
51
51
  struct range_iterator
52
52
  {
53
53
  #if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
54
-
55
- typedef BOOST_RANGE_DEDUCED_TYPENAME
56
- range_detail_vc7_1::range_iterator<C>::type type;
57
-
58
- #else
59
-
60
- typedef BOOST_RANGE_DEDUCED_TYPENAME
61
- mpl::eval_if_c< is_const<C>::value,
54
+
55
+ typedef BOOST_RANGE_DEDUCED_TYPENAME
56
+ range_detail_vc7_1::range_iterator<C>::type type;
57
+
58
+ #else
59
+
60
+ typedef BOOST_RANGE_DEDUCED_TYPENAME
61
+ mpl::eval_if_c< is_const<C>::value,
62
62
  range_const_iterator< typename remove_const<C>::type >,
63
63
  range_mutable_iterator<C> >::type type;
64
-
65
- #endif
64
+
65
+ #endif
66
66
  };
67
-
67
+
68
68
  } // namespace boost
69
69
 
70
70
  //#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
@@ -1,659 +1,16 @@
1
1
  // Boost.Range library
2
2
  //
3
- // Copyright Thorsten Ottosen & Pavol Droba 2003-2004. Use, modification and
4
- // distribution is subject to the Boost Software License, Version
5
- // 1.0. (See accompanying file LICENSE_1_0.txt or copy at
3
+ // Copyright Neil Groves 2009.
4
+ // Use, modification and distribution is subject to the Boost Software
5
+ // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6
6
  // http://www.boost.org/LICENSE_1_0.txt)
7
7
  //
8
8
  // For more information, see http://www.boost.org/libs/range/
9
9
  //
10
+ #ifndef BOOST_RANGE_ITERATOR_RANGE_HPP_INCLUDED
11
+ #define BOOST_RANGE_ITERATOR_RANGE_HPP_INCLUDED
10
12
 
11
- #ifndef BOOST_RANGE_ITERATOR_RANGE_HPP
12
- #define BOOST_RANGE_ITERATOR_RANGE_HPP
13
-
14
- #include <boost/config.hpp> // Define __STL_CONFIG_H, if appropriate.
15
- #include <boost/detail/workaround.hpp>
16
-
17
- #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
18
- #pragma warning( push )
19
- #pragma warning( disable : 4996 )
20
- #endif
21
-
22
- // From boost/dynamic_bitset.hpp; thanks to Matthias Troyer for Cray X1 patch.
23
- #ifndef BOOST_OLD_IOSTREAMS
24
- # if defined(__STL_CONFIG_H) && \
25
- !defined (__STL_USE_NEW_IOSTREAMS) && !defined(__crayx1) \
26
- /**/
27
- # define BOOST_OLD_IOSTREAMS
28
- # endif
29
- #endif // #ifndef BOOST_OLD_IOSTREAMS
30
-
31
- #include <boost/assert.hpp>
32
- #include <boost/iterator/iterator_traits.hpp>
33
- #include <boost/type_traits/is_abstract.hpp>
34
- #include <boost/range/functions.hpp>
35
- #include <boost/range/iterator.hpp>
36
- #include <boost/range/difference_type.hpp>
37
- #include <boost/utility/enable_if.hpp>
38
- #include <iterator>
39
- #include <algorithm>
40
- #ifndef _STLP_NO_IOSTREAMS
41
- # ifndef BOOST_OLD_IOSTREAMS
42
- # include <ostream>
43
- # else
44
- # include <ostream.h>
45
- # endif
46
- #endif // _STLP_NO_IOSTREAMS
47
- #include <cstddef>
48
-
49
- /*! \file
50
- Defines the \c iterator_class and related functions.
51
- \c iterator_range is a simple wrapper of iterator pair idiom. It provides
52
- a rich subset of Container interface.
53
- */
54
-
55
-
56
- namespace boost
57
- {
58
- namespace iterator_range_detail
59
- {
60
- //
61
- // The functions adl_begin and adl_end are implemented in a separate
62
- // class for gcc-2.9x
63
- //
64
- template<typename IteratorT>
65
- struct iterator_range_impl {
66
- template< class ForwardRange >
67
- static IteratorT adl_begin( ForwardRange& r )
68
- {
69
- return IteratorT( boost::begin( r ) );
70
- }
71
-
72
- template< class ForwardRange >
73
- static IteratorT adl_end( ForwardRange& r )
74
- {
75
- return IteratorT( boost::end( r ) );
76
- }
77
- };
78
-
79
- template< class Left, class Right >
80
- inline bool equal( const Left& l, const Right& r )
81
- {
82
- typedef BOOST_DEDUCED_TYPENAME boost::range_difference<Left>::type sz_type;
83
-
84
- sz_type l_size = boost::distance( l ),
85
- r_size = boost::distance( r );
86
-
87
- if( l_size != r_size )
88
- return false;
89
-
90
- return std::equal( boost::begin(l), boost::end(l),
91
- boost::begin(r) );
92
- }
93
-
94
- template< class Left, class Right >
95
- inline bool less_than( const Left& l, const Right& r )
96
- {
97
- return std::lexicographical_compare( boost::begin(l),
98
- boost::end(l),
99
- boost::begin(r),
100
- boost::end(r) );
101
- }
102
-
103
- struct range_tag { };
104
- struct const_range_tag { };
105
-
106
- }
107
-
108
- // iterator range template class -----------------------------------------//
109
-
110
- //! iterator_range class
111
- /*!
112
- An \c iterator_range delimits a range in a sequence by beginning and ending iterators.
113
- An iterator_range can be passed to an algorithm which requires a sequence as an input.
114
- For example, the \c toupper() function may be used most frequently on strings,
115
- but can also be used on iterator_ranges:
116
-
117
- \code
118
- boost::tolower( find( s, "UPPERCASE STRING" ) );
119
- \endcode
120
-
121
- Many algorithms working with sequences take a pair of iterators,
122
- delimiting a working range, as an arguments. The \c iterator_range class is an
123
- encapsulation of a range identified by a pair of iterators.
124
- It provides a collection interface,
125
- so it is possible to pass an instance to an algorithm requiring a collection as an input.
126
- */
127
- template<typename IteratorT>
128
- class iterator_range
129
- {
130
- protected: // Used by sub_range
131
- //! implementation class
132
- typedef iterator_range_detail::iterator_range_impl<IteratorT> impl;
133
- public:
134
-
135
- //! this type
136
- typedef iterator_range<IteratorT> type;
137
- //BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION(value_type);
138
-
139
- //! Encapsulated value type
140
- typedef BOOST_DEDUCED_TYPENAME
141
- iterator_value<IteratorT>::type value_type;
142
-
143
- //! Difference type
144
- typedef BOOST_DEDUCED_TYPENAME
145
- iterator_difference<IteratorT>::type difference_type;
146
-
147
- //! Size type
148
- typedef std::size_t size_type; // note: must be unsigned
149
-
150
- //! This type
151
- typedef iterator_range<IteratorT> this_type;
152
-
153
- //! Refence type
154
- //
155
- // Needed because value-type is the same for
156
- // const and non-const iterators
157
- //
158
- typedef BOOST_DEDUCED_TYPENAME
159
- iterator_reference<IteratorT>::type reference;
160
-
161
- //! const_iterator type
162
- /*!
163
- There is no distinction between const_iterator and iterator.
164
- These typedefs are provides to fulfill container interface
165
- */
166
- typedef IteratorT const_iterator;
167
- //! iterator type
168
- typedef IteratorT iterator;
169
-
170
- private: // for return value of operator()()
171
- typedef BOOST_DEDUCED_TYPENAME
172
- boost::mpl::if_< boost::is_abstract<value_type>,
173
- reference, value_type >::type abstract_value_type;
174
-
175
- public:
176
- iterator_range() : m_Begin( iterator() ), m_End( iterator() )
177
- #ifndef NDEBUG
178
- , singular( true )
179
- #endif
180
- { }
181
-
182
- //! Constructor from a pair of iterators
183
- template< class Iterator >
184
- iterator_range( Iterator Begin, Iterator End ) :
185
- m_Begin(Begin), m_End(End)
186
- #ifndef NDEBUG
187
- , singular(false)
188
- #endif
189
- {}
190
-
191
- //! Constructor from a Range
192
- template< class Range >
193
- iterator_range( const Range& r ) :
194
- m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) )
195
- #ifndef NDEBUG
196
- , singular(false)
197
- #endif
198
- {}
199
-
200
- //! Constructor from a Range
201
- template< class Range >
202
- iterator_range( Range& r ) :
203
- m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) )
204
- #ifndef NDEBUG
205
- , singular(false)
206
- #endif
207
- {}
208
-
209
- //! Constructor from a Range
210
- template< class Range >
211
- iterator_range( const Range& r, iterator_range_detail::const_range_tag ) :
212
- m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) )
213
- #ifndef NDEBUG
214
- , singular(false)
215
- #endif
216
- {}
217
-
218
- //! Constructor from a Range
219
- template< class Range >
220
- iterator_range( Range& r, iterator_range_detail::range_tag ) :
221
- m_Begin( impl::adl_begin( r ) ), m_End( impl::adl_end( r ) )
222
- #ifndef NDEBUG
223
- , singular(false)
224
- #endif
225
- {}
226
-
227
- #if !BOOST_WORKAROUND(BOOST_MSVC, < 1300)
228
- this_type& operator=( const this_type& r )
229
- {
230
- m_Begin = r.begin();
231
- m_End = r.end();
232
-
233
- #ifndef NDEBUG
234
- singular = r.singular;
235
- #endif
236
- return *this;
237
- }
238
- #endif
239
-
240
- template< class Iterator >
241
- iterator_range& operator=( const iterator_range<Iterator>& r )
242
- {
243
- m_Begin = r.begin();
244
- m_End = r.end();
245
- #ifndef NDEBUG
246
- singular = r.is_singular();
247
- #endif
248
- return *this;
249
- }
250
-
251
- template< class ForwardRange >
252
- iterator_range& operator=( ForwardRange& r )
253
- {
254
- m_Begin = impl::adl_begin( r );
255
- m_End = impl::adl_end( r );
256
- #ifndef NDEBUG
257
- singular = false;
258
- #endif
259
- return *this;
260
- }
261
-
262
- template< class ForwardRange >
263
- iterator_range& operator=( const ForwardRange& r )
264
- {
265
- m_Begin = impl::adl_begin( r );
266
- m_End = impl::adl_end( r );
267
- #ifndef NDEBUG
268
- singular = false;
269
- #endif
270
- return *this;
271
- }
272
-
273
- IteratorT begin() const
274
- {
275
- BOOST_ASSERT( !is_singular() );
276
- return m_Begin;
277
- }
278
-
279
- IteratorT end() const
280
- {
281
- BOOST_ASSERT( !is_singular() );
282
- return m_End;
283
- }
284
-
285
- difference_type size() const
286
- {
287
- BOOST_ASSERT( !is_singular() );
288
- return m_End - m_Begin;
289
- }
290
-
291
- bool empty() const
292
- {
293
- BOOST_ASSERT( !is_singular() );
294
- return m_Begin == m_End;
295
- }
296
-
297
- #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564))
298
- operator bool() const
299
- {
300
- return !empty();
301
- }
302
- #else
303
- typedef iterator (iterator_range::*unspecified_bool_type) () const;
304
- operator unspecified_bool_type() const
305
- {
306
- return empty() ? 0: &iterator_range::end;
307
- }
308
- #endif
309
-
310
- bool equal( const iterator_range& r ) const
311
- {
312
- BOOST_ASSERT( !is_singular() );
313
- return m_Begin == r.m_Begin && m_End == r.m_End;
314
- }
315
-
316
-
317
- #ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
318
-
319
- bool operator==( const iterator_range& r ) const
320
- {
321
- BOOST_ASSERT( !is_singular() );
322
- return iterator_range_detail::equal( *this, r );
323
- }
324
-
325
- bool operator!=( const iterator_range& r ) const
326
- {
327
- BOOST_ASSERT( !is_singular() );
328
- return !operator==(r);
329
- }
330
-
331
- bool operator<( const iterator_range& r ) const
332
- {
333
- BOOST_ASSERT( !is_singular() );
334
- return iterator_range_detail::less_than( *this, r );
335
- }
336
-
337
- #endif
338
-
339
- public: // convenience
340
- reference front() const
341
- {
342
- BOOST_ASSERT( !empty() );
343
- return *m_Begin;
344
- }
345
-
346
- reference back() const
347
- {
348
- BOOST_ASSERT( !empty() );
349
- IteratorT last( m_End );
350
- return *--last;
351
- }
352
-
353
- reference operator[]( difference_type at ) const
354
- {
355
- BOOST_ASSERT( at >= 0 && at < size() );
356
- return m_Begin[at];
357
- }
358
-
359
- //
360
- // When storing transform iterators, operator[]()
361
- // fails because it returns by reference. Therefore
362
- // operator()() is provided for these cases.
363
- //
364
- abstract_value_type operator()( difference_type at ) const
365
- {
366
- BOOST_ASSERT( at >= 0 && at < size() );
367
- return m_Begin[at];
368
- }
369
-
370
- iterator_range& advance_begin( difference_type n )
371
- {
372
- BOOST_ASSERT( !is_singular() );
373
- std::advance( m_Begin, n );
374
- return *this;
375
- }
376
-
377
- iterator_range& advance_end( difference_type n )
378
- {
379
- BOOST_ASSERT( !is_singular() );
380
- std::advance( m_End, n );
381
- return *this;
382
- }
383
-
384
- private:
385
- // begin and end iterators
386
- IteratorT m_Begin;
387
- IteratorT m_End;
388
-
389
- #ifndef NDEBUG
390
- bool singular;
391
- #endif
392
-
393
- public:
394
- bool is_singular() const
395
- {
396
- #ifndef NDEBUG
397
- return singular;
398
- #else
399
- return false;
400
- #endif
401
- }
402
-
403
- protected:
404
- //
405
- // Allow subclasses an easy way to access the
406
- // base type
407
- //
408
- typedef iterator_range iterator_range_;
409
- };
410
-
411
- // iterator range free-standing operators ---------------------------//
412
-
413
- #ifndef _STLP_NO_IOSTREAMS
414
- # ifndef BOOST_OLD_IOSTREAMS
415
-
416
- //! iterator_range output operator
417
- /*!
418
- Output the range to an ostream. Elements are outputed
419
- in a sequence without separators.
420
- */
421
- template< typename IteratorT, typename Elem, typename Traits >
422
- inline std::basic_ostream<Elem,Traits>& operator<<(
423
- std::basic_ostream<Elem, Traits>& Os,
424
- const iterator_range<IteratorT>& r )
425
- {
426
- std::copy( r.begin(), r.end(),
427
- std::ostream_iterator< BOOST_DEDUCED_TYPENAME
428
- iterator_value<IteratorT>::type,
429
- Elem, Traits>(Os) );
430
- return Os;
431
- }
432
-
433
- # else
434
-
435
- //! iterator_range output operator
436
- /*!
437
- Output the range to an ostream. Elements are outputed
438
- in a sequence without separators.
439
- */
440
- template< typename IteratorT >
441
- inline std::ostream& operator<<(
442
- std::ostream& Os,
443
- const iterator_range<IteratorT>& r )
444
- {
445
- std::copy( r.begin(), r.end(), std::ostream_iterator<char>(Os));
446
- return Os;
447
- }
448
-
449
- # endif
450
- #endif // _STLP_NO_IOSTREAMS
451
-
452
- /////////////////////////////////////////////////////////////////////
453
- // comparison operators
454
- /////////////////////////////////////////////////////////////////////
455
-
456
- template< class IteratorT, class ForwardRange >
457
- inline bool operator==( const ForwardRange& l,
458
- const iterator_range<IteratorT>& r )
459
- {
460
- return iterator_range_detail::equal( l, r );
461
- }
462
-
463
- template< class IteratorT, class ForwardRange >
464
- inline bool operator!=( const ForwardRange& l,
465
- const iterator_range<IteratorT>& r )
466
- {
467
- return !iterator_range_detail::equal( l, r );
468
- }
469
-
470
- template< class IteratorT, class ForwardRange >
471
- inline bool operator<( const ForwardRange& l,
472
- const iterator_range<IteratorT>& r )
473
- {
474
- return iterator_range_detail::less_than( l, r );
475
- }
476
-
477
- #ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
478
- #else
479
- template< class Iterator1T, class Iterator2T >
480
- inline bool operator==( const iterator_range<Iterator1T>& l,
481
- const iterator_range<Iterator2T>& r )
482
- {
483
- return iterator_range_detail::equal( l, r );
484
- }
485
-
486
- template< class IteratorT, class ForwardRange >
487
- inline bool operator==( const iterator_range<IteratorT>& l,
488
- const ForwardRange& r )
489
- {
490
- return iterator_range_detail::equal( l, r );
491
- }
492
-
493
-
494
- template< class Iterator1T, class Iterator2T >
495
- inline bool operator!=( const iterator_range<Iterator1T>& l,
496
- const iterator_range<Iterator2T>& r )
497
- {
498
- return !iterator_range_detail::equal( l, r );
499
- }
500
-
501
- template< class IteratorT, class ForwardRange >
502
- inline bool operator!=( const iterator_range<IteratorT>& l,
503
- const ForwardRange& r )
504
- {
505
- return !iterator_range_detail::equal( l, r );
506
- }
507
-
508
-
509
- template< class Iterator1T, class Iterator2T >
510
- inline bool operator<( const iterator_range<Iterator1T>& l,
511
- const iterator_range<Iterator2T>& r )
512
- {
513
- return iterator_range_detail::less_than( l, r );
514
- }
515
-
516
- template< class IteratorT, class ForwardRange >
517
- inline bool operator<( const iterator_range<IteratorT>& l,
518
- const ForwardRange& r )
519
- {
520
- return iterator_range_detail::less_than( l, r );
521
- }
522
-
523
- #endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
524
-
525
- // iterator range utilities -----------------------------------------//
526
-
527
- //! iterator_range construct helper
528
- /*!
529
- Construct an \c iterator_range from a pair of iterators
530
-
531
- \param Begin A begin iterator
532
- \param End An end iterator
533
- \return iterator_range object
534
- */
535
- template< typename IteratorT >
536
- inline iterator_range< IteratorT >
537
- make_iterator_range( IteratorT Begin, IteratorT End )
538
- {
539
- return iterator_range<IteratorT>( Begin, End );
540
- }
541
-
542
- #ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
543
-
544
- template< typename Range >
545
- inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<Range>::type >
546
- make_iterator_range( Range& r )
547
- {
548
- return iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<Range>::type >
549
- ( boost::begin( r ), boost::end( r ) );
550
- }
551
-
552
- #else
553
- //! iterator_range construct helper
554
- /*!
555
- Construct an \c iterator_range from a \c Range containing the begin
556
- and end iterators.
557
- */
558
- template< class ForwardRange >
559
- inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type >
560
- make_iterator_range( ForwardRange& r )
561
- {
562
- return iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<ForwardRange>::type >
563
- ( r, iterator_range_detail::range_tag() );
564
- }
565
-
566
- template< class ForwardRange >
567
- inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type >
568
- make_iterator_range( const ForwardRange& r )
569
- {
570
- return iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<const ForwardRange>::type >
571
- ( r, iterator_range_detail::const_range_tag() );
572
- }
573
-
574
- #endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
575
-
576
- namespace iterator_range_detail
577
- {
578
- template< class Range >
579
- inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<Range>::type >
580
- make_range_impl( Range& r,
581
- BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,
582
- BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )
583
- {
584
- //
585
- // Not worth the effort
586
- //
587
- //if( advance_begin == 0 && advance_end == 0 )
588
- // return make_iterator_range( r );
589
- //
590
-
591
- BOOST_DEDUCED_TYPENAME range_iterator<Range>::type
592
- new_begin = boost::begin( r ),
593
- new_end = boost::end( r );
594
- std::advance( new_begin, advance_begin );
595
- std::advance( new_end, advance_end );
596
- return make_iterator_range( new_begin, new_end );
597
- }
598
- }
599
-
600
- #ifdef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
601
-
602
- template< class Range >
603
- inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<Range>::type >
604
- make_iterator_range( Range& r,
605
- BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,
606
- BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )
607
- {
608
- //BOOST_ASSERT( advance_begin - advance_end <= size(r) && "creating invalid range" );
609
- return iterator_range_detail::make_range_impl( r, advance_begin, advance_end );
610
- }
611
-
612
- #else
613
-
614
- template< class Range >
615
- inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<Range>::type >
616
- make_iterator_range( Range& r,
617
- BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,
618
- BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )
619
- {
620
- //BOOST_ASSERT( advance_begin - advance_end <= size(r) && "creating invalid range" );
621
- return iterator_range_detail::make_range_impl( r, advance_begin, advance_end );
622
- }
623
-
624
- template< class Range >
625
- inline iterator_range< BOOST_DEDUCED_TYPENAME range_iterator<const Range>::type >
626
- make_iterator_range( const Range& r,
627
- BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_begin,
628
- BOOST_DEDUCED_TYPENAME range_difference<Range>::type advance_end )
629
- {
630
- //BOOST_ASSERT( advance_begin - advance_end <= size(r) && "creating invalid range" );
631
- return iterator_range_detail::make_range_impl( r, advance_begin, advance_end );
632
- }
633
-
634
- #endif // BOOST_NO_FUNCTION_TEMPLATE_ORDERING
635
-
636
- //! copy a range into a sequence
637
- /*!
638
- Construct a new sequence of the specified type from the elements
639
- in the given range
640
-
641
- \param Range An input range
642
- \return New sequence
643
- */
644
- template< typename SeqT, typename Range >
645
- inline SeqT copy_range( const Range& r )
646
- {
647
- return SeqT( boost::begin( r ), boost::end( r ) );
648
- }
649
-
650
- } // namespace 'boost'
651
-
652
- #undef BOOST_OLD_IOSTREAMS
653
-
654
- #if BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1500))
655
- #pragma warning( pop )
656
- #endif
657
-
658
- #endif
13
+ #include "boost/range/iterator_range_core.hpp"
14
+ #include "boost/range/iterator_range_io.hpp"
659
15
 
16
+ #endif // include guard