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.
- data/DEVELOPERS.TXT +9 -6
- data/NEWS +50 -0
- data/Rakefile +2 -1
- data/bin/passenger-install-apache2-module +4 -4
- data/bin/passenger-install-nginx-module +1 -1
- data/bin/passenger-make-enterprisey +1 -1
- data/build/agents.rb +26 -19
- data/build/apache2.rb +49 -46
- data/build/basics.rb +37 -13
- data/build/common_library.rb +134 -64
- data/build/config.rb +18 -11
- data/build/cplusplus_support.rb +4 -0
- data/build/cxx_tests.rb +26 -12
- data/build/documentation.rb +18 -11
- data/build/integration_tests.rb +18 -11
- data/build/misc.rb +18 -11
- data/build/nginx.rb +27 -19
- data/build/oxt_tests.rb +18 -11
- data/build/packaging.rb +45 -37
- data/build/rpm.rb +98 -0
- data/build/ruby_extension.rb +19 -13
- data/build/ruby_tests.rb +19 -12
- data/build/test_basics.rb +23 -11
- data/debian/README.Debian +15 -0
- data/debian/changelog +185 -0
- data/debian/control +47 -19
- data/debian/copyright +20 -0
- data/debian/libapache2-mod-passenger.install +1 -0
- data/debian/libapache2-mod-passenger.postinst +36 -0
- data/debian/libapache2-mod-passenger.prerm +15 -0
- data/debian/passenger-common.install +4 -0
- data/debian/passenger.conf +4 -0
- data/debian/passenger.load +1 -0
- data/debian/rules +37 -0
- data/debian/watch +3 -0
- data/{misc → dev}/copy_boost_headers.rb +3 -0
- data/{misc → dev}/find_owner_pipe_leaks.rb +0 -0
- data/{misc → dev}/render_error_pages.rb +0 -0
- data/doc/Users guide Apache.html +39 -1
- data/doc/Users guide Apache.txt +40 -0
- data/doc/Users guide Nginx.html +1 -1
- data/doc/Users guide Standalone.html +1 -1
- data/doc/cxxapi/Constants_8h_source.html +1 -1
- data/doc/cxxapi/DirectoryMapper_8h_source.html +6 -22
- data/doc/cxxapi/EventedClient_8h_source.html +572 -468
- data/doc/cxxapi/Exceptions_8h_source.html +142 -129
- data/doc/cxxapi/FileDescriptor_8h_source.html +263 -199
- data/doc/cxxapi/MessageChannel_8h_source.html +686 -770
- data/doc/cxxapi/MessageServer_8h_source.html +1 -1
- data/doc/cxxapi/PoolOptions_8h_source.html +79 -78
- data/doc/cxxapi/ResourceLocator_8h_source.html +105 -55
- data/doc/cxxapi/SafeLibev_8h_source.html +180 -0
- data/doc/cxxapi/ServerInstanceDir_8h_source.html +114 -110
- data/doc/cxxapi/Session_8h_source.html +1 -1
- data/doc/cxxapi/SpawnManager_8h_source.html +208 -208
- data/doc/cxxapi/StaticString_8h_source.html +258 -183
- data/doc/cxxapi/Utils_8h_source.html +71 -54
- data/doc/cxxapi/annotated.html +3 -0
- data/doc/cxxapi/classAgentWatcher.html +2 -2
- data/doc/cxxapi/classPassenger_1_1DirectoryMapper-members.html +0 -1
- data/doc/cxxapi/classPassenger_1_1DirectoryMapper.html +0 -27
- data/doc/cxxapi/classPassenger_1_1EventedClient-members.html +5 -0
- data/doc/cxxapi/classPassenger_1_1EventedClient.html +102 -7
- data/doc/cxxapi/classPassenger_1_1FileDescriptor-members.html +2 -1
- data/doc/cxxapi/classPassenger_1_1FileDescriptor.html +34 -8
- data/doc/cxxapi/classPassenger_1_1FileDescriptorPair-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1FileDescriptorPair.html +52 -0
- data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +0 -3
- data/doc/cxxapi/classPassenger_1_1MessageChannel.html +0 -120
- data/doc/cxxapi/classPassenger_1_1SafeLibev-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1SafeLibev.html +51 -0
- data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +1 -0
- data/doc/cxxapi/classPassenger_1_1SpawnException.html +22 -0
- data/doc/cxxapi/classes.html +14 -14
- data/doc/cxxapi/files.html +2 -0
- data/doc/cxxapi/functions_0x63.html +6 -3
- data/doc/cxxapi/functions_0x64.html +9 -2
- data/doc/cxxapi/functions_0x67.html +6 -9
- data/doc/cxxapi/functions_0x69.html +3 -0
- data/doc/cxxapi/functions_0x77.html +8 -8
- data/doc/cxxapi/functions_eval.html +6 -0
- data/doc/cxxapi/functions_func.html +18 -17
- data/doc/cxxapi/functions_vars.html +8 -0
- data/doc/cxxapi/graph_legend.png +0 -0
- data/doc/cxxapi/group__Core.png +0 -0
- data/doc/cxxapi/group__Hooks.png +0 -0
- data/doc/cxxapi/hierarchy.html +3 -0
- data/doc/cxxapi/inherit__graph__14.map +1 -1
- data/doc/cxxapi/inherit__graph__14.md5 +1 -1
- data/doc/cxxapi/inherit__graph__14.png +0 -0
- data/doc/cxxapi/inherit__graph__15.map +1 -3
- data/doc/cxxapi/inherit__graph__15.md5 +1 -1
- data/doc/cxxapi/inherit__graph__15.png +0 -0
- data/doc/cxxapi/inherit__graph__16.map +3 -1
- data/doc/cxxapi/inherit__graph__16.md5 +1 -1
- data/doc/cxxapi/inherit__graph__16.png +0 -0
- data/doc/cxxapi/inherit__graph__17.map +1 -1
- data/doc/cxxapi/inherit__graph__17.md5 +1 -1
- data/doc/cxxapi/inherit__graph__17.png +0 -0
- data/doc/cxxapi/inherit__graph__18.map +1 -2
- data/doc/cxxapi/inherit__graph__18.md5 +1 -1
- data/doc/cxxapi/inherit__graph__18.png +0 -0
- data/doc/cxxapi/inherit__graph__19.map +2 -1
- data/doc/cxxapi/inherit__graph__19.md5 +1 -1
- data/doc/cxxapi/inherit__graph__19.png +0 -0
- data/doc/cxxapi/inherit__graph__20.map +1 -1
- data/doc/cxxapi/inherit__graph__20.md5 +1 -1
- data/doc/cxxapi/inherit__graph__20.png +0 -0
- data/doc/cxxapi/inherit__graph__21.map +1 -1
- data/doc/cxxapi/inherit__graph__21.md5 +1 -1
- data/doc/cxxapi/inherit__graph__21.png +0 -0
- data/doc/cxxapi/inherit__graph__22.map +1 -1
- data/doc/cxxapi/inherit__graph__22.md5 +1 -1
- data/doc/cxxapi/inherit__graph__22.png +0 -0
- data/doc/cxxapi/inherit__graph__23.map +1 -1
- data/doc/cxxapi/inherit__graph__23.md5 +1 -1
- data/doc/cxxapi/inherit__graph__23.png +0 -0
- data/doc/cxxapi/inherit__graph__24.map +1 -1
- data/doc/cxxapi/inherit__graph__24.md5 +1 -1
- data/doc/cxxapi/inherit__graph__24.png +0 -0
- data/doc/cxxapi/inherit__graph__25.map +1 -1
- data/doc/cxxapi/inherit__graph__25.md5 +1 -1
- data/doc/cxxapi/inherit__graph__25.png +0 -0
- data/doc/cxxapi/inherit__graph__26.map +1 -1
- data/doc/cxxapi/inherit__graph__26.md5 +1 -1
- data/doc/cxxapi/inherit__graph__26.png +0 -0
- data/doc/cxxapi/inherit__graph__27.map +1 -1
- data/doc/cxxapi/inherit__graph__27.md5 +1 -1
- data/doc/cxxapi/inherit__graph__27.png +0 -0
- data/doc/cxxapi/inherit__graph__28.map +1 -2
- data/doc/cxxapi/inherit__graph__28.md5 +1 -1
- data/doc/cxxapi/inherit__graph__28.png +0 -0
- data/doc/cxxapi/inherit__graph__29.map +1 -1
- data/doc/cxxapi/inherit__graph__29.md5 +1 -1
- data/doc/cxxapi/inherit__graph__29.png +0 -0
- data/doc/cxxapi/inherit__graph__30.map +1 -1
- data/doc/cxxapi/inherit__graph__30.md5 +1 -1
- data/doc/cxxapi/inherit__graph__30.png +0 -0
- data/doc/cxxapi/inherit__graph__31.map +2 -1
- data/doc/cxxapi/inherit__graph__31.md5 +1 -1
- data/doc/cxxapi/inherit__graph__31.png +0 -0
- data/doc/cxxapi/inherit__graph__32.map +1 -3
- data/doc/cxxapi/inherit__graph__32.md5 +1 -1
- data/doc/cxxapi/inherit__graph__32.png +0 -0
- data/doc/cxxapi/inherit__graph__33.map +1 -1
- data/doc/cxxapi/inherit__graph__33.md5 +1 -1
- data/doc/cxxapi/inherit__graph__33.png +0 -0
- data/doc/cxxapi/inherit__graph__34.map +1 -1
- data/doc/cxxapi/inherit__graph__34.md5 +1 -1
- data/doc/cxxapi/inherit__graph__34.png +0 -0
- data/doc/cxxapi/inherit__graph__35.map +3 -1
- data/doc/cxxapi/inherit__graph__35.md5 +1 -1
- data/doc/cxxapi/inherit__graph__35.png +0 -0
- data/doc/cxxapi/inherit__graph__36.map +1 -1
- data/doc/cxxapi/inherit__graph__36.md5 +1 -1
- data/doc/cxxapi/inherit__graph__36.png +0 -0
- data/doc/cxxapi/inherit__graph__37.map +1 -1
- data/doc/cxxapi/inherit__graph__37.md5 +1 -1
- data/doc/cxxapi/inherit__graph__37.png +0 -0
- data/doc/cxxapi/inherit__graph__38.map +3 -1
- data/doc/cxxapi/inherit__graph__38.md5 +1 -1
- data/doc/cxxapi/inherit__graph__38.png +0 -0
- data/doc/cxxapi/inherit__graph__39.map +3 -1
- data/doc/cxxapi/inherit__graph__39.md5 +1 -1
- data/doc/cxxapi/inherit__graph__39.png +0 -0
- data/doc/cxxapi/inherits.html +33 -24
- data/doc/cxxapi/namespacePassenger.html +52 -0
- data/doc/cxxapi/namespacemembers.html +6 -0
- data/doc/cxxapi/namespacemembers_func.html +6 -0
- data/doc/cxxapi/tree.html +8 -0
- data/ext/apache2/Configuration.cpp +30 -8
- data/ext/apache2/Configuration.hpp +15 -14
- data/ext/apache2/DirectoryMapper.h +0 -16
- data/ext/apache2/Hooks.cpp +30 -29
- data/ext/boost/algorithm/string/detail/case_conv.hpp +6 -6
- data/ext/boost/algorithm/string/detail/find_format.hpp +14 -4
- data/ext/boost/algorithm/string/detail/find_format_all.hpp +13 -3
- data/ext/boost/algorithm/string/detail/find_format_store.hpp +11 -0
- data/ext/boost/algorithm/string/erase.hpp +2 -2
- data/ext/boost/bind/placeholders.hpp +2 -2
- data/ext/boost/concept/detail/backward_compatibility.hpp +16 -0
- data/ext/boost/concept/detail/general.hpp +15 -6
- data/ext/boost/concept/detail/has_constraints.hpp +5 -3
- data/ext/boost/concept/usage.hpp +5 -4
- data/ext/boost/concept_check.hpp +10 -1
- data/ext/boost/config/abi/borland_prefix.hpp +1 -1
- data/ext/boost/config/auto_link.hpp +68 -21
- data/ext/boost/config/compiler/borland.hpp +11 -3
- data/ext/boost/config/compiler/clang.hpp +62 -0
- data/ext/boost/config/compiler/codegear.hpp +21 -7
- data/ext/boost/config/compiler/common_edg.hpp +4 -2
- data/ext/boost/config/compiler/digitalmars.hpp +1 -1
- data/ext/boost/config/compiler/gcc.hpp +46 -7
- data/ext/boost/config/compiler/gcc_xml.hpp +25 -0
- data/ext/boost/config/compiler/intel.hpp +23 -0
- data/ext/boost/config/compiler/kai.hpp +1 -1
- data/ext/boost/config/compiler/metrowerks.hpp +1 -1
- data/ext/boost/config/compiler/nvcc.hpp +86 -0
- data/ext/boost/config/compiler/pgi.hpp +18 -3
- data/ext/boost/config/compiler/sunpro_cc.hpp +19 -5
- data/ext/boost/config/compiler/vacpp.hpp +8 -0
- data/ext/boost/config/compiler/visualc.hpp +27 -11
- data/ext/boost/config/platform/cygwin.hpp +0 -3
- data/ext/boost/config/platform/symbian.hpp +94 -0
- data/ext/boost/config/platform/win32.hpp +8 -1
- data/ext/boost/config/select_compiler_config.hpp +10 -0
- data/ext/boost/config/select_platform_config.hpp +4 -0
- data/ext/boost/config/stdlib/dinkumware.hpp +11 -1
- data/ext/boost/config/stdlib/libcomo.hpp +1 -0
- data/ext/boost/config/stdlib/libstdcpp3.hpp +1 -0
- data/ext/boost/config/stdlib/modena.hpp +1 -0
- data/ext/boost/config/stdlib/msl.hpp +1 -0
- data/ext/boost/config/stdlib/roguewave.hpp +1 -0
- data/ext/boost/config/stdlib/sgi.hpp +1 -0
- data/ext/boost/config/stdlib/stlport.hpp +1 -0
- data/ext/boost/config/stdlib/vacpp.hpp +1 -0
- data/ext/boost/config/suffix.hpp +40 -2
- data/ext/boost/cstdint.hpp +36 -7
- data/ext/boost/date_time/gregorian/conversion.hpp +4 -2
- data/ext/boost/date_time/microsec_time_clock.hpp +7 -7
- data/ext/boost/date_time/posix_time/conversion.hpp +4 -2
- data/ext/boost/date_time/time_facet.hpp +43 -4
- data/ext/boost/detail/endian.hpp +5 -2
- data/ext/boost/detail/lcast_precision.hpp +2 -2
- data/ext/boost/detail/sp_typeinfo.hpp +1 -1
- data/ext/boost/detail/workaround.hpp +5 -0
- data/ext/boost/exception/detail/error_info_impl.hpp +3 -3
- data/ext/boost/exception/detail/exception_ptr.hpp +76 -135
- data/ext/boost/exception/detail/is_output_streamable.hpp +15 -2
- data/ext/boost/exception/detail/type_info.hpp +9 -5
- data/ext/boost/exception/diagnostic_information.hpp +5 -3
- data/ext/boost/exception/exception.hpp +60 -46
- data/ext/boost/exception/info.hpp +47 -14
- data/ext/boost/function/function_base.hpp +4 -4
- data/ext/boost/integer.hpp +4 -0
- data/ext/boost/integer_fwd.hpp +9 -3
- data/ext/boost/iterator/iterator_concepts.hpp +284 -0
- data/ext/boost/iterator/transform_iterator.hpp +0 -1
- data/ext/boost/make_shared.hpp +17 -0
- data/ext/boost/mpl/aux_/config/has_xxx.hpp +4 -3
- data/ext/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp +2 -6
- data/ext/boost/mpl/aux_/template_arity.hpp +4 -4
- data/ext/boost/mpl/eval_if.hpp +3 -3
- data/ext/boost/mpl/has_xxx.hpp +369 -3
- data/ext/boost/optional/optional.hpp +3 -1
- data/ext/boost/optional/optional_fwd.hpp +1 -1
- data/ext/boost/preprocessor/repetition/enum_trailing_params.hpp +38 -0
- data/ext/boost/range/algorithm/equal.hpp +188 -0
- data/ext/boost/range/as_literal.hpp +15 -15
- data/ext/boost/range/concepts.hpp +331 -0
- data/ext/boost/range/const_iterator.hpp +7 -4
- data/ext/boost/range/detail/extract_optional_type.hpp +52 -0
- data/ext/boost/range/detail/implementation_help.hpp +7 -7
- data/ext/boost/range/detail/misc_concept.hpp +33 -0
- data/ext/boost/range/iterator.hpp +32 -32
- data/ext/boost/range/iterator_range.hpp +8 -651
- data/ext/boost/range/iterator_range_core.hpp +542 -0
- data/ext/boost/range/iterator_range_io.hpp +93 -0
- data/ext/boost/range/mutable_iterator.hpp +7 -4
- data/ext/boost/range/size.hpp +1 -1
- data/ext/boost/range/size_type.hpp +2 -1
- data/ext/boost/shared_array.hpp +19 -0
- data/ext/boost/smart_ptr/detail/sp_convertible.hpp +2 -2
- data/ext/boost/smart_ptr/detail/yield_k.hpp +1 -1
- data/ext/boost/smart_ptr/make_shared.hpp +508 -0
- data/ext/boost/smart_ptr/shared_array.hpp +147 -0
- data/ext/boost/src/pthread/thread.cpp +16 -21
- data/ext/boost/src/pthread/timeconv.inl +7 -4
- data/ext/boost/thread/barrier.hpp +2 -1
- data/ext/boost/thread/detail/config.hpp +7 -1
- data/ext/boost/thread/detail/platform.hpp +1 -1
- data/ext/boost/thread/detail/thread.hpp +62 -18
- data/ext/boost/thread/detail/thread_group.hpp +5 -2
- data/ext/boost/thread/detail/tss_hooks.hpp +8 -25
- data/ext/boost/thread/future.hpp +45 -34
- data/ext/boost/thread/locks.hpp +184 -55
- data/ext/boost/thread/pthread/condition_variable.hpp +7 -7
- data/ext/boost/thread/pthread/condition_variable_fwd.hpp +4 -2
- data/ext/boost/thread/pthread/mutex.hpp +29 -17
- data/ext/boost/thread/pthread/once.hpp +5 -0
- data/ext/boost/thread/pthread/recursive_mutex.hpp +97 -18
- data/ext/boost/thread/pthread/shared_mutex.hpp +1 -1
- data/ext/boost/thread/pthread/thread_heap_alloc.hpp +1 -1
- data/ext/boost/thread/tss.hpp +2 -0
- data/ext/boost/throw_exception.hpp +21 -5
- data/ext/boost/token_functions.hpp +111 -91
- data/ext/boost/type_traits/add_reference.hpp +19 -1
- data/ext/boost/type_traits/function_traits.hpp +2 -2
- data/ext/boost/type_traits/is_const.hpp +24 -5
- data/ext/boost/type_traits/is_convertible.hpp +1 -1
- data/ext/boost/type_traits/is_function.hpp +3 -0
- data/ext/boost/type_traits/is_lvalue_reference.hpp +118 -0
- data/ext/boost/type_traits/is_reference.hpp +8 -81
- data/ext/boost/type_traits/is_rvalue_reference.hpp +29 -0
- data/ext/boost/type_traits/is_same.hpp +2 -2
- data/ext/boost/type_traits/is_volatile.hpp +26 -7
- data/ext/boost/type_traits/remove_const.hpp +12 -0
- data/ext/boost/type_traits/remove_cv.hpp +23 -1
- data/ext/boost/type_traits/remove_reference.hpp +21 -1
- data/ext/boost/type_traits/type_with_alignment.hpp +10 -10
- data/ext/boost/units/detail/utility.hpp +104 -0
- data/ext/boost/utility/compare_pointees.hpp +1 -1
- data/ext/common/AgentsStarter.hpp +151 -161
- data/ext/common/ApplicationPool/Pool.h +16 -4
- data/ext/common/Constants.h +1 -1
- data/ext/common/EventedClient.h +130 -26
- data/ext/common/Exceptions.h +15 -2
- data/ext/common/FileDescriptor.h +76 -12
- data/ext/common/IniFile.h +488 -0
- data/ext/common/LoggingAgent/LoggingServer.h +2 -2
- data/ext/common/LoggingAgent/RemoteSender.h +15 -6
- data/ext/common/MessageChannel.h +17 -101
- data/ext/common/PoolOptions.h +1 -0
- data/ext/common/ResourceLocator.h +78 -28
- data/ext/common/SafeLibev.h +149 -0
- data/ext/common/ServerInstanceDir.h +11 -7
- data/ext/common/Session.h +1 -1
- data/ext/common/SpawnManager.h +14 -14
- data/ext/common/StaticString.h +75 -0
- data/ext/common/Utils.cpp +304 -12
- data/ext/common/Utils.h +17 -0
- data/ext/common/Utils/BufferedIO.h +196 -0
- data/ext/common/Utils/IOUtils.cpp +159 -0
- data/ext/common/Utils/IOUtils.h +118 -1
- data/ext/common/Utils/ProcessMetricsCollector.h +184 -56
- data/ext/common/Utils/StrIntUtils.cpp +45 -11
- data/ext/common/Utils/StrIntUtils.h +8 -5
- data/ext/common/Utils/Timer.h +22 -0
- data/ext/common/Utils/utf8.h +35 -0
- data/ext/common/Utils/utf8/checked.h +324 -0
- data/ext/common/Utils/utf8/core.h +359 -0
- data/ext/common/Utils/utf8/unchecked.h +229 -0
- data/ext/common/Watchdog.cpp +52 -85
- data/ext/libev/config.h +122 -0
- data/ext/nginx/Configuration.c +7 -1
- data/ext/nginx/HelperAgent.cpp +16 -18
- data/ext/nginx/config +6 -4
- data/ext/oxt/system_calls.cpp +10 -0
- data/ext/oxt/system_calls.hpp +2 -0
- data/lib/phusion_passenger.rb +6 -11
- data/lib/phusion_passenger/dependencies.rb +2 -0
- data/lib/phusion_passenger/packaging.rb +5 -5
- data/lib/phusion_passenger/platform_info.rb +88 -0
- data/lib/phusion_passenger/platform_info/binary_compatibility.rb +3 -17
- data/lib/phusion_passenger/platform_info/compiler.rb +14 -32
- data/lib/phusion_passenger/platform_info/curl.rb +6 -1
- data/lib/phusion_passenger/platform_info/operating_system.rb +107 -0
- data/lib/phusion_passenger/public_api.rb +2 -2
- data/lib/phusion_passenger/rails3_extensions/init.rb +5 -2
- data/lib/phusion_passenger/standalone/command.rb +6 -2
- data/lib/phusion_passenger/standalone/package_runtime_command.rb +2 -2
- data/lib/phusion_passenger/standalone/runtime_installer.rb +17 -5
- data/lib/phusion_passenger/standalone/start_command.rb +12 -12
- data/lib/phusion_passenger/standalone/stop_command.rb +3 -3
- data/lib/phusion_passenger/standalone/utils.rb +6 -2
- data/lib/phusion_passenger/templates/standalone/config.erb +37 -5
- data/lib/phusion_passenger/utils.rb +4 -7
- data/resources/mime.types +73 -0
- data/{misc → resources}/union_station_gateway.crt +0 -0
- data/test/cxx/BufferedIOTest.cpp +364 -0
- data/test/cxx/EventedClientTest.cpp +150 -13
- data/test/cxx/IOUtilsTest.cpp +399 -1
- data/test/cxx/MessageChannelTest.cpp +5 -120
- data/test/cxx/ProcessMetricsCollectorTest.cpp +121 -0
- data/test/cxx/StaticStringTest.cpp +134 -0
- data/test/cxx/UtilsTest.cpp +16 -46
- data/test/stub/rails_apps/2.3/mycook/public/dispatch.cgi +2 -2
- data/test/stub/rails_apps/2.3/mycook/public/dispatch.fcgi +1 -1
- data/test/stub/rails_apps/2.3/mycook/public/dispatch.rb +1 -1
- data/test/stub/rails_apps/3.0/empty/Gemfile.lock +73 -0
- data/test/support/allocate_memory.c +14 -0
- data/test/support/test_helper.rb +3 -0
- metadata +57 -174
- data/bin/passenger-stress-test +0 -345
- data/debian/postinst +0 -24
- data/doc/rdoc/classes/ConditionVariable.html +0 -215
- data/doc/rdoc/classes/Exception.html +0 -120
- data/doc/rdoc/classes/GC.html +0 -113
- data/doc/rdoc/classes/IO.html +0 -221
- data/doc/rdoc/classes/PhusionPassenger.html +0 -397
- data/doc/rdoc/classes/PhusionPassenger/AbstractInstaller.html +0 -180
- data/doc/rdoc/classes/PhusionPassenger/AbstractRequestHandler.html +0 -647
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer.html +0 -654
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/InvalidPassword.html +0 -92
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerAlreadyStarted.html +0 -97
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerError.html +0 -96
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/ServerNotStarted.html +0 -97
- data/doc/rdoc/classes/PhusionPassenger/AbstractServer/UnknownMessage.html +0 -96
- data/doc/rdoc/classes/PhusionPassenger/AbstractServerCollection.html +0 -619
- data/doc/rdoc/classes/PhusionPassenger/AdminTools.html +0 -142
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/MemoryStats.html +0 -368
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/MemoryStats/Process.html +0 -231
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance.html +0 -588
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/CorruptedDirectoryError.html +0 -92
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/GenerationsAbsentError.html +0 -92
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Group.html +0 -147
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Process.html +0 -279
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/RoleDeniedError.html +0 -92
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/StaleDirectoryError.html +0 -92
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/Stats.html +0 -123
- data/doc/rdoc/classes/PhusionPassenger/AdminTools/ServerInstance/UnsupportedGenerationStructureVersionError.html +0 -92
- data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger.html +0 -341
- data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger/Log.html +0 -294
- data/doc/rdoc/classes/PhusionPassenger/AnalyticsLogger/SharedData.html +0 -199
- data/doc/rdoc/classes/PhusionPassenger/AppInitError.html +0 -155
- data/doc/rdoc/classes/PhusionPassenger/AppProcess.html +0 -367
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails.html +0 -95
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/ApplicationSpawner.html +0 -351
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/ApplicationSpawner/Error.html +0 -98
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/CGIFixed.html +0 -200
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/FrameworkSpawner.html +0 -410
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/FrameworkSpawner/Error.html +0 -98
- data/doc/rdoc/classes/PhusionPassenger/ClassicRails/RequestHandler.html +0 -156
- data/doc/rdoc/classes/PhusionPassenger/ClassicRailsExtensions.html +0 -115
- data/doc/rdoc/classes/PhusionPassenger/ClassicRailsExtensions/AnalyticsLogging.html +0 -202
- data/doc/rdoc/classes/PhusionPassenger/ConsoleTextTemplate.html +0 -172
- data/doc/rdoc/classes/PhusionPassenger/DebugLogging.html +0 -273
- data/doc/rdoc/classes/PhusionPassenger/FrameworkInitError.html +0 -145
- data/doc/rdoc/classes/PhusionPassenger/HTMLTemplate.html +0 -162
- data/doc/rdoc/classes/PhusionPassenger/InitializationError.html +0 -141
- data/doc/rdoc/classes/PhusionPassenger/InvalidPath.html +0 -92
- data/doc/rdoc/classes/PhusionPassenger/MessageChannel.html +0 -673
- data/doc/rdoc/classes/PhusionPassenger/MessageChannel/InvalidHashError.html +0 -92
- data/doc/rdoc/classes/PhusionPassenger/MessageClient.html +0 -415
- data/doc/rdoc/classes/PhusionPassenger/NativeSupportLoader.html +0 -134
- data/doc/rdoc/classes/PhusionPassenger/Packaging.html +0 -129
- data/doc/rdoc/classes/PhusionPassenger/PlatformInfo.html +0 -1809
- data/doc/rdoc/classes/PhusionPassenger/Plugin.html +0 -237
- data/doc/rdoc/classes/PhusionPassenger/Rack.html +0 -91
- data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner.html +0 -312
- data/doc/rdoc/classes/PhusionPassenger/Rack/ApplicationSpawner/Error.html +0 -98
- data/doc/rdoc/classes/PhusionPassenger/Rack/RequestHandler.html +0 -218
- data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions.html +0 -114
- data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging.html +0 -256
- data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ACExtension.html +0 -139
- data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ASBenchmarkableExtension.html +0 -118
- data/doc/rdoc/classes/PhusionPassenger/Rails3Extensions/AnalyticsLogging/ExceptionLogger.html +0 -135
- data/doc/rdoc/classes/PhusionPassenger/SpawnManager.html +0 -378
- data/doc/rdoc/classes/PhusionPassenger/Standalone.html +0 -111
- data/doc/rdoc/classes/PhusionPassenger/Standalone/AppFinder.html +0 -252
- data/doc/rdoc/classes/PhusionPassenger/Standalone/Command.html +0 -161
- data/doc/rdoc/classes/PhusionPassenger/Standalone/ConfigFile.html +0 -368
- data/doc/rdoc/classes/PhusionPassenger/Standalone/ConfigFile/DisallowedContextError.html +0 -132
- data/doc/rdoc/classes/PhusionPassenger/Standalone/HelpCommand.html +0 -151
- data/doc/rdoc/classes/PhusionPassenger/Standalone/Main.html +0 -189
- data/doc/rdoc/classes/PhusionPassenger/Standalone/PackageRuntimeCommand.html +0 -177
- data/doc/rdoc/classes/PhusionPassenger/Standalone/RuntimeInstaller.html +0 -341
- data/doc/rdoc/classes/PhusionPassenger/Standalone/StartCommand.html +0 -203
- data/doc/rdoc/classes/PhusionPassenger/Standalone/StatusCommand.html +0 -156
- data/doc/rdoc/classes/PhusionPassenger/Standalone/StopCommand.html +0 -168
- data/doc/rdoc/classes/PhusionPassenger/Standalone/Utils.html +0 -86
- data/doc/rdoc/classes/PhusionPassenger/Standalone/VersionCommand.html +0 -135
- data/doc/rdoc/classes/PhusionPassenger/UnknownError.html +0 -125
- data/doc/rdoc/classes/PhusionPassenger/Utils.html +0 -1550
- data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher.html +0 -204
- data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher/DirInfo.html +0 -171
- data/doc/rdoc/classes/PhusionPassenger/Utils/FileSystemWatcher/FileInfo.html +0 -140
- data/doc/rdoc/classes/PhusionPassenger/Utils/HostsFileParser.html +0 -260
- data/doc/rdoc/classes/PhusionPassenger/Utils/PseudoIO.html +0 -169
- data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput.html +0 -265
- data/doc/rdoc/classes/PhusionPassenger/Utils/RewindableInput/Tempfile.html +0 -120
- data/doc/rdoc/classes/PhusionPassenger/Utils/UnseekableSocket.html +0 -561
- data/doc/rdoc/classes/PhusionPassenger/VersionNotFound.html +0 -140
- data/doc/rdoc/classes/PhusionPassenger/WSGI.html +0 -89
- data/doc/rdoc/classes/PhusionPassenger/WSGI/ApplicationSpawner.html +0 -182
- data/doc/rdoc/classes/Process.html +0 -115
- data/doc/rdoc/classes/Signal.html +0 -139
- data/doc/rdoc/created.rid +0 -1
- data/doc/rdoc/files/DEVELOPERS_TXT.html +0 -276
- data/doc/rdoc/files/README.html +0 -157
- data/doc/rdoc/files/lib/phusion_passenger/abstract_installer_rb.html +0 -130
- data/doc/rdoc/files/lib/phusion_passenger/abstract_request_handler_rb.html +0 -135
- data/doc/rdoc/files/lib/phusion_passenger/abstract_server_collection_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/abstract_server_rb.html +0 -128
- data/doc/rdoc/files/lib/phusion_passenger/admin_tools/memory_stats_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/admin_tools/server_instance_rb.html +0 -132
- data/doc/rdoc/files/lib/phusion_passenger/admin_tools_rb.html +0 -122
- data/doc/rdoc/files/lib/phusion_passenger/analytics_logger_rb.html +0 -129
- data/doc/rdoc/files/lib/phusion_passenger/app_process_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/classic_rails/application_spawner_rb.html +0 -141
- data/doc/rdoc/files/lib/phusion_passenger/classic_rails/cgi_fixed_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/classic_rails/framework_spawner_rb.html +0 -146
- data/doc/rdoc/files/lib/phusion_passenger/classic_rails/request_handler_rb.html +0 -125
- data/doc/rdoc/files/lib/phusion_passenger/classic_rails_extensions/init_rb.html +0 -132
- data/doc/rdoc/files/lib/phusion_passenger/console_text_template_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/constants_rb.html +0 -122
- data/doc/rdoc/files/lib/phusion_passenger/debug_logging_rb.html +0 -122
- data/doc/rdoc/files/lib/phusion_passenger/dependencies_rb.html +0 -147
- data/doc/rdoc/files/lib/phusion_passenger/exceptions_rb.html +0 -122
- data/doc/rdoc/files/lib/phusion_passenger/html_template_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/message_channel_rb.html +0 -120
- data/doc/rdoc/files/lib/phusion_passenger/message_client_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/native_support_rb.html +0 -132
- data/doc/rdoc/files/lib/phusion_passenger/packaging_rb.html +0 -122
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/apache_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/binary_compatibility_rb.html +0 -129
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/compiler_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/curl_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/documentation_tools_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/linux_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/operating_system_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/ruby_rb.html +0 -128
- data/doc/rdoc/files/lib/phusion_passenger/platform_info/zlib_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/platform_info_rb.html +0 -122
- data/doc/rdoc/files/lib/phusion_passenger/plugin_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/public_api_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/rack/application_spawner_rb.html +0 -137
- data/doc/rdoc/files/lib/phusion_passenger/rack/request_handler_rb.html +0 -125
- data/doc/rdoc/files/lib/phusion_passenger/rails3_extensions/init_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/simple_benchmarking_rb.html +0 -122
- data/doc/rdoc/files/lib/phusion_passenger/spawn_manager_rb.html +0 -160
- data/doc/rdoc/files/lib/phusion_passenger/standalone/app_finder_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/standalone/command_rb.html +0 -135
- data/doc/rdoc/files/lib/phusion_passenger/standalone/config_file_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/standalone/help_command_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/standalone/main_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/standalone/package_runtime_command_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/standalone/runtime_installer_rb.html +0 -133
- data/doc/rdoc/files/lib/phusion_passenger/standalone/start_command_rb.html +0 -136
- data/doc/rdoc/files/lib/phusion_passenger/standalone/status_command_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/standalone/stop_command_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/standalone/utils_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/standalone/version_command_rb.html +0 -127
- data/doc/rdoc/files/lib/phusion_passenger/utils/file_system_watcher_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/utils/hosts_file_parser_rb.html +0 -120
- data/doc/rdoc/files/lib/phusion_passenger/utils/rewindable_input_rb.html +0 -100
- data/doc/rdoc/files/lib/phusion_passenger/utils/tmpdir_rb.html +0 -122
- data/doc/rdoc/files/lib/phusion_passenger/utils/unseekable_socket_rb.html +0 -126
- data/doc/rdoc/files/lib/phusion_passenger/utils_rb.html +0 -179
- data/doc/rdoc/files/lib/phusion_passenger/wsgi/application_spawner_rb.html +0 -132
- data/doc/rdoc/fr_class_index.html +0 -138
- data/doc/rdoc/fr_file_index.html +0 -108
- data/doc/rdoc/fr_method_index.html +0 -430
- data/doc/rdoc/index.html +0 -26
- data/doc/rdoc/rdoc-style.css +0 -187
- data/ext/apache2/LICENSE-CNRI.TXT +0 -79
- data/ext/common/Utils/BlockingScalar.h +0 -50
- data/ext/common/Utils/FileHandleGuard.h +0 -81
@@ -4,7 +4,7 @@
|
|
4
4
|
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
5
5
|
// http://www.boost.org/LICENSE_1_0.txt)
|
6
6
|
//
|
7
|
-
// See http://www.boost.org/
|
7
|
+
// See http://www.boost.org/libs/optional for documentation.
|
8
8
|
//
|
9
9
|
// You are welcome to contact the author at:
|
10
10
|
// fernando_cacciola@hotmail.com
|
@@ -168,8 +168,10 @@ class optional_base : public optional_tag
|
|
168
168
|
|
169
169
|
typedef BOOST_DEDUCED_TYPENAME is_reference<T>::type is_reference_predicate ;
|
170
170
|
|
171
|
+
public:
|
171
172
|
typedef BOOST_DEDUCED_TYPENAME mpl::if_<is_reference_predicate,types_when_ref,types_when_not_ref>::type types ;
|
172
173
|
|
174
|
+
protected:
|
173
175
|
typedef bool (this_type::*unspecified_bool_type)() const;
|
174
176
|
|
175
177
|
typedef BOOST_DEDUCED_TYPENAME types::reference_type reference_type ;
|
@@ -4,7 +4,7 @@
|
|
4
4
|
// License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
5
5
|
// http://www.boost.org/LICENSE_1_0.txt)
|
6
6
|
//
|
7
|
-
// See http://www.boost.org/
|
7
|
+
// See http://www.boost.org/libs/optional for documentation.
|
8
8
|
//
|
9
9
|
// You are welcome to contact the author at:
|
10
10
|
// fernando_cacciola@hotmail.com
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# /* **************************************************************************
|
2
|
+
# * *
|
3
|
+
# * (C) Copyright Paul Mensonides 2002.
|
4
|
+
# * Distributed under 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
|
+
# ************************************************************************** */
|
9
|
+
#
|
10
|
+
# /* See http://www.boost.org for most recent version. */
|
11
|
+
#
|
12
|
+
# ifndef BOOST_PREPROCESSOR_REPETITION_ENUM_TRAILING_PARAMS_HPP
|
13
|
+
# define BOOST_PREPROCESSOR_REPETITION_ENUM_TRAILING_PARAMS_HPP
|
14
|
+
#
|
15
|
+
# include <boost/preprocessor/config/config.hpp>
|
16
|
+
# include <boost/preprocessor/repetition/repeat.hpp>
|
17
|
+
#
|
18
|
+
# /* BOOST_PP_ENUM_TRAILING_PARAMS */
|
19
|
+
#
|
20
|
+
# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
|
21
|
+
# define BOOST_PP_ENUM_TRAILING_PARAMS(count, param) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_TRAILING_PARAMS_M, param)
|
22
|
+
# else
|
23
|
+
# define BOOST_PP_ENUM_TRAILING_PARAMS(count, param) BOOST_PP_ENUM_TRAILING_PARAMS_I(count, param)
|
24
|
+
# define BOOST_PP_ENUM_TRAILING_PARAMS_I(count, param) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_TRAILING_PARAMS_M, param)
|
25
|
+
# endif
|
26
|
+
#
|
27
|
+
# define BOOST_PP_ENUM_TRAILING_PARAMS_M(z, n, param) , param ## n
|
28
|
+
#
|
29
|
+
# /* BOOST_PP_ENUM_TRAILING_PARAMS_Z */
|
30
|
+
#
|
31
|
+
# if ~BOOST_PP_CONFIG_FLAGS() & BOOST_PP_CONFIG_EDG()
|
32
|
+
# define BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, count, param) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_TRAILING_PARAMS_M, param)
|
33
|
+
# else
|
34
|
+
# define BOOST_PP_ENUM_TRAILING_PARAMS_Z(z, count, param) BOOST_PP_ENUM_TRAILING_PARAMS_Z_I(z, count, param)
|
35
|
+
# define BOOST_PP_ENUM_TRAILING_PARAMS_Z_I(z, count, param) BOOST_PP_REPEAT_ ## z(count, BOOST_PP_ENUM_TRAILING_PARAMS_M, param)
|
36
|
+
# endif
|
37
|
+
#
|
38
|
+
# endif
|
@@ -0,0 +1,188 @@
|
|
1
|
+
// Boost.Range library
|
2
|
+
//
|
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
|
+
// 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_ALGORITHM_EQUAL_HPP_INCLUDED
|
11
|
+
#define BOOST_RANGE_ALGORITHM_EQUAL_HPP_INCLUDED
|
12
|
+
|
13
|
+
#include <boost/config.hpp>
|
14
|
+
#include <boost/range/concepts.hpp>
|
15
|
+
#include <iterator>
|
16
|
+
|
17
|
+
namespace boost
|
18
|
+
{
|
19
|
+
namespace range_detail
|
20
|
+
{
|
21
|
+
// An implementation of equality comparison that is optimized for iterator
|
22
|
+
// traversal categories less than RandomAccessTraversal.
|
23
|
+
template< class SinglePassTraversalReadableIterator1,
|
24
|
+
class SinglePassTraversalReadableIterator2,
|
25
|
+
class IteratorCategoryTag1,
|
26
|
+
class IteratorCategoryTag2 >
|
27
|
+
inline bool equal_impl( SinglePassTraversalReadableIterator1 first1,
|
28
|
+
SinglePassTraversalReadableIterator1 last1,
|
29
|
+
SinglePassTraversalReadableIterator2 first2,
|
30
|
+
SinglePassTraversalReadableIterator2 last2,
|
31
|
+
IteratorCategoryTag1,
|
32
|
+
IteratorCategoryTag2 )
|
33
|
+
{
|
34
|
+
do
|
35
|
+
{
|
36
|
+
// If we have reached the end of the left range then this is
|
37
|
+
// the end of the loop. They are equal if and only if we have
|
38
|
+
// simultaneously reached the end of the right range.
|
39
|
+
if (first1 == last1)
|
40
|
+
return first2 == last2;
|
41
|
+
|
42
|
+
// If we have reached the end of the right range at this line
|
43
|
+
// it indicates that the right range is shorter than the left
|
44
|
+
// and hence the result is false.
|
45
|
+
if (first2 == last2)
|
46
|
+
return false;
|
47
|
+
|
48
|
+
// continue looping if and only if the values are equal
|
49
|
+
} while(*first1++ == *first2++);
|
50
|
+
|
51
|
+
// Reaching this line in the algorithm indicates that a value
|
52
|
+
// inequality has been detected.
|
53
|
+
return false;
|
54
|
+
}
|
55
|
+
|
56
|
+
template< class SinglePassTraversalReadableIterator1,
|
57
|
+
class SinglePassTraversalReadableIterator2,
|
58
|
+
class IteratorCategoryTag1,
|
59
|
+
class IteratorCategoryTag2,
|
60
|
+
class BinaryPredicate >
|
61
|
+
inline bool equal_impl( SinglePassTraversalReadableIterator1 first1,
|
62
|
+
SinglePassTraversalReadableIterator1 last1,
|
63
|
+
SinglePassTraversalReadableIterator2 first2,
|
64
|
+
SinglePassTraversalReadableIterator2 last2,
|
65
|
+
BinaryPredicate pred,
|
66
|
+
IteratorCategoryTag1,
|
67
|
+
IteratorCategoryTag2 )
|
68
|
+
{
|
69
|
+
do
|
70
|
+
{
|
71
|
+
// If we have reached the end of the left range then this is
|
72
|
+
// the end of the loop. They are equal if and only if we have
|
73
|
+
// simultaneously reached the end of the right range.
|
74
|
+
if (first1 == last1)
|
75
|
+
return first2 == last2;
|
76
|
+
|
77
|
+
// If we have reached the end of the right range at this line
|
78
|
+
// it indicates that the right range is shorter than the left
|
79
|
+
// and hence the result is false.
|
80
|
+
if (first2 == last2)
|
81
|
+
return false;
|
82
|
+
|
83
|
+
// continue looping if and only if the values are equal
|
84
|
+
} while(pred(*first1++, *first2++));
|
85
|
+
|
86
|
+
// Reaching this line in the algorithm indicates that a value
|
87
|
+
// inequality has been detected.
|
88
|
+
return false;
|
89
|
+
}
|
90
|
+
|
91
|
+
// An implementation of equality comparison that is optimized for
|
92
|
+
// random access iterators.
|
93
|
+
template< class RandomAccessTraversalReadableIterator1,
|
94
|
+
class RandomAccessTraversalReadableIterator2 >
|
95
|
+
inline bool equal_impl( RandomAccessTraversalReadableIterator1 first1,
|
96
|
+
RandomAccessTraversalReadableIterator1 last1,
|
97
|
+
RandomAccessTraversalReadableIterator2 first2,
|
98
|
+
RandomAccessTraversalReadableIterator2 last2,
|
99
|
+
std::random_access_iterator_tag,
|
100
|
+
std::random_access_iterator_tag )
|
101
|
+
{
|
102
|
+
return ((last1 - first1) == (last2 - first2))
|
103
|
+
&& std::equal(first1, last1, first2);
|
104
|
+
}
|
105
|
+
|
106
|
+
template< class RandomAccessTraversalReadableIterator1,
|
107
|
+
class RandomAccessTraversalReadableIterator2,
|
108
|
+
class BinaryPredicate >
|
109
|
+
inline bool equal_impl( RandomAccessTraversalReadableIterator1 first1,
|
110
|
+
RandomAccessTraversalReadableIterator1 last1,
|
111
|
+
RandomAccessTraversalReadableIterator2 first2,
|
112
|
+
RandomAccessTraversalReadableIterator2 last2,
|
113
|
+
BinaryPredicate pred )
|
114
|
+
{
|
115
|
+
return ((last1 - first1) == (last2 - first2))
|
116
|
+
&& std::equal(first1, last1, first2, pred);
|
117
|
+
}
|
118
|
+
|
119
|
+
template< class SinglePassTraversalReadableIterator1,
|
120
|
+
class SinglePassTraversalReadableIterator2 >
|
121
|
+
inline bool equal( SinglePassTraversalReadableIterator1 first1,
|
122
|
+
SinglePassTraversalReadableIterator1 last1,
|
123
|
+
SinglePassTraversalReadableIterator2 first2,
|
124
|
+
SinglePassTraversalReadableIterator2 last2 )
|
125
|
+
{
|
126
|
+
BOOST_DEDUCED_TYPENAME std::iterator_traits< SinglePassTraversalReadableIterator1 >::iterator_category tag1;
|
127
|
+
BOOST_DEDUCED_TYPENAME std::iterator_traits< SinglePassTraversalReadableIterator2 >::iterator_category tag2;
|
128
|
+
|
129
|
+
return equal_impl(first1, last1, first2, last2, tag1, tag2);
|
130
|
+
}
|
131
|
+
|
132
|
+
template< class SinglePassTraversalReadableIterator1,
|
133
|
+
class SinglePassTraversalReadableIterator2,
|
134
|
+
class BinaryPredicate >
|
135
|
+
inline bool equal( SinglePassTraversalReadableIterator1 first1,
|
136
|
+
SinglePassTraversalReadableIterator1 last1,
|
137
|
+
SinglePassTraversalReadableIterator2 first2,
|
138
|
+
SinglePassTraversalReadableIterator2 last2,
|
139
|
+
BinaryPredicate pred )
|
140
|
+
{
|
141
|
+
BOOST_DEDUCED_TYPENAME std::iterator_traits< SinglePassTraversalReadableIterator1 >::iterator_category tag1;
|
142
|
+
BOOST_DEDUCED_TYPENAME std::iterator_traits< SinglePassTraversalReadableIterator2 >::iterator_category tag2;
|
143
|
+
|
144
|
+
return equal_impl(first1, last1, first2, last2, pred, tag1, tag2);
|
145
|
+
}
|
146
|
+
|
147
|
+
} // namespace range_detail
|
148
|
+
|
149
|
+
namespace range
|
150
|
+
{
|
151
|
+
|
152
|
+
/// \brief template function equal
|
153
|
+
///
|
154
|
+
/// range-based version of the equal std algorithm
|
155
|
+
///
|
156
|
+
/// \pre SinglePassRange1 is a model of the SinglePassRangeConcept
|
157
|
+
/// \pre SinglePassRange2 is a model of the SinglePassRangeConcept
|
158
|
+
/// \pre BinaryPredicate is a model of the BinaryPredicateConcept
|
159
|
+
template< class SinglePassRange1, class SinglePassRange2 >
|
160
|
+
inline bool equal( const SinglePassRange1& rng1, const SinglePassRange2& rng2 )
|
161
|
+
{
|
162
|
+
BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
|
163
|
+
BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
|
164
|
+
|
165
|
+
return ::boost::range_detail::equal(
|
166
|
+
::boost::begin(rng1), ::boost::end(rng1),
|
167
|
+
::boost::begin(rng2), ::boost::end(rng2) );
|
168
|
+
}
|
169
|
+
|
170
|
+
/// \overload
|
171
|
+
template< class SinglePassRange1, class SinglePassRange2, class BinaryPredicate >
|
172
|
+
inline bool equal( const SinglePassRange1& rng1, const SinglePassRange2& rng2,
|
173
|
+
BinaryPredicate pred )
|
174
|
+
{
|
175
|
+
BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange1> ));
|
176
|
+
BOOST_RANGE_CONCEPT_ASSERT(( SinglePassRangeConcept<const SinglePassRange2> ));
|
177
|
+
|
178
|
+
return ::boost::range_detail::equal(
|
179
|
+
::boost::begin(rng1), ::boost::end(rng1),
|
180
|
+
::boost::begin(rng2), ::boost::end(rng2),
|
181
|
+
pred);
|
182
|
+
}
|
183
|
+
|
184
|
+
} // namespace range
|
185
|
+
using range::equal;
|
186
|
+
} // namespace boost
|
187
|
+
|
188
|
+
#endif // include guard
|
@@ -25,7 +25,7 @@
|
|
25
25
|
#include <boost/detail/workaround.hpp>
|
26
26
|
|
27
27
|
#include <cstring>
|
28
|
-
#ifndef BOOST_NO_CWCHAR
|
28
|
+
#ifndef BOOST_NO_CWCHAR
|
29
29
|
#include <cwchar>
|
30
30
|
#endif
|
31
31
|
|
@@ -38,41 +38,41 @@ namespace boost
|
|
38
38
|
return strlen( s );
|
39
39
|
}
|
40
40
|
|
41
|
-
#ifndef BOOST_NO_CWCHAR
|
41
|
+
#ifndef BOOST_NO_CWCHAR
|
42
42
|
inline std::size_t length( const wchar_t* s )
|
43
43
|
{
|
44
44
|
return wcslen( s );
|
45
45
|
}
|
46
|
-
#endif
|
46
|
+
#endif
|
47
47
|
|
48
48
|
//
|
49
49
|
// Remark: the compiler cannot choose between T* and T[sz]
|
50
50
|
// overloads, so we must put the T* internal to the
|
51
51
|
// unconstrained version.
|
52
|
-
//
|
52
|
+
//
|
53
53
|
|
54
54
|
inline bool is_char_ptr( char* )
|
55
55
|
{
|
56
56
|
return true;
|
57
57
|
}
|
58
|
-
|
58
|
+
|
59
59
|
inline bool is_char_ptr( const char* )
|
60
60
|
{
|
61
61
|
return true;
|
62
62
|
}
|
63
63
|
|
64
|
-
#ifndef BOOST_NO_CWCHAR
|
64
|
+
#ifndef BOOST_NO_CWCHAR
|
65
65
|
inline bool is_char_ptr( wchar_t* )
|
66
66
|
{
|
67
67
|
return true;
|
68
68
|
}
|
69
|
-
|
69
|
+
|
70
70
|
inline bool is_char_ptr( const wchar_t* )
|
71
71
|
{
|
72
72
|
return true;
|
73
73
|
}
|
74
74
|
#endif
|
75
|
-
|
75
|
+
|
76
76
|
template< class T >
|
77
77
|
inline long is_char_ptr( T /* r */ )
|
78
78
|
{
|
@@ -80,30 +80,30 @@ namespace boost
|
|
80
80
|
}
|
81
81
|
|
82
82
|
template< class T >
|
83
|
-
inline iterator_range<T*>
|
83
|
+
inline iterator_range<T*>
|
84
84
|
make_range( T* const r, bool )
|
85
85
|
{
|
86
86
|
return iterator_range<T*>( r, r + length(r) );
|
87
87
|
}
|
88
88
|
|
89
89
|
template< class T >
|
90
|
-
inline iterator_range<BOOST_DEDUCED_TYPENAME range_iterator<T>::type>
|
90
|
+
inline iterator_range<BOOST_DEDUCED_TYPENAME range_iterator<T>::type>
|
91
91
|
make_range( T& r, long )
|
92
92
|
{
|
93
93
|
return boost::make_iterator_range( r );
|
94
94
|
}
|
95
95
|
|
96
96
|
}
|
97
|
-
|
97
|
+
|
98
98
|
template< class Range >
|
99
|
-
inline iterator_range<BOOST_DEDUCED_TYPENAME range_iterator<Range>::type>
|
99
|
+
inline iterator_range<BOOST_DEDUCED_TYPENAME range_iterator<Range>::type>
|
100
100
|
as_literal( Range& r )
|
101
101
|
{
|
102
102
|
return range_detail::make_range( r, range_detail::is_char_ptr(r) );
|
103
103
|
}
|
104
104
|
|
105
105
|
template< class Range >
|
106
|
-
inline iterator_range<BOOST_DEDUCED_TYPENAME range_iterator<const Range>::type>
|
106
|
+
inline iterator_range<BOOST_DEDUCED_TYPENAME range_iterator<const Range>::type>
|
107
107
|
as_literal( const Range& r )
|
108
108
|
{
|
109
109
|
return range_detail::make_range( r, range_detail::is_char_ptr(r) );
|
@@ -112,9 +112,9 @@ namespace boost
|
|
112
112
|
template< class Char, std::size_t sz >
|
113
113
|
inline iterator_range<Char*> as_literal( Char (&arr)[sz] )
|
114
114
|
{
|
115
|
-
return range_detail::make_range( arr, range_detail::is_char_ptr(arr) );
|
115
|
+
return range_detail::make_range( arr, range_detail::is_char_ptr(arr) );
|
116
116
|
}
|
117
|
-
|
117
|
+
|
118
118
|
template< class Char, std::size_t sz >
|
119
119
|
inline iterator_range<const Char*> as_literal( const Char (&arr)[sz] )
|
120
120
|
{
|
@@ -0,0 +1,331 @@
|
|
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
|
+
// Copyright Daniel Walker 2006. Use, modification and distribution
|
9
|
+
// are subject to the Boost Software License, Version 1.0. (See
|
10
|
+
// accompanying file LICENSE_1_0.txt or copy at
|
11
|
+
// http://www.boost.org/LICENSE_1_0.txt)
|
12
|
+
//
|
13
|
+
// For more information, see http://www.boost.org/libs/range/
|
14
|
+
//
|
15
|
+
|
16
|
+
#ifndef BOOST_RANGE_CONCEPTS_HPP
|
17
|
+
#define BOOST_RANGE_CONCEPTS_HPP
|
18
|
+
|
19
|
+
#include <boost/concept_check.hpp>
|
20
|
+
#include <boost/iterator/iterator_concepts.hpp>
|
21
|
+
#include <boost/range/begin.hpp>
|
22
|
+
#include <boost/range/end.hpp>
|
23
|
+
#include <boost/range/iterator.hpp>
|
24
|
+
#include <boost/range/value_type.hpp>
|
25
|
+
#include <boost/range/detail/misc_concept.hpp>
|
26
|
+
|
27
|
+
/*!
|
28
|
+
* \file
|
29
|
+
* \brief Concept checks for the Boost Range library.
|
30
|
+
*
|
31
|
+
* The structures in this file may be used in conjunction with the
|
32
|
+
* Boost Concept Check library to insure that the type of a function
|
33
|
+
* parameter is compatible with a range concept. If not, a meaningful
|
34
|
+
* compile time error is generated. Checks are provided for the range
|
35
|
+
* concepts related to iterator traversal categories. For example, the
|
36
|
+
* following line checks that the type T models the ForwardRange
|
37
|
+
* concept.
|
38
|
+
*
|
39
|
+
* \code
|
40
|
+
* BOOST_CONCEPT_ASSERT((ForwardRangeConcept<T>));
|
41
|
+
* \endcode
|
42
|
+
*
|
43
|
+
* A different concept check is required to ensure writeable value
|
44
|
+
* access. For example to check for a ForwardRange that can be written
|
45
|
+
* to, the following code is required.
|
46
|
+
*
|
47
|
+
* \code
|
48
|
+
* BOOST_CONCEPT_ASSERT((WriteableForwardRangeConcept<T>));
|
49
|
+
* \endcode
|
50
|
+
*
|
51
|
+
* \see http://www.boost.org/libs/range/doc/range.html for details
|
52
|
+
* about range concepts.
|
53
|
+
* \see http://www.boost.org/libs/iterator/doc/iterator_concepts.html
|
54
|
+
* for details about iterator concepts.
|
55
|
+
* \see http://www.boost.org/libs/concept_check/concept_check.htm for
|
56
|
+
* details about concept checks.
|
57
|
+
*/
|
58
|
+
|
59
|
+
namespace boost {
|
60
|
+
|
61
|
+
namespace range_detail {
|
62
|
+
|
63
|
+
#ifndef BOOST_RANGE_ENABLE_CONCEPT_ASSERT
|
64
|
+
|
65
|
+
// List broken compiler versions here:
|
66
|
+
#ifdef __GNUC__
|
67
|
+
// GNUC 4.2 has strange issues correctly detecting compliance with the Concepts
|
68
|
+
// hence the least disruptive approach is to turn-off the concept checking for
|
69
|
+
// this version of the compiler.
|
70
|
+
#if __GNUC__ == 4 && __GNUC_MINOR__ == 2
|
71
|
+
#define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 0
|
72
|
+
#endif
|
73
|
+
#endif
|
74
|
+
|
75
|
+
#ifdef __BORLANDC__
|
76
|
+
#define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 0
|
77
|
+
#endif
|
78
|
+
|
79
|
+
#ifdef __PATHCC__
|
80
|
+
#define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 0
|
81
|
+
#endif
|
82
|
+
|
83
|
+
// Default to using the concept asserts unless we have defined it off
|
84
|
+
// during the search for black listed compilers.
|
85
|
+
#ifndef BOOST_RANGE_ENABLE_CONCEPT_ASSERT
|
86
|
+
#define BOOST_RANGE_ENABLE_CONCEPT_ASSERT 1
|
87
|
+
#endif
|
88
|
+
|
89
|
+
#endif
|
90
|
+
|
91
|
+
#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
|
92
|
+
#define BOOST_RANGE_CONCEPT_ASSERT( x ) BOOST_CONCEPT_ASSERT( x )
|
93
|
+
#else
|
94
|
+
#define BOOST_RANGE_CONCEPT_ASSERT( x )
|
95
|
+
#endif
|
96
|
+
|
97
|
+
// Rationale for the inclusion of redefined iterator concept
|
98
|
+
// classes:
|
99
|
+
//
|
100
|
+
// The Range algorithms often do not require that the iterators are
|
101
|
+
// Assignable, but the correct standard conformant iterators
|
102
|
+
// do require the iterators to be a model of the Assignable concept.
|
103
|
+
// Iterators that contains a functor that is not assignable therefore
|
104
|
+
// are not correct models of the standard iterator concepts,
|
105
|
+
// despite being adequate for most algorithms. An example of this
|
106
|
+
// use case is the combination of the boost::adaptors::filtered
|
107
|
+
// class with a boost::lambda::bind generated functor.
|
108
|
+
// Ultimately modeling the range concepts using composition
|
109
|
+
// with the Boost.Iterator concepts would render the library
|
110
|
+
// incompatible with many common Boost.Lambda expressions.
|
111
|
+
template<class Iterator>
|
112
|
+
struct IncrementableIteratorConcept : CopyConstructible<Iterator>
|
113
|
+
{
|
114
|
+
#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
|
115
|
+
typedef BOOST_DEDUCED_TYPENAME iterator_traversal<Iterator>::type traversal_category;
|
116
|
+
|
117
|
+
BOOST_RANGE_CONCEPT_ASSERT((
|
118
|
+
Convertible<
|
119
|
+
traversal_category,
|
120
|
+
incrementable_traversal_tag
|
121
|
+
>));
|
122
|
+
|
123
|
+
BOOST_CONCEPT_USAGE(IncrementableIteratorConcept)
|
124
|
+
{
|
125
|
+
++i;
|
126
|
+
(void)i++;
|
127
|
+
}
|
128
|
+
private:
|
129
|
+
Iterator i;
|
130
|
+
#endif
|
131
|
+
};
|
132
|
+
|
133
|
+
template<class Iterator>
|
134
|
+
struct SinglePassIteratorConcept
|
135
|
+
: IncrementableIteratorConcept<Iterator>
|
136
|
+
, EqualityComparable<Iterator>
|
137
|
+
{
|
138
|
+
#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
|
139
|
+
BOOST_RANGE_CONCEPT_ASSERT((
|
140
|
+
Convertible<
|
141
|
+
BOOST_DEDUCED_TYPENAME SinglePassIteratorConcept::traversal_category,
|
142
|
+
single_pass_traversal_tag
|
143
|
+
>));
|
144
|
+
#endif
|
145
|
+
};
|
146
|
+
|
147
|
+
template<class Iterator>
|
148
|
+
struct ForwardIteratorConcept
|
149
|
+
: SinglePassIteratorConcept<Iterator>
|
150
|
+
, DefaultConstructible<Iterator>
|
151
|
+
{
|
152
|
+
#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
|
153
|
+
typedef BOOST_DEDUCED_TYPENAME boost::detail::iterator_traits<Iterator>::difference_type difference_type;
|
154
|
+
|
155
|
+
BOOST_MPL_ASSERT((is_integral<difference_type>));
|
156
|
+
BOOST_MPL_ASSERT_RELATION(std::numeric_limits<difference_type>::is_signed, ==, true);
|
157
|
+
|
158
|
+
BOOST_RANGE_CONCEPT_ASSERT((
|
159
|
+
Convertible<
|
160
|
+
BOOST_DEDUCED_TYPENAME ForwardIteratorConcept::traversal_category,
|
161
|
+
forward_traversal_tag
|
162
|
+
>));
|
163
|
+
#endif
|
164
|
+
};
|
165
|
+
|
166
|
+
template<class Iterator>
|
167
|
+
struct BidirectionalIteratorConcept
|
168
|
+
: ForwardIteratorConcept<Iterator>
|
169
|
+
{
|
170
|
+
#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
|
171
|
+
BOOST_RANGE_CONCEPT_ASSERT((
|
172
|
+
Convertible<
|
173
|
+
BOOST_DEDUCED_TYPENAME BidirectionalIteratorConcept::traversal_category,
|
174
|
+
bidirectional_traversal_tag
|
175
|
+
>));
|
176
|
+
|
177
|
+
BOOST_CONCEPT_USAGE(BidirectionalIteratorConcept)
|
178
|
+
{
|
179
|
+
--i;
|
180
|
+
(void)i--;
|
181
|
+
}
|
182
|
+
private:
|
183
|
+
Iterator i;
|
184
|
+
#endif
|
185
|
+
};
|
186
|
+
|
187
|
+
template<class Iterator>
|
188
|
+
struct RandomAccessIteratorConcept
|
189
|
+
: BidirectionalIteratorConcept<Iterator>
|
190
|
+
{
|
191
|
+
#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
|
192
|
+
BOOST_RANGE_CONCEPT_ASSERT((
|
193
|
+
Convertible<
|
194
|
+
BOOST_DEDUCED_TYPENAME RandomAccessIteratorConcept::traversal_category,
|
195
|
+
random_access_traversal_tag
|
196
|
+
>));
|
197
|
+
|
198
|
+
BOOST_CONCEPT_USAGE(RandomAccessIteratorConcept)
|
199
|
+
{
|
200
|
+
i += n;
|
201
|
+
i = i + n;
|
202
|
+
i = n + i;
|
203
|
+
i -= n;
|
204
|
+
i = i - n;
|
205
|
+
n = i - j;
|
206
|
+
}
|
207
|
+
private:
|
208
|
+
BOOST_DEDUCED_TYPENAME RandomAccessIteratorConcept::difference_type n;
|
209
|
+
Iterator i;
|
210
|
+
Iterator j;
|
211
|
+
#endif
|
212
|
+
};
|
213
|
+
|
214
|
+
} // namespace range_detail
|
215
|
+
|
216
|
+
//! Check if a type T models the SinglePassRange range concept.
|
217
|
+
template<class T>
|
218
|
+
struct SinglePassRangeConcept
|
219
|
+
{
|
220
|
+
#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
|
221
|
+
typedef BOOST_DEDUCED_TYPENAME range_iterator<T const>::type const_iterator;
|
222
|
+
typedef BOOST_DEDUCED_TYPENAME range_iterator<T>::type iterator;
|
223
|
+
|
224
|
+
BOOST_RANGE_CONCEPT_ASSERT((range_detail::SinglePassIteratorConcept<iterator>));
|
225
|
+
BOOST_RANGE_CONCEPT_ASSERT((range_detail::SinglePassIteratorConcept<const_iterator>));
|
226
|
+
|
227
|
+
BOOST_CONCEPT_USAGE(SinglePassRangeConcept)
|
228
|
+
{
|
229
|
+
// This has been modified from assigning to this->i
|
230
|
+
// (where i was a member variable) to improve
|
231
|
+
// compatibility with Boost.Lambda
|
232
|
+
iterator i1 = boost::begin(*m_range);
|
233
|
+
iterator i2 = boost::end(*m_range);
|
234
|
+
|
235
|
+
ignore_unused_variable_warning(i1);
|
236
|
+
ignore_unused_variable_warning(i2);
|
237
|
+
|
238
|
+
const_constraints(*m_range);
|
239
|
+
}
|
240
|
+
|
241
|
+
private:
|
242
|
+
void const_constraints(const T& const_range)
|
243
|
+
{
|
244
|
+
const_iterator ci1 = boost::begin(const_range);
|
245
|
+
const_iterator ci2 = boost::end(const_range);
|
246
|
+
|
247
|
+
ignore_unused_variable_warning(ci1);
|
248
|
+
ignore_unused_variable_warning(ci2);
|
249
|
+
}
|
250
|
+
|
251
|
+
// Rationale:
|
252
|
+
// The type of m_range is T* rather than T because it allows
|
253
|
+
// T to be an abstract class. The other obvious alternative of
|
254
|
+
// T& produces a warning on some compilers.
|
255
|
+
T* m_range;
|
256
|
+
#endif
|
257
|
+
};
|
258
|
+
|
259
|
+
//! Check if a type T models the ForwardRange range concept.
|
260
|
+
template<class T>
|
261
|
+
struct ForwardRangeConcept : SinglePassRangeConcept<T>
|
262
|
+
{
|
263
|
+
#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
|
264
|
+
BOOST_RANGE_CONCEPT_ASSERT((range_detail::ForwardIteratorConcept<BOOST_DEDUCED_TYPENAME ForwardRangeConcept::iterator>));
|
265
|
+
BOOST_RANGE_CONCEPT_ASSERT((range_detail::ForwardIteratorConcept<BOOST_DEDUCED_TYPENAME ForwardRangeConcept::const_iterator>));
|
266
|
+
#endif
|
267
|
+
};
|
268
|
+
|
269
|
+
template<class Range>
|
270
|
+
struct WriteableRangeConcept
|
271
|
+
{
|
272
|
+
#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
|
273
|
+
typedef BOOST_DEDUCED_TYPENAME range_iterator<Range>::type iterator;
|
274
|
+
|
275
|
+
BOOST_CONCEPT_USAGE(WriteableRangeConcept)
|
276
|
+
{
|
277
|
+
*i = v;
|
278
|
+
}
|
279
|
+
private:
|
280
|
+
iterator i;
|
281
|
+
BOOST_DEDUCED_TYPENAME range_value<Range>::type v;
|
282
|
+
#endif
|
283
|
+
};
|
284
|
+
|
285
|
+
//! Check if a type T models the WriteableForwardRange range concept.
|
286
|
+
template<class T>
|
287
|
+
struct WriteableForwardRangeConcept
|
288
|
+
: ForwardRangeConcept<T>
|
289
|
+
, WriteableRangeConcept<T>
|
290
|
+
{
|
291
|
+
};
|
292
|
+
|
293
|
+
//! Check if a type T models the BidirectionalRange range concept.
|
294
|
+
template<class T>
|
295
|
+
struct BidirectionalRangeConcept : ForwardRangeConcept<T>
|
296
|
+
{
|
297
|
+
#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
|
298
|
+
BOOST_RANGE_CONCEPT_ASSERT((BidirectionalIteratorConcept<BOOST_DEDUCED_TYPENAME BidirectionalRangeConcept::iterator>));
|
299
|
+
BOOST_RANGE_CONCEPT_ASSERT((BidirectionalIteratorConcept<BOOST_DEDUCED_TYPENAME BidirectionalRangeConcept::const_iterator>));
|
300
|
+
#endif
|
301
|
+
};
|
302
|
+
|
303
|
+
//! Check if a type T models the WriteableBidirectionalRange range concept.
|
304
|
+
template<class T>
|
305
|
+
struct WriteableBidirectionalRangeConcept
|
306
|
+
: BidirectionalRangeConcept<T>
|
307
|
+
, WriteableRangeConcept<T>
|
308
|
+
{
|
309
|
+
};
|
310
|
+
|
311
|
+
//! Check if a type T models the RandomAccessRange range concept.
|
312
|
+
template<class T>
|
313
|
+
struct RandomAccessRangeConcept : BidirectionalRangeConcept<T>
|
314
|
+
{
|
315
|
+
#if BOOST_RANGE_ENABLE_CONCEPT_ASSERT
|
316
|
+
BOOST_RANGE_CONCEPT_ASSERT((RandomAccessIteratorConcept<BOOST_DEDUCED_TYPENAME RandomAccessRangeConcept::iterator>));
|
317
|
+
BOOST_RANGE_CONCEPT_ASSERT((RandomAccessIteratorConcept<BOOST_DEDUCED_TYPENAME RandomAccessRangeConcept::const_iterator>));
|
318
|
+
#endif
|
319
|
+
};
|
320
|
+
|
321
|
+
//! Check if a type T models the WriteableRandomAccessRange range concept.
|
322
|
+
template<class T>
|
323
|
+
struct WriteableRandomAccessRangeConcept
|
324
|
+
: RandomAccessRangeConcept<T>
|
325
|
+
, WriteableRangeConcept<T>
|
326
|
+
{
|
327
|
+
};
|
328
|
+
|
329
|
+
} // namespace boost
|
330
|
+
|
331
|
+
#endif // BOOST_RANGE_CONCEPTS_HPP
|