passenger 1.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 +52 -0
- data/INSTALL +2 -0
- data/LICENSE +352 -0
- data/README +19 -0
- data/Rakefile +435 -0
- data/benchmark/DummyRequestHandler.cpp +101 -0
- data/benchmark/accept_vs_socketpair_vs_named_pipes.rb +126 -0
- data/benchmark/dispatcher.rb +46 -0
- data/benchmark/overhead_of_password_checking.rb +81 -0
- data/benchmark/socket_connections_vs_persistent_pipe.rb +99 -0
- data/benchmark/unix_sockets_vs_pipes.rb +83 -0
- data/bin/passenger-install-apache2-module +274 -0
- data/bin/passenger-spawn-server +38 -0
- data/doc/ApplicationPool algorithm.txt +290 -0
- data/doc/Architectural overview.html +740 -0
- data/doc/Architectural overview.txt +339 -0
- data/doc/Doxyfile +241 -0
- data/doc/Security of user switching support.html +605 -0
- data/doc/Security of user switching support.txt +197 -0
- data/doc/Users guide.html +1356 -0
- data/doc/Users guide.txt +707 -0
- data/doc/cxxapi/ApplicationPoolClientServer_8h-source.html +673 -0
- data/doc/cxxapi/ApplicationPool_8h-source.html +189 -0
- data/doc/cxxapi/Application_8h-source.html +402 -0
- data/doc/cxxapi/Configuration_8h-source.html +145 -0
- data/doc/cxxapi/DummySpawnManager_8h-source.html +121 -0
- data/doc/cxxapi/Exceptions_8h-source.html +188 -0
- data/doc/cxxapi/Hooks_8h-source.html +58 -0
- data/doc/cxxapi/Logging_8h-source.html +103 -0
- data/doc/cxxapi/MessageChannel_8h-source.html +483 -0
- data/doc/cxxapi/SpawnManager_8h-source.html +552 -0
- data/doc/cxxapi/StandardApplicationPool_8h-source.html +554 -0
- data/doc/cxxapi/Utils_8h-source.html +176 -0
- data/doc/cxxapi/annotated.html +43 -0
- data/doc/cxxapi/classPassenger_1_1Application-members.html +33 -0
- data/doc/cxxapi/classPassenger_1_1Application.html +224 -0
- data/doc/cxxapi/classPassenger_1_1ApplicationPool-members.html +34 -0
- data/doc/cxxapi/classPassenger_1_1ApplicationPool.html +272 -0
- data/doc/cxxapi/classPassenger_1_1ApplicationPoolServer-members.html +31 -0
- data/doc/cxxapi/classPassenger_1_1ApplicationPoolServer.html +216 -0
- data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.map +1 -0
- data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.md5 +1 -0
- data/doc/cxxapi/classPassenger_1_1ApplicationPool__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1Application_1_1Session-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1Application_1_1Session.html +294 -0
- data/doc/cxxapi/classPassenger_1_1DummySpawnManager-members.html +28 -0
- data/doc/cxxapi/classPassenger_1_1DummySpawnManager.html +46 -0
- data/doc/cxxapi/classPassenger_1_1FileNotFoundException-members.html +28 -0
- data/doc/cxxapi/classPassenger_1_1FileNotFoundException.html +46 -0
- data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.map +1 -0
- data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.md5 +1 -0
- data/doc/cxxapi/classPassenger_1_1FileNotFoundException__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1IOException-members.html +28 -0
- data/doc/cxxapi/classPassenger_1_1IOException.html +49 -0
- data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.map +1 -0
- data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.md5 +1 -0
- data/doc/cxxapi/classPassenger_1_1IOException__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +42 -0
- data/doc/cxxapi/classPassenger_1_1MessageChannel.html +568 -0
- data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +30 -0
- data/doc/cxxapi/classPassenger_1_1SpawnException.html +74 -0
- data/doc/cxxapi/classPassenger_1_1SpawnManager-members.html +32 -0
- data/doc/cxxapi/classPassenger_1_1SpawnManager.html +234 -0
- data/doc/cxxapi/classPassenger_1_1StandardApplicationPool-members.html +35 -0
- data/doc/cxxapi/classPassenger_1_1StandardApplicationPool.html +320 -0
- data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.map +1 -0
- data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.md5 +1 -0
- data/doc/cxxapi/classPassenger_1_1StandardApplicationPool__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1SystemException-members.html +32 -0
- data/doc/cxxapi/classPassenger_1_1SystemException.html +144 -0
- data/doc/cxxapi/definitions_8h-source.html +25 -0
- data/doc/cxxapi/doxygen.css +358 -0
- data/doc/cxxapi/doxygen.png +0 -0
- data/doc/cxxapi/files.html +35 -0
- data/doc/cxxapi/ftv2blank.png +0 -0
- data/doc/cxxapi/ftv2doc.png +0 -0
- data/doc/cxxapi/ftv2folderclosed.png +0 -0
- data/doc/cxxapi/ftv2folderopen.png +0 -0
- data/doc/cxxapi/ftv2lastnode.png +0 -0
- data/doc/cxxapi/ftv2link.png +0 -0
- data/doc/cxxapi/ftv2mlastnode.png +0 -0
- data/doc/cxxapi/ftv2mnode.png +0 -0
- data/doc/cxxapi/ftv2node.png +0 -0
- data/doc/cxxapi/ftv2plastnode.png +0 -0
- data/doc/cxxapi/ftv2pnode.png +0 -0
- data/doc/cxxapi/ftv2vertline.png +0 -0
- data/doc/cxxapi/functions.html +160 -0
- data/doc/cxxapi/functions_func.html +158 -0
- data/doc/cxxapi/functions_type.html +40 -0
- data/doc/cxxapi/graph_legend.dot +22 -0
- data/doc/cxxapi/graph_legend.html +82 -0
- data/doc/cxxapi/graph_legend.png +0 -0
- data/doc/cxxapi/group__Configuration.html +231 -0
- data/doc/cxxapi/group__Configuration.png +0 -0
- data/doc/cxxapi/group__Core.html +39 -0
- data/doc/cxxapi/group__Core.png +0 -0
- data/doc/cxxapi/group__Exceptions.html +32 -0
- data/doc/cxxapi/group__Hooks.html +41 -0
- data/doc/cxxapi/group__Hooks.png +0 -0
- data/doc/cxxapi/group__Support.html +258 -0
- data/doc/cxxapi/hierarchy.html +51 -0
- data/doc/cxxapi/index.html +11 -0
- data/doc/cxxapi/inherit__graph__0.map +1 -0
- data/doc/cxxapi/inherit__graph__0.md5 +1 -0
- data/doc/cxxapi/inherit__graph__0.png +0 -0
- data/doc/cxxapi/inherit__graph__1.map +1 -0
- data/doc/cxxapi/inherit__graph__1.md5 +1 -0
- data/doc/cxxapi/inherit__graph__1.png +0 -0
- data/doc/cxxapi/inherit__graph__2.map +1 -0
- data/doc/cxxapi/inherit__graph__2.md5 +1 -0
- data/doc/cxxapi/inherit__graph__2.png +0 -0
- data/doc/cxxapi/inherit__graph__3.map +1 -0
- data/doc/cxxapi/inherit__graph__3.md5 +1 -0
- data/doc/cxxapi/inherit__graph__3.png +0 -0
- data/doc/cxxapi/inherit__graph__4.map +2 -0
- data/doc/cxxapi/inherit__graph__4.md5 +1 -0
- data/doc/cxxapi/inherit__graph__4.png +0 -0
- data/doc/cxxapi/inherit__graph__5.map +1 -0
- data/doc/cxxapi/inherit__graph__5.md5 +1 -0
- data/doc/cxxapi/inherit__graph__5.png +0 -0
- data/doc/cxxapi/inherit__graph__6.map +1 -0
- data/doc/cxxapi/inherit__graph__6.md5 +1 -0
- data/doc/cxxapi/inherit__graph__6.png +0 -0
- data/doc/cxxapi/inherit__graph__7.map +5 -0
- data/doc/cxxapi/inherit__graph__7.md5 +1 -0
- data/doc/cxxapi/inherit__graph__7.png +0 -0
- data/doc/cxxapi/inherit__graph__8.map +1 -0
- data/doc/cxxapi/inherit__graph__8.md5 +1 -0
- data/doc/cxxapi/inherit__graph__8.png +0 -0
- data/doc/cxxapi/inherit__graph__9.map +1 -0
- data/doc/cxxapi/inherit__graph__9.md5 +1 -0
- data/doc/cxxapi/inherit__graph__9.png +0 -0
- data/doc/cxxapi/inherits.html +61 -0
- data/doc/cxxapi/main.html +22 -0
- data/doc/cxxapi/modules.html +29 -0
- data/doc/cxxapi/structPassenger_1_1AnythingToString-members.html +28 -0
- data/doc/cxxapi/structPassenger_1_1AnythingToString.html +44 -0
- data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4-members.html +28 -0
- data/doc/cxxapi/structPassenger_1_1AnythingToString_3_01vector_3_01string_01_4_01_4.html +44 -0
- data/doc/cxxapi/tab_b.gif +0 -0
- data/doc/cxxapi/tab_l.gif +0 -0
- data/doc/cxxapi/tab_r.gif +0 -0
- data/doc/cxxapi/tabs.css +102 -0
- data/doc/cxxapi/tree.html +138 -0
- data/doc/definitions.h +5 -0
- data/doc/images/by_sa.png +0 -0
- data/doc/images/icons/README +5 -0
- data/doc/images/icons/callouts/1.png +0 -0
- data/doc/images/icons/callouts/10.png +0 -0
- data/doc/images/icons/callouts/11.png +0 -0
- data/doc/images/icons/callouts/12.png +0 -0
- data/doc/images/icons/callouts/13.png +0 -0
- data/doc/images/icons/callouts/14.png +0 -0
- data/doc/images/icons/callouts/15.png +0 -0
- data/doc/images/icons/callouts/2.png +0 -0
- data/doc/images/icons/callouts/3.png +0 -0
- data/doc/images/icons/callouts/4.png +0 -0
- data/doc/images/icons/callouts/5.png +0 -0
- data/doc/images/icons/callouts/6.png +0 -0
- data/doc/images/icons/callouts/7.png +0 -0
- data/doc/images/icons/callouts/8.png +0 -0
- data/doc/images/icons/callouts/9.png +0 -0
- data/doc/images/icons/caution.png +0 -0
- data/doc/images/icons/example.png +0 -0
- data/doc/images/icons/home.png +0 -0
- data/doc/images/icons/important.png +0 -0
- data/doc/images/icons/next.png +0 -0
- data/doc/images/icons/note.png +0 -0
- data/doc/images/icons/prev.png +0 -0
- data/doc/images/icons/tip.png +0 -0
- data/doc/images/icons/up.png +0 -0
- data/doc/images/icons/warning.png +0 -0
- data/doc/images/passenger_architecture.png +0 -0
- data/doc/images/passenger_architecture.svg +401 -0
- data/doc/images/phusion_banner.png +0 -0
- data/doc/images/spawn_server_architecture.png +0 -0
- data/doc/images/spawn_server_architecture.svg +655 -0
- data/doc/images/typical_isolated_web_application.png +0 -0
- data/doc/images/typical_isolated_web_application.svg +213 -0
- data/doc/rdoc/classes/ConditionVariable.html +158 -0
- data/doc/rdoc/classes/Exception.html +120 -0
- data/doc/rdoc/classes/GC.html +113 -0
- data/doc/rdoc/classes/IO.html +150 -0
- data/doc/rdoc/classes/Passenger.html +117 -0
- data/doc/rdoc/classes/Passenger/AbstractServer.html +609 -0
- data/doc/rdoc/classes/Passenger/AbstractServer/ServerAlreadyStarted.html +97 -0
- data/doc/rdoc/classes/Passenger/AbstractServer/ServerError.html +96 -0
- data/doc/rdoc/classes/Passenger/AbstractServer/ServerNotStarted.html +97 -0
- data/doc/rdoc/classes/Passenger/AbstractServer/UnknownMessage.html +96 -0
- data/doc/rdoc/classes/Passenger/AppInitError.html +106 -0
- data/doc/rdoc/classes/Passenger/Application.html +297 -0
- data/doc/rdoc/classes/Passenger/ApplicationSpawner.html +334 -0
- data/doc/rdoc/classes/Passenger/ApplicationSpawner/Error.html +98 -0
- data/doc/rdoc/classes/Passenger/CGIFixed.html +200 -0
- data/doc/rdoc/classes/Passenger/ConsoleTextTemplate.html +172 -0
- data/doc/rdoc/classes/Passenger/FrameworkInitError.html +144 -0
- data/doc/rdoc/classes/Passenger/FrameworkSpawner.html +429 -0
- data/doc/rdoc/classes/Passenger/FrameworkSpawner/Error.html +98 -0
- data/doc/rdoc/classes/Passenger/HTMLTemplate.html +175 -0
- data/doc/rdoc/classes/Passenger/InitializationError.html +141 -0
- data/doc/rdoc/classes/Passenger/MessageChannel.html +488 -0
- data/doc/rdoc/classes/Passenger/NativeSupport.html +320 -0
- data/doc/rdoc/classes/Passenger/RequestHandler.html +415 -0
- data/doc/rdoc/classes/Passenger/SpawnManager.html +373 -0
- data/doc/rdoc/classes/Passenger/UnknownError.html +125 -0
- data/doc/rdoc/classes/Passenger/Utils.html +352 -0
- data/doc/rdoc/classes/Passenger/VersionNotFound.html +140 -0
- data/doc/rdoc/classes/PlatformInfo.html +279 -0
- data/doc/rdoc/classes/RakeExtensions.html +197 -0
- data/doc/rdoc/created.rid +1 -0
- data/doc/rdoc/files/DEVELOPERS_TXT.html +178 -0
- data/doc/rdoc/files/README.html +120 -0
- data/doc/rdoc/files/ext/passenger/native_support_c.html +92 -0
- data/doc/rdoc/files/lib/passenger/abstract_server_rb.html +121 -0
- data/doc/rdoc/files/lib/passenger/application_rb.html +119 -0
- data/doc/rdoc/files/lib/passenger/application_spawner_rb.html +128 -0
- data/doc/rdoc/files/lib/passenger/cgi_fixed_rb.html +127 -0
- data/doc/rdoc/files/lib/passenger/console_text_template_rb.html +118 -0
- data/doc/rdoc/files/lib/passenger/dependencies_rb.html +124 -0
- data/doc/rdoc/files/lib/passenger/framework_spawner_rb.html +135 -0
- data/doc/rdoc/files/lib/passenger/html_template_rb.html +118 -0
- data/doc/rdoc/files/lib/passenger/message_channel_rb.html +118 -0
- data/doc/rdoc/files/lib/passenger/platform_info_rb.html +118 -0
- data/doc/rdoc/files/lib/passenger/request_handler_rb.html +122 -0
- data/doc/rdoc/files/lib/passenger/simple_benchmarking_rb.html +114 -0
- data/doc/rdoc/files/lib/passenger/spawn_manager_rb.html +124 -0
- data/doc/rdoc/files/lib/passenger/utils_rb.html +123 -0
- data/doc/rdoc/files/lib/rake/extensions_rb.html +122 -0
- data/doc/rdoc/fr_class_index.html +76 -0
- data/doc/rdoc/fr_file_index.html +64 -0
- data/doc/rdoc/fr_method_index.html +125 -0
- data/doc/rdoc/index.html +26 -0
- data/doc/rdoc/rdoc-style.css +187 -0
- data/doc/template/horo.rb +613 -0
- data/ext/apache2/Application.h +382 -0
- data/ext/apache2/ApplicationPool.h +169 -0
- data/ext/apache2/ApplicationPoolClientServer.h +653 -0
- data/ext/apache2/Configuration.cpp +294 -0
- data/ext/apache2/Configuration.h +125 -0
- data/ext/apache2/DummySpawnManager.h +101 -0
- data/ext/apache2/Exceptions.h +168 -0
- data/ext/apache2/Hooks.cpp +630 -0
- data/ext/apache2/Hooks.h +38 -0
- data/ext/apache2/LICENSE-CNRI.TXT +64 -0
- data/ext/apache2/Logging.cpp +48 -0
- data/ext/apache2/Logging.h +83 -0
- data/ext/apache2/MessageChannel.h +463 -0
- data/ext/apache2/SpawnManager.h +532 -0
- data/ext/apache2/StandardApplicationPool.h +534 -0
- data/ext/apache2/Utils.cpp +108 -0
- data/ext/apache2/Utils.h +156 -0
- data/ext/apache2/mod_passenger.c +31 -0
- data/ext/boost/LICENSE.TXT +23 -0
- data/ext/boost/VERSION.TXT +1 -0
- data/ext/boost/assert.hpp +37 -0
- data/ext/boost/bind.hpp +1651 -0
- data/ext/boost/bind/apply.hpp +74 -0
- data/ext/boost/bind/arg.hpp +36 -0
- data/ext/boost/bind/bind_cc.hpp +117 -0
- data/ext/boost/bind/bind_mf_cc.hpp +227 -0
- data/ext/boost/bind/bind_template.hpp +226 -0
- data/ext/boost/bind/make_adaptable.hpp +187 -0
- data/ext/boost/bind/mem_fn_cc.hpp +103 -0
- data/ext/boost/bind/mem_fn_template.hpp +1020 -0
- data/ext/boost/bind/mem_fn_vw.hpp +130 -0
- data/ext/boost/bind/placeholders.hpp +68 -0
- data/ext/boost/bind/protect.hpp +144 -0
- data/ext/boost/bind/storage.hpp +475 -0
- data/ext/boost/checked_delete.hpp +69 -0
- data/ext/boost/config.hpp +70 -0
- data/ext/boost/config/abi/borland_prefix.hpp +27 -0
- data/ext/boost/config/abi/borland_suffix.hpp +12 -0
- data/ext/boost/config/abi/msvc_prefix.hpp +8 -0
- data/ext/boost/config/abi/msvc_suffix.hpp +8 -0
- data/ext/boost/config/abi_prefix.hpp +20 -0
- data/ext/boost/config/abi_suffix.hpp +23 -0
- data/ext/boost/config/auto_link.hpp +363 -0
- data/ext/boost/config/compiler/borland.hpp +190 -0
- data/ext/boost/config/compiler/comeau.hpp +59 -0
- data/ext/boost/config/compiler/common_edg.hpp +62 -0
- data/ext/boost/config/compiler/compaq_cxx.hpp +19 -0
- data/ext/boost/config/compiler/digitalmars.hpp +49 -0
- data/ext/boost/config/compiler/gcc.hpp +105 -0
- data/ext/boost/config/compiler/gcc_xml.hpp +30 -0
- data/ext/boost/config/compiler/greenhills.hpp +28 -0
- data/ext/boost/config/compiler/hp_acc.hpp +72 -0
- data/ext/boost/config/compiler/intel.hpp +158 -0
- data/ext/boost/config/compiler/kai.hpp +35 -0
- data/ext/boost/config/compiler/metrowerks.hpp +104 -0
- data/ext/boost/config/compiler/mpw.hpp +51 -0
- data/ext/boost/config/compiler/sgi_mipspro.hpp +24 -0
- data/ext/boost/config/compiler/sunpro_cc.hpp +92 -0
- data/ext/boost/config/compiler/vacpp.hpp +57 -0
- data/ext/boost/config/compiler/visualc.hpp +178 -0
- data/ext/boost/config/no_tr1/complex.hpp +28 -0
- data/ext/boost/config/no_tr1/functional.hpp +28 -0
- data/ext/boost/config/no_tr1/memory.hpp +28 -0
- data/ext/boost/config/no_tr1/utility.hpp +28 -0
- data/ext/boost/config/platform/aix.hpp +33 -0
- data/ext/boost/config/platform/amigaos.hpp +15 -0
- data/ext/boost/config/platform/beos.hpp +26 -0
- data/ext/boost/config/platform/bsd.hpp +73 -0
- data/ext/boost/config/platform/cygwin.hpp +48 -0
- data/ext/boost/config/platform/hpux.hpp +85 -0
- data/ext/boost/config/platform/irix.hpp +31 -0
- data/ext/boost/config/platform/linux.hpp +98 -0
- data/ext/boost/config/platform/macos.hpp +78 -0
- data/ext/boost/config/platform/qnxnto.hpp +31 -0
- data/ext/boost/config/platform/solaris.hpp +21 -0
- data/ext/boost/config/platform/win32.hpp +58 -0
- data/ext/boost/config/posix_features.hpp +95 -0
- data/ext/boost/config/requires_threads.hpp +92 -0
- data/ext/boost/config/select_compiler_config.hpp +87 -0
- data/ext/boost/config/select_platform_config.hpp +90 -0
- data/ext/boost/config/select_stdlib_config.hpp +68 -0
- data/ext/boost/config/stdlib/dinkumware.hpp +106 -0
- data/ext/boost/config/stdlib/libcomo.hpp +46 -0
- data/ext/boost/config/stdlib/libstdcpp3.hpp +73 -0
- data/ext/boost/config/stdlib/modena.hpp +30 -0
- data/ext/boost/config/stdlib/msl.hpp +59 -0
- data/ext/boost/config/stdlib/roguewave.hpp +127 -0
- data/ext/boost/config/stdlib/sgi.hpp +111 -0
- data/ext/boost/config/stdlib/stlport.hpp +201 -0
- data/ext/boost/config/stdlib/vacpp.hpp +18 -0
- data/ext/boost/config/suffix.hpp +569 -0
- data/ext/boost/config/user.hpp +124 -0
- data/ext/boost/cstdint.hpp +446 -0
- data/ext/boost/detail/bad_weak_ptr.hpp +59 -0
- data/ext/boost/detail/reference_content.hpp +141 -0
- data/ext/boost/detail/shared_count.hpp +376 -0
- data/ext/boost/detail/sp_counted_base.hpp +69 -0
- data/ext/boost/detail/sp_counted_base_cw_ppc.hpp +170 -0
- data/ext/boost/detail/sp_counted_base_cw_x86.hpp +158 -0
- data/ext/boost/detail/sp_counted_base_gcc_ia64.hpp +157 -0
- data/ext/boost/detail/sp_counted_base_gcc_ppc.hpp +181 -0
- data/ext/boost/detail/sp_counted_base_gcc_x86.hpp +173 -0
- data/ext/boost/detail/sp_counted_base_nt.hpp +107 -0
- data/ext/boost/detail/sp_counted_base_pt.hpp +135 -0
- data/ext/boost/detail/sp_counted_base_w32.hpp +130 -0
- data/ext/boost/detail/sp_counted_impl.hpp +232 -0
- data/ext/boost/detail/workaround.hpp +74 -0
- data/ext/boost/format.hpp +59 -0
- data/ext/boost/format/alt_sstream.hpp +176 -0
- data/ext/boost/format/alt_sstream_impl.hpp +296 -0
- data/ext/boost/format/detail/compat_workarounds.hpp +86 -0
- data/ext/boost/format/detail/config_macros.hpp +97 -0
- data/ext/boost/format/detail/msvc_disambiguater.hpp +56 -0
- data/ext/boost/format/detail/unset_macros.hpp +34 -0
- data/ext/boost/format/detail/workarounds_gcc-2_95.hpp +162 -0
- data/ext/boost/format/detail/workarounds_stlport.hpp +42 -0
- data/ext/boost/format/exceptions.hpp +103 -0
- data/ext/boost/format/feed_args.hpp +267 -0
- data/ext/boost/format/format_class.hpp +143 -0
- data/ext/boost/format/format_fwd.hpp +49 -0
- data/ext/boost/format/format_implementation.hpp +277 -0
- data/ext/boost/format/free_funcs.hpp +70 -0
- data/ext/boost/format/group.hpp +676 -0
- data/ext/boost/format/internals.hpp +199 -0
- data/ext/boost/format/internals_fwd.hpp +60 -0
- data/ext/boost/format/parsing.hpp +491 -0
- data/ext/boost/function.hpp +64 -0
- data/ext/boost/function/detail/function_iterate.hpp +16 -0
- data/ext/boost/function/detail/gen_maybe_include.pl +37 -0
- data/ext/boost/function/detail/maybe_include.hpp +267 -0
- data/ext/boost/function/detail/prologue.hpp +24 -0
- data/ext/boost/function/function0.hpp +12 -0
- data/ext/boost/function/function1.hpp +12 -0
- data/ext/boost/function/function10.hpp +12 -0
- data/ext/boost/function/function2.hpp +12 -0
- data/ext/boost/function/function3.hpp +12 -0
- data/ext/boost/function/function4.hpp +12 -0
- data/ext/boost/function/function5.hpp +12 -0
- data/ext/boost/function/function6.hpp +12 -0
- data/ext/boost/function/function7.hpp +12 -0
- data/ext/boost/function/function8.hpp +12 -0
- data/ext/boost/function/function9.hpp +12 -0
- data/ext/boost/function/function_base.hpp +736 -0
- data/ext/boost/function/function_template.hpp +837 -0
- data/ext/boost/function/gen_function_N.pl +26 -0
- data/ext/boost/function_equal.hpp +28 -0
- data/ext/boost/get_pointer.hpp +29 -0
- data/ext/boost/limits.hpp +144 -0
- data/ext/boost/mem_fn.hpp +389 -0
- data/ext/boost/mpl/O1_size.hpp +40 -0
- data/ext/boost/mpl/O1_size_fwd.hpp +24 -0
- data/ext/boost/mpl/accumulate.hpp +39 -0
- data/ext/boost/mpl/advance.hpp +76 -0
- data/ext/boost/mpl/advance_fwd.hpp +28 -0
- data/ext/boost/mpl/alias.hpp +21 -0
- data/ext/boost/mpl/always.hpp +39 -0
- data/ext/boost/mpl/and.hpp +56 -0
- data/ext/boost/mpl/apply.hpp +225 -0
- data/ext/boost/mpl/apply_fwd.hpp +107 -0
- data/ext/boost/mpl/apply_wrap.hpp +200 -0
- data/ext/boost/mpl/arg.hpp +131 -0
- data/ext/boost/mpl/arg_fwd.hpp +28 -0
- data/ext/boost/mpl/arithmetic.hpp +25 -0
- data/ext/boost/mpl/as_sequence.hpp +38 -0
- data/ext/boost/mpl/assert.hpp +361 -0
- data/ext/boost/mpl/at.hpp +52 -0
- data/ext/boost/mpl/at_fwd.hpp +24 -0
- data/ext/boost/mpl/aux_/O1_size_impl.hpp +87 -0
- data/ext/boost/mpl/aux_/adl_barrier.hpp +48 -0
- data/ext/boost/mpl/aux_/advance_backward.hpp +124 -0
- data/ext/boost/mpl/aux_/advance_forward.hpp +123 -0
- data/ext/boost/mpl/aux_/apply_1st.hpp +35 -0
- data/ext/boost/mpl/aux_/arg_typedef.hpp +31 -0
- data/ext/boost/mpl/aux_/arithmetic_op.hpp +92 -0
- data/ext/boost/mpl/aux_/arity.hpp +39 -0
- data/ext/boost/mpl/aux_/arity_spec.hpp +67 -0
- data/ext/boost/mpl/aux_/at_impl.hpp +45 -0
- data/ext/boost/mpl/aux_/back_impl.hpp +43 -0
- data/ext/boost/mpl/aux_/basic_bind.hpp +21 -0
- data/ext/boost/mpl/aux_/begin_end_impl.hpp +100 -0
- data/ext/boost/mpl/aux_/clear_impl.hpp +35 -0
- data/ext/boost/mpl/aux_/common_name_wknd.hpp +34 -0
- data/ext/boost/mpl/aux_/comparison_op.hpp +83 -0
- data/ext/boost/mpl/aux_/config/adl.hpp +40 -0
- data/ext/boost/mpl/aux_/config/arrays.hpp +30 -0
- data/ext/boost/mpl/aux_/config/bind.hpp +33 -0
- data/ext/boost/mpl/aux_/config/compiler.hpp +64 -0
- data/ext/boost/mpl/aux_/config/ctps.hpp +30 -0
- data/ext/boost/mpl/aux_/config/dependent_nttp.hpp +35 -0
- data/ext/boost/mpl/aux_/config/dmc_ambiguous_ctps.hpp +27 -0
- data/ext/boost/mpl/aux_/config/dtp.hpp +46 -0
- data/ext/boost/mpl/aux_/config/eti.hpp +47 -0
- data/ext/boost/mpl/aux_/config/forwarding.hpp +27 -0
- data/ext/boost/mpl/aux_/config/gcc.hpp +23 -0
- data/ext/boost/mpl/aux_/config/has_apply.hpp +32 -0
- data/ext/boost/mpl/aux_/config/has_xxx.hpp +33 -0
- data/ext/boost/mpl/aux_/config/integral.hpp +38 -0
- data/ext/boost/mpl/aux_/config/intel.hpp +21 -0
- data/ext/boost/mpl/aux_/config/lambda.hpp +32 -0
- data/ext/boost/mpl/aux_/config/msvc.hpp +21 -0
- data/ext/boost/mpl/aux_/config/msvc_typename.hpp +26 -0
- data/ext/boost/mpl/aux_/config/nttp.hpp +41 -0
- data/ext/boost/mpl/aux_/config/operators.hpp +33 -0
- data/ext/boost/mpl/aux_/config/overload_resolution.hpp +29 -0
- data/ext/boost/mpl/aux_/config/preprocessor.hpp +39 -0
- data/ext/boost/mpl/aux_/config/static_constant.hpp +25 -0
- data/ext/boost/mpl/aux_/config/ttp.hpp +39 -0
- data/ext/boost/mpl/aux_/config/typeof.hpp +38 -0
- data/ext/boost/mpl/aux_/config/use_preprocessed.hpp +19 -0
- data/ext/boost/mpl/aux_/config/workaround.hpp +19 -0
- data/ext/boost/mpl/aux_/contains_impl.hpp +61 -0
- data/ext/boost/mpl/aux_/count_args.hpp +105 -0
- data/ext/boost/mpl/aux_/count_impl.hpp +44 -0
- data/ext/boost/mpl/aux_/empty_impl.hpp +43 -0
- data/ext/boost/mpl/aux_/erase_impl.hpp +69 -0
- data/ext/boost/mpl/aux_/erase_key_impl.hpp +32 -0
- data/ext/boost/mpl/aux_/filter_iter.hpp +140 -0
- data/ext/boost/mpl/aux_/find_if_pred.hpp +31 -0
- data/ext/boost/mpl/aux_/fold_impl.hpp +43 -0
- data/ext/boost/mpl/aux_/fold_impl_body.hpp +365 -0
- data/ext/boost/mpl/aux_/fold_op.hpp +37 -0
- data/ext/boost/mpl/aux_/fold_pred.hpp +37 -0
- data/ext/boost/mpl/aux_/front_impl.hpp +41 -0
- data/ext/boost/mpl/aux_/full_lambda.hpp +350 -0
- data/ext/boost/mpl/aux_/has_apply.hpp +32 -0
- data/ext/boost/mpl/aux_/has_begin.hpp +23 -0
- data/ext/boost/mpl/aux_/has_key_impl.hpp +34 -0
- data/ext/boost/mpl/aux_/has_rebind.hpp +99 -0
- data/ext/boost/mpl/aux_/has_size.hpp +23 -0
- data/ext/boost/mpl/aux_/has_tag.hpp +23 -0
- data/ext/boost/mpl/aux_/has_type.hpp +23 -0
- data/ext/boost/mpl/aux_/include_preprocessed.hpp +42 -0
- data/ext/boost/mpl/aux_/insert_impl.hpp +68 -0
- data/ext/boost/mpl/aux_/insert_range_impl.hpp +77 -0
- data/ext/boost/mpl/aux_/inserter_algorithm.hpp +159 -0
- data/ext/boost/mpl/aux_/integral_wrapper.hpp +93 -0
- data/ext/boost/mpl/aux_/is_msvc_eti_arg.hpp +64 -0
- data/ext/boost/mpl/aux_/iter_apply.hpp +47 -0
- data/ext/boost/mpl/aux_/iter_fold_if_impl.hpp +210 -0
- data/ext/boost/mpl/aux_/iter_fold_impl.hpp +42 -0
- data/ext/boost/mpl/aux_/iter_push_front.hpp +36 -0
- data/ext/boost/mpl/aux_/joint_iter.hpp +120 -0
- data/ext/boost/mpl/aux_/lambda_arity_param.hpp +25 -0
- data/ext/boost/mpl/aux_/lambda_no_ctps.hpp +193 -0
- data/ext/boost/mpl/aux_/lambda_spec.hpp +49 -0
- data/ext/boost/mpl/aux_/lambda_support.hpp +169 -0
- data/ext/boost/mpl/aux_/largest_int.hpp +63 -0
- data/ext/boost/mpl/aux_/logical_op.hpp +165 -0
- data/ext/boost/mpl/aux_/msvc_dtw.hpp +68 -0
- data/ext/boost/mpl/aux_/msvc_eti_base.hpp +77 -0
- data/ext/boost/mpl/aux_/msvc_is_class.hpp +58 -0
- data/ext/boost/mpl/aux_/msvc_never_true.hpp +34 -0
- data/ext/boost/mpl/aux_/msvc_type.hpp +62 -0
- data/ext/boost/mpl/aux_/na.hpp +95 -0
- data/ext/boost/mpl/aux_/na_assert.hpp +34 -0
- data/ext/boost/mpl/aux_/na_fwd.hpp +31 -0
- data/ext/boost/mpl/aux_/na_spec.hpp +175 -0
- data/ext/boost/mpl/aux_/nested_type_wknd.hpp +48 -0
- data/ext/boost/mpl/aux_/nttp_decl.hpp +35 -0
- data/ext/boost/mpl/aux_/numeric_cast_utils.hpp +77 -0
- data/ext/boost/mpl/aux_/numeric_op.hpp +311 -0
- data/ext/boost/mpl/aux_/order_impl.hpp +76 -0
- data/ext/boost/mpl/aux_/overload_names.hpp +48 -0
- data/ext/boost/mpl/aux_/partition_op.hpp +58 -0
- data/ext/boost/mpl/aux_/pop_back_impl.hpp +34 -0
- data/ext/boost/mpl/aux_/pop_front_impl.hpp +44 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/advance_backward.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/advance_forward.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/and.hpp +69 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/apply.hpp +169 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/apply_fwd.hpp +52 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/apply_wrap.hpp +456 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/arg.hpp +117 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/basic_bind.hpp +300 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/bind.hpp +397 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/bind_fwd.hpp +46 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/bitand.hpp +147 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/bitor.hpp +147 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/bitxor.hpp +147 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/deque.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/divides.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/equal_to.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/fold_impl.hpp +180 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/full_lambda.hpp +558 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/greater.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/greater_equal.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/inherit.hpp +139 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/iter_fold_if_impl.hpp +133 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/iter_fold_impl.hpp +180 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/lambda_no_ctps.hpp +229 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/less.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/less_equal.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/list.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/list_c.hpp +328 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/map.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/minus.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/modulus.hpp +101 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/not_equal_to.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/or.hpp +69 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/placeholders.hpp +105 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/plus.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/quote.hpp +11 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/reverse_fold_impl.hpp +295 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/reverse_iter_fold_impl.hpp +295 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/set.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/set_c.hpp +328 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/shift_left.hpp +99 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/shift_right.hpp +99 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/template_arity.hpp +40 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/times.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/unpack_args.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/vector.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc/vector_c.hpp +309 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/advance_backward.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/advance_forward.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/and.hpp +69 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/apply.hpp +169 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/apply_fwd.hpp +52 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/apply_wrap.hpp +456 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/arg.hpp +123 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/basic_bind.hpp +306 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/bind.hpp +403 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/bind_fwd.hpp +46 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/bitand.hpp +147 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/bitor.hpp +147 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/bitxor.hpp +147 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/deque.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/divides.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/equal_to.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/fold_impl.hpp +180 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/full_lambda.hpp +558 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/greater.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/greater_equal.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/inherit.hpp +141 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/iter_fold_if_impl.hpp +133 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/iter_fold_impl.hpp +180 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/lambda_no_ctps.hpp +229 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/less.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/less_equal.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/list.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/list_c.hpp +328 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/map.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/minus.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/modulus.hpp +101 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/not_equal_to.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/or.hpp +69 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/placeholders.hpp +105 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/plus.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/quote.hpp +11 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/reverse_fold_impl.hpp +295 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/reverse_iter_fold_impl.hpp +295 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/set.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/set_c.hpp +328 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/shift_left.hpp +99 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/shift_right.hpp +99 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/template_arity.hpp +40 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/times.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/unpack_args.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/vector.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/bcc551/vector_c.hpp +309 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/advance_backward.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/advance_forward.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/and.hpp +69 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/apply.hpp +169 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/apply_fwd.hpp +52 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/apply_wrap.hpp +84 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/arg.hpp +123 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/basic_bind.hpp +406 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/bind.hpp +515 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/bind_fwd.hpp +53 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/bitand.hpp +147 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/bitor.hpp +147 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/bitxor.hpp +147 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/deque.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/divides.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/equal_to.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp +180 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/full_lambda.hpp +536 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/greater.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/greater_equal.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/inherit.hpp +141 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/iter_fold_if_impl.hpp +133 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/iter_fold_impl.hpp +180 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/lambda_no_ctps.hpp +229 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/less.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/less_equal.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/list.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/list_c.hpp +328 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/map.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/minus.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/modulus.hpp +101 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/not_equal_to.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/or.hpp +69 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/placeholders.hpp +105 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/plus.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/quote.hpp +123 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/reverse_fold_impl.hpp +231 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/reverse_iter_fold_impl.hpp +231 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/set.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/set_c.hpp +328 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/shift_left.hpp +99 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/shift_right.hpp +99 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/template_arity.hpp +11 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/times.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/unpack_args.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/vector.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/dmc/vector_c.hpp +309 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/advance_backward.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/advance_forward.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/and.hpp +69 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/apply.hpp +169 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/apply_fwd.hpp +52 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/apply_wrap.hpp +84 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/arg.hpp +123 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/basic_bind.hpp +440 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/bind.hpp +561 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/bind_fwd.hpp +52 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/bitand.hpp +147 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/bitor.hpp +147 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/bitxor.hpp +147 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/deque.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/divides.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/equal_to.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/fold_impl.hpp +180 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/full_lambda.hpp +558 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/greater.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/greater_equal.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/inherit.hpp +141 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/iter_fold_if_impl.hpp +133 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/iter_fold_impl.hpp +180 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/lambda_no_ctps.hpp +229 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/less.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/less_equal.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/list.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/list_c.hpp +328 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/map.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/minus.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/modulus.hpp +101 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/not_equal_to.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/or.hpp +69 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/placeholders.hpp +105 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/plus.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/quote.hpp +123 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/reverse_fold_impl.hpp +231 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/reverse_iter_fold_impl.hpp +231 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/set.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/set_c.hpp +328 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/shift_left.hpp +99 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/shift_right.hpp +99 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/template_arity.hpp +101 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/times.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/unpack_args.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/vector.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/gcc/vector_c.hpp +309 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/advance_backward.hpp +132 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/advance_forward.hpp +132 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/and.hpp +73 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/apply.hpp +166 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/apply_fwd.hpp +46 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/apply_wrap.hpp +247 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/arg.hpp +123 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/basic_bind.hpp +328 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/bind.hpp +432 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/bind_fwd.hpp +46 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/bitand.hpp +149 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/bitor.hpp +149 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/bitxor.hpp +149 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/deque.hpp +556 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/divides.hpp +148 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/equal_to.hpp +102 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/fold_impl.hpp +293 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/full_lambda.hpp +554 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/greater.hpp +102 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/greater_equal.hpp +102 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/inherit.hpp +166 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/iter_fold_if_impl.hpp +133 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/iter_fold_impl.hpp +293 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/lambda_no_ctps.hpp +229 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/less.hpp +102 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/less_equal.hpp +102 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/list.hpp +556 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/list_c.hpp +534 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/map.hpp +556 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/minus.hpp +148 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/modulus.hpp +115 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/not_equal_to.hpp +102 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/or.hpp +73 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/placeholders.hpp +105 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/plus.hpp +148 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/quote.hpp +11 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/reverse_fold_impl.hpp +343 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/reverse_iter_fold_impl.hpp +343 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/set.hpp +556 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/set_c.hpp +534 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/shift_left.hpp +114 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/shift_right.hpp +114 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/template_arity.hpp +46 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/times.hpp +148 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/unpack_args.hpp +109 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/vector.hpp +556 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc60/vector_c.hpp +534 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/advance_backward.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/advance_forward.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/and.hpp +71 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/apply.hpp +160 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/apply_fwd.hpp +46 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/apply_wrap.hpp +138 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/arg.hpp +123 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/basic_bind.hpp +328 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/bind.hpp +432 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/bind_fwd.hpp +46 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/bitand.hpp +151 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/bitor.hpp +151 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/bitxor.hpp +151 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/deque.hpp +556 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/divides.hpp +150 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/equal_to.hpp +102 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp +245 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/full_lambda.hpp +554 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/greater.hpp +102 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/greater_equal.hpp +102 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/inherit.hpp +166 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/iter_fold_if_impl.hpp +133 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/iter_fold_impl.hpp +245 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/lambda_no_ctps.hpp +229 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/less.hpp +102 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/less_equal.hpp +102 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/list.hpp +556 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/list_c.hpp +534 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/map.hpp +556 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/minus.hpp +150 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/modulus.hpp +115 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/not_equal_to.hpp +102 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/or.hpp +71 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/placeholders.hpp +105 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/plus.hpp +150 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/quote.hpp +116 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/reverse_fold_impl.hpp +295 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/reverse_iter_fold_impl.hpp +295 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/set.hpp +556 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/set_c.hpp +534 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/shift_left.hpp +114 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/shift_right.hpp +114 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/template_arity.hpp +46 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/times.hpp +150 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/unpack_args.hpp +109 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/vector.hpp +556 -0
- data/ext/boost/mpl/aux_/preprocessed/msvc70/vector_c.hpp +534 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/advance_backward.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/advance_forward.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/and.hpp +69 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/apply.hpp +169 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/apply_fwd.hpp +52 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/apply_wrap.hpp +456 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/arg.hpp +123 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/basic_bind.hpp +440 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/bind.hpp +561 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/bind_fwd.hpp +52 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/bitand.hpp +147 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/bitor.hpp +147 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/bitxor.hpp +147 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/deque.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/divides.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/equal_to.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/fold_impl.hpp +180 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/full_lambda.hpp +554 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/greater.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/greater_equal.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/inherit.hpp +141 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/iter_fold_if_impl.hpp +133 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/iter_fold_impl.hpp +180 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/lambda_no_ctps.hpp +229 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/less.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/less_equal.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/list.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/list_c.hpp +328 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/map.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/minus.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/modulus.hpp +101 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/not_equal_to.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/or.hpp +69 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/placeholders.hpp +105 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/plus.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/quote.hpp +123 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/reverse_fold_impl.hpp +231 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/reverse_iter_fold_impl.hpp +231 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/set.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/set_c.hpp +328 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/shift_left.hpp +99 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/shift_right.hpp +99 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/template_arity.hpp +11 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/times.hpp +146 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/unpack_args.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/vector.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/mwcw/vector_c.hpp +309 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/advance_backward.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/advance_forward.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/and.hpp +73 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/apply.hpp +268 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/apply_fwd.hpp +50 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/apply_wrap.hpp +78 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/arg.hpp +123 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/basic_bind.hpp +486 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/bind.hpp +590 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/bind_fwd.hpp +52 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/bitand.hpp +134 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/bitor.hpp +134 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/bitxor.hpp +134 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/deque.hpp +556 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/divides.hpp +133 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/equal_to.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp +245 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/full_lambda.hpp +554 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/greater.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/greater_equal.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/inherit.hpp +166 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_if_impl.hpp +133 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/iter_fold_impl.hpp +245 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/lambda_no_ctps.hpp +229 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/less.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/less_equal.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/list.hpp +556 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/list_c.hpp +534 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/map.hpp +556 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/minus.hpp +133 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/modulus.hpp +101 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/not_equal_to.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/or.hpp +73 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/placeholders.hpp +105 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/plus.hpp +133 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/quote.hpp +116 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/reverse_fold_impl.hpp +295 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/reverse_iter_fold_impl.hpp +295 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/set.hpp +556 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/set_c.hpp +534 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/shift_left.hpp +99 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/shift_right.hpp +99 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/template_arity.hpp +40 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/times.hpp +133 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/unpack_args.hpp +109 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/vector.hpp +556 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ctps/vector_c.hpp +534 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/advance_backward.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/advance_forward.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/and.hpp +69 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/apply.hpp +169 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/apply_fwd.hpp +52 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/apply_wrap.hpp +84 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/arg.hpp +123 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/basic_bind.hpp +369 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/bind.hpp +466 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/bind_fwd.hpp +52 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/bitand.hpp +157 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/bitor.hpp +157 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/bitxor.hpp +157 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/deque.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/divides.hpp +156 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/equal_to.hpp +98 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/fold_impl.hpp +180 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/full_lambda.hpp +554 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/greater.hpp +98 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/greater_equal.hpp +98 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/inherit.hpp +141 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_if_impl.hpp +133 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/iter_fold_impl.hpp +180 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/lambda_no_ctps.hpp +229 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/less.hpp +98 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/less_equal.hpp +98 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/list.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/list_c.hpp +328 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/map.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/minus.hpp +156 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/modulus.hpp +111 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/not_equal_to.hpp +98 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/or.hpp +69 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/placeholders.hpp +105 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/plus.hpp +156 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/quote.hpp +11 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/reverse_fold_impl.hpp +231 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/reverse_iter_fold_impl.hpp +231 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/set.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/set_c.hpp +328 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/shift_left.hpp +110 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/shift_right.hpp +110 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/template_arity.hpp +40 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/times.hpp +156 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/unpack_args.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/vector.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/no_ttp/vector_c.hpp +309 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/advance_backward.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/advance_forward.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/and.hpp +64 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/apply.hpp +139 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/apply_fwd.hpp +52 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/apply_wrap.hpp +84 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/arg.hpp +123 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/basic_bind.hpp +440 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/bind.hpp +561 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/bind_fwd.hpp +52 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/bitand.hpp +142 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/bitor.hpp +142 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/bitxor.hpp +142 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/deque.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/divides.hpp +141 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/equal_to.hpp +92 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/fold_impl.hpp +180 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp +554 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/greater.hpp +92 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/greater_equal.hpp +92 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/inherit.hpp +125 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/iter_fold_if_impl.hpp +133 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/iter_fold_impl.hpp +180 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/lambda_no_ctps.hpp +228 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/less.hpp +92 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/less_equal.hpp +92 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/list.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/list_c.hpp +328 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/map.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/minus.hpp +141 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/modulus.hpp +99 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/not_equal_to.hpp +92 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/or.hpp +64 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/placeholders.hpp +105 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/plus.hpp +141 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/quote.hpp +123 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/reverse_fold_impl.hpp +231 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/reverse_iter_fold_impl.hpp +231 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/set.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/set_c.hpp +328 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/shift_left.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/shift_right.hpp +97 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/template_arity.hpp +11 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/times.hpp +141 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/unpack_args.hpp +94 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/vector.hpp +323 -0
- data/ext/boost/mpl/aux_/preprocessed/plain/vector_c.hpp +309 -0
- data/ext/boost/mpl/aux_/preprocessor/add.hpp +65 -0
- data/ext/boost/mpl/aux_/preprocessor/def_params_tail.hpp +105 -0
- data/ext/boost/mpl/aux_/preprocessor/default_params.hpp +67 -0
- data/ext/boost/mpl/aux_/preprocessor/enum.hpp +62 -0
- data/ext/boost/mpl/aux_/preprocessor/ext_params.hpp +78 -0
- data/ext/boost/mpl/aux_/preprocessor/filter_params.hpp +28 -0
- data/ext/boost/mpl/aux_/preprocessor/is_seq.hpp +54 -0
- data/ext/boost/mpl/aux_/preprocessor/params.hpp +65 -0
- data/ext/boost/mpl/aux_/preprocessor/partial_spec_params.hpp +32 -0
- data/ext/boost/mpl/aux_/preprocessor/range.hpp +23 -0
- data/ext/boost/mpl/aux_/preprocessor/repeat.hpp +51 -0
- data/ext/boost/mpl/aux_/preprocessor/sub.hpp +65 -0
- data/ext/boost/mpl/aux_/preprocessor/token_equal.hpp +56 -0
- data/ext/boost/mpl/aux_/preprocessor/tuple.hpp +29 -0
- data/ext/boost/mpl/aux_/ptr_to_ref.hpp +46 -0
- data/ext/boost/mpl/aux_/push_back_impl.hpp +55 -0
- data/ext/boost/mpl/aux_/push_front_impl.hpp +56 -0
- data/ext/boost/mpl/aux_/range_c/O1_size.hpp +31 -0
- data/ext/boost/mpl/aux_/range_c/back.hpp +34 -0
- data/ext/boost/mpl/aux_/range_c/empty.hpp +37 -0
- data/ext/boost/mpl/aux_/range_c/front.hpp +33 -0
- data/ext/boost/mpl/aux_/range_c/iterator.hpp +106 -0
- data/ext/boost/mpl/aux_/range_c/size.hpp +37 -0
- data/ext/boost/mpl/aux_/range_c/tag.hpp +24 -0
- data/ext/boost/mpl/aux_/reverse_fold_impl.hpp +44 -0
- data/ext/boost/mpl/aux_/reverse_fold_impl_body.hpp +412 -0
- data/ext/boost/mpl/aux_/reverse_iter_fold_impl.hpp +43 -0
- data/ext/boost/mpl/aux_/sequence_wrapper.hpp +292 -0
- data/ext/boost/mpl/aux_/shift_op.hpp +87 -0
- data/ext/boost/mpl/aux_/single_element_iter.hpp +118 -0
- data/ext/boost/mpl/aux_/size_impl.hpp +52 -0
- data/ext/boost/mpl/aux_/sort_impl.hpp +121 -0
- data/ext/boost/mpl/aux_/static_cast.hpp +27 -0
- data/ext/boost/mpl/aux_/template_arity.hpp +189 -0
- data/ext/boost/mpl/aux_/template_arity_fwd.hpp +23 -0
- data/ext/boost/mpl/aux_/test.hpp +32 -0
- data/ext/boost/mpl/aux_/test/assert.hpp +29 -0
- data/ext/boost/mpl/aux_/test/data.hpp +25 -0
- data/ext/boost/mpl/aux_/test/test_case.hpp +21 -0
- data/ext/boost/mpl/aux_/traits_lambda_spec.hpp +56 -0
- data/ext/boost/mpl/aux_/transform_iter.hpp +123 -0
- data/ext/boost/mpl/aux_/type_wrapper.hpp +47 -0
- data/ext/boost/mpl/aux_/unwrap.hpp +47 -0
- data/ext/boost/mpl/aux_/value_wknd.hpp +89 -0
- data/ext/boost/mpl/aux_/yes_no.hpp +58 -0
- data/ext/boost/mpl/back.hpp +39 -0
- data/ext/boost/mpl/back_fwd.hpp +24 -0
- data/ext/boost/mpl/back_inserter.hpp +34 -0
- data/ext/boost/mpl/base.hpp +35 -0
- data/ext/boost/mpl/begin.hpp +19 -0
- data/ext/boost/mpl/begin_end.hpp +57 -0
- data/ext/boost/mpl/begin_end_fwd.hpp +27 -0
- data/ext/boost/mpl/bind.hpp +547 -0
- data/ext/boost/mpl/bind_fwd.hpp +99 -0
- data/ext/boost/mpl/bitand.hpp +23 -0
- data/ext/boost/mpl/bitor.hpp +23 -0
- data/ext/boost/mpl/bitwise.hpp +24 -0
- data/ext/boost/mpl/bitxor.hpp +23 -0
- data/ext/boost/mpl/bool.hpp +39 -0
- data/ext/boost/mpl/bool_fwd.hpp +33 -0
- data/ext/boost/mpl/clear.hpp +39 -0
- data/ext/boost/mpl/clear_fwd.hpp +24 -0
- data/ext/boost/mpl/comparison.hpp +24 -0
- data/ext/boost/mpl/contains.hpp +41 -0
- data/ext/boost/mpl/contains_fwd.hpp +25 -0
- data/ext/boost/mpl/copy.hpp +58 -0
- data/ext/boost/mpl/copy_if.hpp +96 -0
- data/ext/boost/mpl/count.hpp +40 -0
- data/ext/boost/mpl/count_fwd.hpp +24 -0
- data/ext/boost/mpl/count_if.hpp +79 -0
- data/ext/boost/mpl/deque.hpp +58 -0
- data/ext/boost/mpl/deref.hpp +41 -0
- data/ext/boost/mpl/distance.hpp +78 -0
- data/ext/boost/mpl/distance_fwd.hpp +28 -0
- data/ext/boost/mpl/divides.hpp +21 -0
- data/ext/boost/mpl/empty.hpp +39 -0
- data/ext/boost/mpl/empty_base.hpp +59 -0
- data/ext/boost/mpl/empty_fwd.hpp +24 -0
- data/ext/boost/mpl/empty_sequence.hpp +42 -0
- data/ext/boost/mpl/end.hpp +19 -0
- data/ext/boost/mpl/equal.hpp +112 -0
- data/ext/boost/mpl/equal_to.hpp +21 -0
- data/ext/boost/mpl/erase.hpp +42 -0
- data/ext/boost/mpl/erase_fwd.hpp +24 -0
- data/ext/boost/mpl/erase_key.hpp +41 -0
- data/ext/boost/mpl/erase_key_fwd.hpp +24 -0
- data/ext/boost/mpl/eval_if.hpp +71 -0
- data/ext/boost/mpl/filter_view.hpp +46 -0
- data/ext/boost/mpl/find.hpp +38 -0
- data/ext/boost/mpl/find_if.hpp +50 -0
- data/ext/boost/mpl/fold.hpp +48 -0
- data/ext/boost/mpl/for_each.hpp +112 -0
- data/ext/boost/mpl/front.hpp +39 -0
- data/ext/boost/mpl/front_fwd.hpp +24 -0
- data/ext/boost/mpl/front_inserter.hpp +33 -0
- data/ext/boost/mpl/greater.hpp +21 -0
- data/ext/boost/mpl/greater_equal.hpp +21 -0
- data/ext/boost/mpl/has_key.hpp +41 -0
- data/ext/boost/mpl/has_key_fwd.hpp +25 -0
- data/ext/boost/mpl/has_xxx.hpp +233 -0
- data/ext/boost/mpl/identity.hpp +45 -0
- data/ext/boost/mpl/if.hpp +135 -0
- data/ext/boost/mpl/index_if.hpp +60 -0
- data/ext/boost/mpl/index_of.hpp +39 -0
- data/ext/boost/mpl/inherit.hpp +229 -0
- data/ext/boost/mpl/inherit_linearly.hpp +39 -0
- data/ext/boost/mpl/insert.hpp +41 -0
- data/ext/boost/mpl/insert_fwd.hpp +24 -0
- data/ext/boost/mpl/insert_range.hpp +41 -0
- data/ext/boost/mpl/insert_range_fwd.hpp +24 -0
- data/ext/boost/mpl/inserter.hpp +32 -0
- data/ext/boost/mpl/int.hpp +22 -0
- data/ext/boost/mpl/int_fwd.hpp +27 -0
- data/ext/boost/mpl/integral_c.hpp +51 -0
- data/ext/boost/mpl/integral_c_fwd.hpp +32 -0
- data/ext/boost/mpl/integral_c_tag.hpp +26 -0
- data/ext/boost/mpl/is_placeholder.hpp +67 -0
- data/ext/boost/mpl/is_sequence.hpp +112 -0
- data/ext/boost/mpl/iter_fold.hpp +49 -0
- data/ext/boost/mpl/iter_fold_if.hpp +117 -0
- data/ext/boost/mpl/iterator_category.hpp +35 -0
- data/ext/boost/mpl/iterator_range.hpp +42 -0
- data/ext/boost/mpl/iterator_tags.hpp +27 -0
- data/ext/boost/mpl/joint_view.hpp +65 -0
- data/ext/boost/mpl/key_type.hpp +42 -0
- data/ext/boost/mpl/key_type_fwd.hpp +25 -0
- data/ext/boost/mpl/lambda.hpp +29 -0
- data/ext/boost/mpl/lambda_fwd.hpp +57 -0
- data/ext/boost/mpl/less.hpp +21 -0
- data/ext/boost/mpl/less_equal.hpp +21 -0
- data/ext/boost/mpl/limits/arity.hpp +21 -0
- data/ext/boost/mpl/limits/list.hpp +21 -0
- data/ext/boost/mpl/limits/map.hpp +21 -0
- data/ext/boost/mpl/limits/set.hpp +21 -0
- data/ext/boost/mpl/limits/unrolling.hpp +21 -0
- data/ext/boost/mpl/limits/vector.hpp +21 -0
- data/ext/boost/mpl/list.hpp +57 -0
- data/ext/boost/mpl/list/aux_/O1_size.hpp +33 -0
- data/ext/boost/mpl/list/aux_/begin_end.hpp +44 -0
- data/ext/boost/mpl/list/aux_/clear.hpp +34 -0
- data/ext/boost/mpl/list/aux_/empty.hpp +34 -0
- data/ext/boost/mpl/list/aux_/front.hpp +33 -0
- data/ext/boost/mpl/list/aux_/include_preprocessed.hpp +35 -0
- data/ext/boost/mpl/list/aux_/item.hpp +55 -0
- data/ext/boost/mpl/list/aux_/iterator.hpp +76 -0
- data/ext/boost/mpl/list/aux_/numbered.hpp +68 -0
- data/ext/boost/mpl/list/aux_/numbered_c.hpp +71 -0
- data/ext/boost/mpl/list/aux_/pop_front.hpp +34 -0
- data/ext/boost/mpl/list/aux_/preprocessed/plain/list10.hpp +149 -0
- data/ext/boost/mpl/list/aux_/preprocessed/plain/list10_c.hpp +164 -0
- data/ext/boost/mpl/list/aux_/preprocessed/plain/list20.hpp +169 -0
- data/ext/boost/mpl/list/aux_/preprocessed/plain/list20_c.hpp +173 -0
- data/ext/boost/mpl/list/aux_/preprocessed/plain/list30.hpp +189 -0
- data/ext/boost/mpl/list/aux_/preprocessed/plain/list30_c.hpp +183 -0
- data/ext/boost/mpl/list/aux_/preprocessed/plain/list40.hpp +209 -0
- data/ext/boost/mpl/list/aux_/preprocessed/plain/list40_c.hpp +193 -0
- data/ext/boost/mpl/list/aux_/preprocessed/plain/list50.hpp +229 -0
- data/ext/boost/mpl/list/aux_/preprocessed/plain/list50_c.hpp +203 -0
- data/ext/boost/mpl/list/aux_/push_back.hpp +36 -0
- data/ext/boost/mpl/list/aux_/push_front.hpp +39 -0
- data/ext/boost/mpl/list/aux_/size.hpp +33 -0
- data/ext/boost/mpl/list/aux_/tag.hpp +24 -0
- data/ext/boost/mpl/list/list0.hpp +42 -0
- data/ext/boost/mpl/list/list0_c.hpp +31 -0
- data/ext/boost/mpl/list/list10.hpp +43 -0
- data/ext/boost/mpl/list/list10_c.hpp +43 -0
- data/ext/boost/mpl/list/list20.hpp +43 -0
- data/ext/boost/mpl/list/list20_c.hpp +43 -0
- data/ext/boost/mpl/list/list30.hpp +43 -0
- data/ext/boost/mpl/list/list30_c.hpp +43 -0
- data/ext/boost/mpl/list/list40.hpp +43 -0
- data/ext/boost/mpl/list/list40_c.hpp +43 -0
- data/ext/boost/mpl/list/list50.hpp +43 -0
- data/ext/boost/mpl/list/list50_c.hpp +43 -0
- data/ext/boost/mpl/list_c.hpp +60 -0
- data/ext/boost/mpl/logical.hpp +21 -0
- data/ext/boost/mpl/long.hpp +22 -0
- data/ext/boost/mpl/long_fwd.hpp +27 -0
- data/ext/boost/mpl/lower_bound.hpp +143 -0
- data/ext/boost/mpl/map.hpp +57 -0
- data/ext/boost/mpl/map/aux_/at_impl.hpp +144 -0
- data/ext/boost/mpl/map/aux_/begin_end_impl.hpp +50 -0
- data/ext/boost/mpl/map/aux_/clear_impl.hpp +35 -0
- data/ext/boost/mpl/map/aux_/contains_impl.hpp +43 -0
- data/ext/boost/mpl/map/aux_/empty_impl.hpp +34 -0
- data/ext/boost/mpl/map/aux_/erase_impl.hpp +41 -0
- data/ext/boost/mpl/map/aux_/erase_key_impl.hpp +53 -0
- data/ext/boost/mpl/map/aux_/has_key_impl.hpp +44 -0
- data/ext/boost/mpl/map/aux_/include_preprocessed.hpp +53 -0
- data/ext/boost/mpl/map/aux_/insert_impl.hpp +72 -0
- data/ext/boost/mpl/map/aux_/item.hpp +138 -0
- data/ext/boost/mpl/map/aux_/iterator.hpp +169 -0
- data/ext/boost/mpl/map/aux_/key_type_impl.hpp +36 -0
- data/ext/boost/mpl/map/aux_/map0.hpp +74 -0
- data/ext/boost/mpl/map/aux_/numbered.hpp +110 -0
- data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map10.hpp +350 -0
- data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map20.hpp +370 -0
- data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map30.hpp +390 -0
- data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map40.hpp +410 -0
- data/ext/boost/mpl/map/aux_/preprocessed/no_ctps/map50.hpp +430 -0
- data/ext/boost/mpl/map/aux_/preprocessed/plain/map10.hpp +290 -0
- data/ext/boost/mpl/map/aux_/preprocessed/plain/map20.hpp +310 -0
- data/ext/boost/mpl/map/aux_/preprocessed/plain/map30.hpp +330 -0
- data/ext/boost/mpl/map/aux_/preprocessed/plain/map40.hpp +350 -0
- data/ext/boost/mpl/map/aux_/preprocessed/plain/map50.hpp +370 -0
- data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map10.hpp +150 -0
- data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map20.hpp +170 -0
- data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map30.hpp +190 -0
- data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map40.hpp +210 -0
- data/ext/boost/mpl/map/aux_/preprocessed/typeof_based/map50.hpp +230 -0
- data/ext/boost/mpl/map/aux_/size_impl.hpp +33 -0
- data/ext/boost/mpl/map/aux_/tag.hpp +24 -0
- data/ext/boost/mpl/map/aux_/value_type_impl.hpp +36 -0
- data/ext/boost/mpl/map/map0.hpp +36 -0
- data/ext/boost/mpl/map/map10.hpp +44 -0
- data/ext/boost/mpl/map/map20.hpp +44 -0
- data/ext/boost/mpl/map/map30.hpp +44 -0
- data/ext/boost/mpl/map/map40.hpp +44 -0
- data/ext/boost/mpl/map/map50.hpp +44 -0
- data/ext/boost/mpl/math/fixed_c.hpp +36 -0
- data/ext/boost/mpl/math/is_even.hpp +54 -0
- data/ext/boost/mpl/math/rational_c.hpp +37 -0
- data/ext/boost/mpl/max.hpp +19 -0
- data/ext/boost/mpl/max_element.hpp +72 -0
- data/ext/boost/mpl/min.hpp +19 -0
- data/ext/boost/mpl/min_element.hpp +40 -0
- data/ext/boost/mpl/min_max.hpp +46 -0
- data/ext/boost/mpl/minus.hpp +21 -0
- data/ext/boost/mpl/modulus.hpp +22 -0
- data/ext/boost/mpl/multiplies.hpp +53 -0
- data/ext/boost/mpl/multiset/aux_/count_impl.hpp +82 -0
- data/ext/boost/mpl/multiset/aux_/insert_impl.hpp +34 -0
- data/ext/boost/mpl/multiset/aux_/item.hpp +114 -0
- data/ext/boost/mpl/multiset/aux_/multiset0.hpp +34 -0
- data/ext/boost/mpl/multiset/aux_/tag.hpp +23 -0
- data/ext/boost/mpl/multiset/multiset0.hpp +36 -0
- data/ext/boost/mpl/negate.hpp +81 -0
- data/ext/boost/mpl/next.hpp +19 -0
- data/ext/boost/mpl/next_prior.hpp +49 -0
- data/ext/boost/mpl/not.hpp +51 -0
- data/ext/boost/mpl/not_equal_to.hpp +21 -0
- data/ext/boost/mpl/numeric_cast.hpp +41 -0
- data/ext/boost/mpl/or.hpp +57 -0
- data/ext/boost/mpl/order.hpp +41 -0
- data/ext/boost/mpl/order_fwd.hpp +25 -0
- data/ext/boost/mpl/pair.hpp +70 -0
- data/ext/boost/mpl/pair_view.hpp +169 -0
- data/ext/boost/mpl/partition.hpp +53 -0
- data/ext/boost/mpl/placeholders.hpp +100 -0
- data/ext/boost/mpl/plus.hpp +21 -0
- data/ext/boost/mpl/pop_back.hpp +39 -0
- data/ext/boost/mpl/pop_back_fwd.hpp +24 -0
- data/ext/boost/mpl/pop_front.hpp +39 -0
- data/ext/boost/mpl/pop_front_fwd.hpp +24 -0
- data/ext/boost/mpl/print.hpp +74 -0
- data/ext/boost/mpl/prior.hpp +19 -0
- data/ext/boost/mpl/protect.hpp +55 -0
- data/ext/boost/mpl/push_back.hpp +53 -0
- data/ext/boost/mpl/push_back_fwd.hpp +24 -0
- data/ext/boost/mpl/push_front.hpp +52 -0
- data/ext/boost/mpl/push_front_fwd.hpp +24 -0
- data/ext/boost/mpl/quote.hpp +140 -0
- data/ext/boost/mpl/range_c.hpp +48 -0
- data/ext/boost/mpl/remove.hpp +52 -0
- data/ext/boost/mpl/remove_if.hpp +83 -0
- data/ext/boost/mpl/replace.hpp +55 -0
- data/ext/boost/mpl/replace_if.hpp +88 -0
- data/ext/boost/mpl/reverse.hpp +38 -0
- data/ext/boost/mpl/reverse_fold.hpp +50 -0
- data/ext/boost/mpl/reverse_iter_fold.hpp +56 -0
- data/ext/boost/mpl/same_as.hpp +55 -0
- data/ext/boost/mpl/sequence_tag.hpp +124 -0
- data/ext/boost/mpl/sequence_tag_fwd.hpp +26 -0
- data/ext/boost/mpl/set.hpp +57 -0
- data/ext/boost/mpl/set/aux_/at_impl.hpp +40 -0
- data/ext/boost/mpl/set/aux_/begin_end_impl.hpp +43 -0
- data/ext/boost/mpl/set/aux_/clear_impl.hpp +35 -0
- data/ext/boost/mpl/set/aux_/empty_impl.hpp +34 -0
- data/ext/boost/mpl/set/aux_/erase_impl.hpp +41 -0
- data/ext/boost/mpl/set/aux_/erase_key_impl.hpp +53 -0
- data/ext/boost/mpl/set/aux_/has_key_impl.hpp +60 -0
- data/ext/boost/mpl/set/aux_/include_preprocessed.hpp +42 -0
- data/ext/boost/mpl/set/aux_/insert_impl.hpp +65 -0
- data/ext/boost/mpl/set/aux_/item.hpp +82 -0
- data/ext/boost/mpl/set/aux_/iterator.hpp +97 -0
- data/ext/boost/mpl/set/aux_/key_type_impl.hpp +34 -0
- data/ext/boost/mpl/set/aux_/numbered.hpp +48 -0
- data/ext/boost/mpl/set/aux_/numbered_c.hpp +48 -0
- data/ext/boost/mpl/set/aux_/preprocessed/plain/set10.hpp +140 -0
- data/ext/boost/mpl/set/aux_/preprocessed/plain/set10_c.hpp +145 -0
- data/ext/boost/mpl/set/aux_/preprocessed/plain/set20.hpp +168 -0
- data/ext/boost/mpl/set/aux_/preprocessed/plain/set20_c.hpp +154 -0
- data/ext/boost/mpl/set/aux_/preprocessed/plain/set30.hpp +195 -0
- data/ext/boost/mpl/set/aux_/preprocessed/plain/set30_c.hpp +164 -0
- data/ext/boost/mpl/set/aux_/preprocessed/plain/set40.hpp +221 -0
- data/ext/boost/mpl/set/aux_/preprocessed/plain/set40_c.hpp +174 -0
- data/ext/boost/mpl/set/aux_/preprocessed/plain/set50.hpp +250 -0
- data/ext/boost/mpl/set/aux_/preprocessed/plain/set50_c.hpp +184 -0
- data/ext/boost/mpl/set/aux_/set0.hpp +69 -0
- data/ext/boost/mpl/set/aux_/size_impl.hpp +33 -0
- data/ext/boost/mpl/set/aux_/tag.hpp +24 -0
- data/ext/boost/mpl/set/aux_/value_type_impl.hpp +34 -0
- data/ext/boost/mpl/set/set0.hpp +35 -0
- data/ext/boost/mpl/set/set0_c.hpp +32 -0
- data/ext/boost/mpl/set/set10.hpp +44 -0
- data/ext/boost/mpl/set/set10_c.hpp +45 -0
- data/ext/boost/mpl/set/set20.hpp +44 -0
- data/ext/boost/mpl/set/set20_c.hpp +45 -0
- data/ext/boost/mpl/set/set30.hpp +44 -0
- data/ext/boost/mpl/set/set30_c.hpp +45 -0
- data/ext/boost/mpl/set/set40.hpp +44 -0
- data/ext/boost/mpl/set/set40_c.hpp +45 -0
- data/ext/boost/mpl/set/set50.hpp +44 -0
- data/ext/boost/mpl/set/set50_c.hpp +45 -0
- data/ext/boost/mpl/set_c.hpp +60 -0
- data/ext/boost/mpl/shift_left.hpp +22 -0
- data/ext/boost/mpl/shift_right.hpp +22 -0
- data/ext/boost/mpl/single_view.hpp +38 -0
- data/ext/boost/mpl/size.hpp +42 -0
- data/ext/boost/mpl/size_fwd.hpp +24 -0
- data/ext/boost/mpl/size_t.hpp +25 -0
- data/ext/boost/mpl/size_t_fwd.hpp +28 -0
- data/ext/boost/mpl/sizeof.hpp +36 -0
- data/ext/boost/mpl/sort.hpp +27 -0
- data/ext/boost/mpl/stable_partition.hpp +75 -0
- data/ext/boost/mpl/switch.hpp +49 -0
- data/ext/boost/mpl/tag.hpp +52 -0
- data/ext/boost/mpl/times.hpp +21 -0
- data/ext/boost/mpl/transform.hpp +145 -0
- data/ext/boost/mpl/transform_view.hpp +46 -0
- data/ext/boost/mpl/unique.hpp +85 -0
- data/ext/boost/mpl/unpack_args.hpp +146 -0
- data/ext/boost/mpl/upper_bound.hpp +141 -0
- data/ext/boost/mpl/value_type.hpp +42 -0
- data/ext/boost/mpl/value_type_fwd.hpp +25 -0
- data/ext/boost/mpl/vector.hpp +57 -0
- data/ext/boost/mpl/vector/aux_/O1_size.hpp +56 -0
- data/ext/boost/mpl/vector/aux_/at.hpp +116 -0
- data/ext/boost/mpl/vector/aux_/back.hpp +59 -0
- data/ext/boost/mpl/vector/aux_/begin_end.hpp +49 -0
- data/ext/boost/mpl/vector/aux_/clear.hpp +55 -0
- data/ext/boost/mpl/vector/aux_/empty.hpp +68 -0
- data/ext/boost/mpl/vector/aux_/front.hpp +56 -0
- data/ext/boost/mpl/vector/aux_/include_preprocessed.hpp +55 -0
- data/ext/boost/mpl/vector/aux_/item.hpp +103 -0
- data/ext/boost/mpl/vector/aux_/iterator.hpp +130 -0
- data/ext/boost/mpl/vector/aux_/numbered.hpp +218 -0
- data/ext/boost/mpl/vector/aux_/numbered_c.hpp +77 -0
- data/ext/boost/mpl/vector/aux_/pop_back.hpp +40 -0
- data/ext/boost/mpl/vector/aux_/pop_front.hpp +40 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10.hpp +1528 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector10_c.hpp +149 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20.hpp +1804 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector20_c.hpp +195 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30.hpp +2124 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector30_c.hpp +238 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40.hpp +2444 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector40_c.hpp +281 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50.hpp +2764 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/no_ctps/vector50_c.hpp +325 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector10.hpp +829 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector10_c.hpp +149 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector20.hpp +1144 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector20_c.hpp +195 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector30.hpp +1464 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector30_c.hpp +238 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector40.hpp +1784 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector40_c.hpp +281 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector50.hpp +2104 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/plain/vector50_c.hpp +325 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10.hpp +139 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector10_c.hpp +154 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20.hpp +159 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector20_c.hpp +163 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30.hpp +179 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector30_c.hpp +173 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40.hpp +199 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector40_c.hpp +183 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50.hpp +219 -0
- data/ext/boost/mpl/vector/aux_/preprocessed/typeof_based/vector50_c.hpp +193 -0
- data/ext/boost/mpl/vector/aux_/push_back.hpp +40 -0
- data/ext/boost/mpl/vector/aux_/push_front.hpp +40 -0
- data/ext/boost/mpl/vector/aux_/size.hpp +49 -0
- data/ext/boost/mpl/vector/aux_/tag.hpp +32 -0
- data/ext/boost/mpl/vector/aux_/vector0.hpp +52 -0
- data/ext/boost/mpl/vector/vector0.hpp +34 -0
- data/ext/boost/mpl/vector/vector0_c.hpp +31 -0
- data/ext/boost/mpl/vector/vector10.hpp +45 -0
- data/ext/boost/mpl/vector/vector10_c.hpp +46 -0
- data/ext/boost/mpl/vector/vector20.hpp +45 -0
- data/ext/boost/mpl/vector/vector20_c.hpp +46 -0
- data/ext/boost/mpl/vector/vector30.hpp +45 -0
- data/ext/boost/mpl/vector/vector30_c.hpp +47 -0
- data/ext/boost/mpl/vector/vector40.hpp +45 -0
- data/ext/boost/mpl/vector/vector40_c.hpp +46 -0
- data/ext/boost/mpl/vector/vector50.hpp +45 -0
- data/ext/boost/mpl/vector/vector50_c.hpp +46 -0
- data/ext/boost/mpl/vector_c.hpp +60 -0
- data/ext/boost/mpl/void.hpp +76 -0
- data/ext/boost/mpl/void_fwd.hpp +26 -0
- data/ext/boost/mpl/zip_view.hpp +64 -0
- data/ext/boost/next_prior.hpp +51 -0
- data/ext/boost/noncopyable.hpp +36 -0
- data/ext/boost/none.hpp +43 -0
- data/ext/boost/optional.hpp +18 -0
- data/ext/boost/optional/optional.hpp +922 -0
- data/ext/boost/optional/optional_fwd.hpp +22 -0
- data/ext/boost/optional/optional_io.hpp +84 -0
- data/ext/boost/preprocessor/arithmetic.hpp +25 -0
- data/ext/boost/preprocessor/arithmetic/add.hpp +51 -0
- data/ext/boost/preprocessor/arithmetic/dec.hpp +288 -0
- data/ext/boost/preprocessor/arithmetic/detail/div_base.hpp +61 -0
- data/ext/boost/preprocessor/arithmetic/div.hpp +39 -0
- data/ext/boost/preprocessor/arithmetic/inc.hpp +288 -0
- data/ext/boost/preprocessor/arithmetic/mod.hpp +39 -0
- data/ext/boost/preprocessor/arithmetic/mul.hpp +53 -0
- data/ext/boost/preprocessor/arithmetic/sub.hpp +50 -0
- data/ext/boost/preprocessor/array.hpp +27 -0
- data/ext/boost/preprocessor/array/data.hpp +28 -0
- data/ext/boost/preprocessor/array/elem.hpp +29 -0
- data/ext/boost/preprocessor/array/insert.hpp +55 -0
- data/ext/boost/preprocessor/array/pop_back.hpp +37 -0
- data/ext/boost/preprocessor/array/pop_front.hpp +38 -0
- data/ext/boost/preprocessor/array/push_back.hpp +33 -0
- data/ext/boost/preprocessor/array/push_front.hpp +33 -0
- data/ext/boost/preprocessor/array/remove.hpp +54 -0
- data/ext/boost/preprocessor/array/replace.hpp +49 -0
- data/ext/boost/preprocessor/array/reverse.hpp +29 -0
- data/ext/boost/preprocessor/array/size.hpp +28 -0
- data/ext/boost/preprocessor/assert_msg.hpp +17 -0
- data/ext/boost/preprocessor/cat.hpp +35 -0
- data/ext/boost/preprocessor/comma.hpp +17 -0
- data/ext/boost/preprocessor/comma_if.hpp +17 -0
- data/ext/boost/preprocessor/comparison.hpp +24 -0
- data/ext/boost/preprocessor/comparison/equal.hpp +34 -0
- data/ext/boost/preprocessor/comparison/greater.hpp +38 -0
- data/ext/boost/preprocessor/comparison/greater_equal.hpp +38 -0
- data/ext/boost/preprocessor/comparison/less.hpp +46 -0
- data/ext/boost/preprocessor/comparison/less_equal.hpp +39 -0
- data/ext/boost/preprocessor/comparison/not_equal.hpp +814 -0
- data/ext/boost/preprocessor/config/config.hpp +70 -0
- data/ext/boost/preprocessor/config/limits.hpp +29 -0
- data/ext/boost/preprocessor/control.hpp +22 -0
- data/ext/boost/preprocessor/control/deduce_d.hpp +22 -0
- data/ext/boost/preprocessor/control/detail/dmc/while.hpp +536 -0
- data/ext/boost/preprocessor/control/detail/edg/while.hpp +534 -0
- data/ext/boost/preprocessor/control/detail/msvc/while.hpp +277 -0
- data/ext/boost/preprocessor/control/detail/while.hpp +536 -0
- data/ext/boost/preprocessor/control/expr_if.hpp +30 -0
- data/ext/boost/preprocessor/control/expr_iif.hpp +31 -0
- data/ext/boost/preprocessor/control/if.hpp +30 -0
- data/ext/boost/preprocessor/control/iif.hpp +34 -0
- data/ext/boost/preprocessor/control/while.hpp +312 -0
- data/ext/boost/preprocessor/debug.hpp +18 -0
- data/ext/boost/preprocessor/debug/assert.hpp +44 -0
- data/ext/boost/preprocessor/debug/error.hpp +33 -0
- data/ext/boost/preprocessor/debug/line.hpp +35 -0
- data/ext/boost/preprocessor/dec.hpp +17 -0
- data/ext/boost/preprocessor/detail/auto_rec.hpp +293 -0
- data/ext/boost/preprocessor/detail/check.hpp +48 -0
- data/ext/boost/preprocessor/detail/dmc/auto_rec.hpp +286 -0
- data/ext/boost/preprocessor/detail/is_binary.hpp +30 -0
- data/ext/boost/preprocessor/detail/is_nullary.hpp +30 -0
- data/ext/boost/preprocessor/detail/is_unary.hpp +30 -0
- data/ext/boost/preprocessor/detail/null.hpp +17 -0
- data/ext/boost/preprocessor/detail/split.hpp +35 -0
- data/ext/boost/preprocessor/empty.hpp +17 -0
- data/ext/boost/preprocessor/enum.hpp +17 -0
- data/ext/boost/preprocessor/enum_params.hpp +17 -0
- data/ext/boost/preprocessor/enum_params_with_a_default.hpp +17 -0
- data/ext/boost/preprocessor/enum_params_with_defaults.hpp +17 -0
- data/ext/boost/preprocessor/enum_shifted.hpp +17 -0
- data/ext/boost/preprocessor/enum_shifted_params.hpp +17 -0
- data/ext/boost/preprocessor/expand.hpp +17 -0
- data/ext/boost/preprocessor/expr_if.hpp +17 -0
- data/ext/boost/preprocessor/facilities.hpp +21 -0
- data/ext/boost/preprocessor/facilities/apply.hpp +34 -0
- data/ext/boost/preprocessor/facilities/empty.hpp +21 -0
- data/ext/boost/preprocessor/facilities/expand.hpp +28 -0
- data/ext/boost/preprocessor/facilities/identity.hpp +23 -0
- data/ext/boost/preprocessor/facilities/intercept.hpp +277 -0
- data/ext/boost/preprocessor/facilities/is_1.hpp +23 -0
- data/ext/boost/preprocessor/facilities/is_empty.hpp +43 -0
- data/ext/boost/preprocessor/facilities/is_empty_or_1.hpp +30 -0
- data/ext/boost/preprocessor/for.hpp +17 -0
- data/ext/boost/preprocessor/identity.hpp +17 -0
- data/ext/boost/preprocessor/if.hpp +17 -0
- data/ext/boost/preprocessor/inc.hpp +17 -0
- data/ext/boost/preprocessor/iterate.hpp +17 -0
- data/ext/boost/preprocessor/iteration.hpp +19 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/lower1.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/lower2.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/lower3.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/lower4.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/lower5.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/upper1.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/upper2.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/upper3.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/upper4.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/bounds/upper5.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/finish.hpp +99 -0
- data/ext/boost/preprocessor/iteration/detail/iter/forward1.hpp +1342 -0
- data/ext/boost/preprocessor/iteration/detail/iter/forward2.hpp +1338 -0
- data/ext/boost/preprocessor/iteration/detail/iter/forward3.hpp +1338 -0
- data/ext/boost/preprocessor/iteration/detail/iter/forward4.hpp +1338 -0
- data/ext/boost/preprocessor/iteration/detail/iter/forward5.hpp +1338 -0
- data/ext/boost/preprocessor/iteration/detail/iter/reverse1.hpp +1296 -0
- data/ext/boost/preprocessor/iteration/detail/iter/reverse2.hpp +1296 -0
- data/ext/boost/preprocessor/iteration/detail/iter/reverse3.hpp +1296 -0
- data/ext/boost/preprocessor/iteration/detail/iter/reverse4.hpp +1296 -0
- data/ext/boost/preprocessor/iteration/detail/iter/reverse5.hpp +1296 -0
- data/ext/boost/preprocessor/iteration/detail/local.hpp +812 -0
- data/ext/boost/preprocessor/iteration/detail/rlocal.hpp +782 -0
- data/ext/boost/preprocessor/iteration/detail/self.hpp +21 -0
- data/ext/boost/preprocessor/iteration/detail/start.hpp +99 -0
- data/ext/boost/preprocessor/iteration/iterate.hpp +82 -0
- data/ext/boost/preprocessor/iteration/local.hpp +26 -0
- data/ext/boost/preprocessor/iteration/self.hpp +19 -0
- data/ext/boost/preprocessor/library.hpp +34 -0
- data/ext/boost/preprocessor/limits.hpp +17 -0
- data/ext/boost/preprocessor/list.hpp +35 -0
- data/ext/boost/preprocessor/list/adt.hpp +73 -0
- data/ext/boost/preprocessor/list/append.hpp +40 -0
- data/ext/boost/preprocessor/list/at.hpp +39 -0
- data/ext/boost/preprocessor/list/cat.hpp +42 -0
- data/ext/boost/preprocessor/list/detail/dmc/fold_left.hpp +279 -0
- data/ext/boost/preprocessor/list/detail/edg/fold_left.hpp +536 -0
- data/ext/boost/preprocessor/list/detail/edg/fold_right.hpp +794 -0
- data/ext/boost/preprocessor/list/detail/fold_left.hpp +279 -0
- data/ext/boost/preprocessor/list/detail/fold_right.hpp +277 -0
- data/ext/boost/preprocessor/list/enum.hpp +41 -0
- data/ext/boost/preprocessor/list/filter.hpp +54 -0
- data/ext/boost/preprocessor/list/first_n.hpp +58 -0
- data/ext/boost/preprocessor/list/fold_left.hpp +303 -0
- data/ext/boost/preprocessor/list/fold_right.hpp +40 -0
- data/ext/boost/preprocessor/list/for_each.hpp +49 -0
- data/ext/boost/preprocessor/list/for_each_i.hpp +65 -0
- data/ext/boost/preprocessor/list/for_each_product.hpp +141 -0
- data/ext/boost/preprocessor/list/rest_n.hpp +55 -0
- data/ext/boost/preprocessor/list/reverse.hpp +40 -0
- data/ext/boost/preprocessor/list/size.hpp +58 -0
- data/ext/boost/preprocessor/list/to_tuple.hpp +38 -0
- data/ext/boost/preprocessor/list/transform.hpp +49 -0
- data/ext/boost/preprocessor/logical.hpp +29 -0
- data/ext/boost/preprocessor/logical/and.hpp +30 -0
- data/ext/boost/preprocessor/logical/bitand.hpp +38 -0
- data/ext/boost/preprocessor/logical/bitnor.hpp +38 -0
- data/ext/boost/preprocessor/logical/bitor.hpp +38 -0
- data/ext/boost/preprocessor/logical/bitxor.hpp +38 -0
- data/ext/boost/preprocessor/logical/bool.hpp +288 -0
- data/ext/boost/preprocessor/logical/compl.hpp +36 -0
- data/ext/boost/preprocessor/logical/nor.hpp +30 -0
- data/ext/boost/preprocessor/logical/not.hpp +30 -0
- data/ext/boost/preprocessor/logical/or.hpp +30 -0
- data/ext/boost/preprocessor/logical/xor.hpp +30 -0
- data/ext/boost/preprocessor/max.hpp +17 -0
- data/ext/boost/preprocessor/min.hpp +17 -0
- data/ext/boost/preprocessor/punctuation.hpp +20 -0
- data/ext/boost/preprocessor/punctuation/comma.hpp +21 -0
- data/ext/boost/preprocessor/punctuation/comma_if.hpp +31 -0
- data/ext/boost/preprocessor/punctuation/paren.hpp +23 -0
- data/ext/boost/preprocessor/punctuation/paren_if.hpp +38 -0
- data/ext/boost/preprocessor/repeat.hpp +17 -0
- data/ext/boost/preprocessor/repeat_2nd.hpp +17 -0
- data/ext/boost/preprocessor/repeat_3rd.hpp +17 -0
- data/ext/boost/preprocessor/repeat_from_to.hpp +17 -0
- data/ext/boost/preprocessor/repeat_from_to_2nd.hpp +17 -0
- data/ext/boost/preprocessor/repeat_from_to_3rd.hpp +17 -0
- data/ext/boost/preprocessor/repetition.hpp +32 -0
- data/ext/boost/preprocessor/repetition/deduce_r.hpp +22 -0
- data/ext/boost/preprocessor/repetition/deduce_z.hpp +22 -0
- data/ext/boost/preprocessor/repetition/detail/dmc/for.hpp +536 -0
- data/ext/boost/preprocessor/repetition/detail/edg/for.hpp +534 -0
- data/ext/boost/preprocessor/repetition/detail/for.hpp +536 -0
- data/ext/boost/preprocessor/repetition/detail/msvc/for.hpp +277 -0
- data/ext/boost/preprocessor/repetition/enum.hpp +66 -0
- data/ext/boost/preprocessor/repetition/enum_binary_params.hpp +54 -0
- data/ext/boost/preprocessor/repetition/enum_params.hpp +41 -0
- data/ext/boost/preprocessor/repetition/enum_params_with_a_default.hpp +25 -0
- data/ext/boost/preprocessor/repetition/enum_params_with_defaults.hpp +24 -0
- data/ext/boost/preprocessor/repetition/enum_shifted.hpp +68 -0
- data/ext/boost/preprocessor/repetition/enum_shifted_binary_params.hpp +51 -0
- data/ext/boost/preprocessor/repetition/enum_shifted_params.hpp +44 -0
- data/ext/boost/preprocessor/repetition/enum_trailing.hpp +63 -0
- data/ext/boost/preprocessor/repetition/enum_trailing_binary_params.hpp +53 -0
- data/ext/boost/preprocessor/repetition/enum_trailing_params.hpp +38 -0
- data/ext/boost/preprocessor/repetition/for.hpp +306 -0
- data/ext/boost/preprocessor/repetition/repeat.hpp +825 -0
- data/ext/boost/preprocessor/repetition/repeat_from_to.hpp +87 -0
- data/ext/boost/preprocessor/selection.hpp +18 -0
- data/ext/boost/preprocessor/selection/max.hpp +39 -0
- data/ext/boost/preprocessor/selection/min.hpp +39 -0
- data/ext/boost/preprocessor/seq.hpp +41 -0
- data/ext/boost/preprocessor/seq/cat.hpp +48 -0
- data/ext/boost/preprocessor/seq/detail/split.hpp +284 -0
- data/ext/boost/preprocessor/seq/elem.hpp +304 -0
- data/ext/boost/preprocessor/seq/enum.hpp +288 -0
- data/ext/boost/preprocessor/seq/filter.hpp +54 -0
- data/ext/boost/preprocessor/seq/first_n.hpp +30 -0
- data/ext/boost/preprocessor/seq/fold_left.hpp +1070 -0
- data/ext/boost/preprocessor/seq/fold_right.hpp +288 -0
- data/ext/boost/preprocessor/seq/for_each.hpp +60 -0
- data/ext/boost/preprocessor/seq/for_each_i.hpp +61 -0
- data/ext/boost/preprocessor/seq/for_each_product.hpp +126 -0
- data/ext/boost/preprocessor/seq/insert.hpp +28 -0
- data/ext/boost/preprocessor/seq/pop_back.hpp +29 -0
- data/ext/boost/preprocessor/seq/pop_front.hpp +27 -0
- data/ext/boost/preprocessor/seq/push_back.hpp +19 -0
- data/ext/boost/preprocessor/seq/push_front.hpp +19 -0
- data/ext/boost/preprocessor/seq/remove.hpp +29 -0
- data/ext/boost/preprocessor/seq/replace.hpp +29 -0
- data/ext/boost/preprocessor/seq/rest_n.hpp +30 -0
- data/ext/boost/preprocessor/seq/reverse.hpp +39 -0
- data/ext/boost/preprocessor/seq/seq.hpp +44 -0
- data/ext/boost/preprocessor/seq/size.hpp +548 -0
- data/ext/boost/preprocessor/seq/subseq.hpp +28 -0
- data/ext/boost/preprocessor/seq/to_array.hpp +28 -0
- data/ext/boost/preprocessor/seq/to_tuple.hpp +27 -0
- data/ext/boost/preprocessor/seq/transform.hpp +48 -0
- data/ext/boost/preprocessor/slot.hpp +17 -0
- data/ext/boost/preprocessor/slot/counter.hpp +25 -0
- data/ext/boost/preprocessor/slot/detail/counter.hpp +269 -0
- data/ext/boost/preprocessor/slot/detail/def.hpp +49 -0
- data/ext/boost/preprocessor/slot/detail/shared.hpp +247 -0
- data/ext/boost/preprocessor/slot/detail/slot1.hpp +267 -0
- data/ext/boost/preprocessor/slot/detail/slot2.hpp +267 -0
- data/ext/boost/preprocessor/slot/detail/slot3.hpp +267 -0
- data/ext/boost/preprocessor/slot/detail/slot4.hpp +267 -0
- data/ext/boost/preprocessor/slot/detail/slot5.hpp +267 -0
- data/ext/boost/preprocessor/slot/slot.hpp +32 -0
- data/ext/boost/preprocessor/stringize.hpp +33 -0
- data/ext/boost/preprocessor/tuple.hpp +24 -0
- data/ext/boost/preprocessor/tuple/eat.hpp +57 -0
- data/ext/boost/preprocessor/tuple/elem.hpp +385 -0
- data/ext/boost/preprocessor/tuple/rem.hpp +72 -0
- data/ext/boost/preprocessor/tuple/reverse.hpp +62 -0
- data/ext/boost/preprocessor/tuple/to_list.hpp +62 -0
- data/ext/boost/preprocessor/tuple/to_seq.hpp +60 -0
- data/ext/boost/preprocessor/while.hpp +17 -0
- data/ext/boost/preprocessor/wstringize.hpp +29 -0
- data/ext/boost/ref.hpp +178 -0
- data/ext/boost/shared_ptr.hpp +558 -0
- data/ext/boost/src/barrier.cpp +42 -0
- data/ext/boost/src/condition.cpp +692 -0
- data/ext/boost/src/exceptions.cpp +147 -0
- data/ext/boost/src/mutex.cpp +561 -0
- data/ext/boost/src/mutex.inl +128 -0
- data/ext/boost/src/once.cpp +213 -0
- data/ext/boost/src/recursive_mutex.cpp +1040 -0
- data/ext/boost/src/thread.cpp +371 -0
- data/ext/boost/src/timeconv.inl +130 -0
- data/ext/boost/src/tss.cpp +251 -0
- data/ext/boost/src/tss_dll.cpp +72 -0
- data/ext/boost/src/tss_hooks.cpp +212 -0
- data/ext/boost/src/tss_null.cpp +33 -0
- data/ext/boost/src/tss_pe.cpp +179 -0
- data/ext/boost/src/xtime.cpp +158 -0
- data/ext/boost/static_assert.hpp +118 -0
- data/ext/boost/thread.hpp +19 -0
- data/ext/boost/thread/barrier.hpp +44 -0
- data/ext/boost/thread/condition.hpp +201 -0
- data/ext/boost/thread/detail/config.hpp +95 -0
- data/ext/boost/thread/detail/force_cast.hpp +39 -0
- data/ext/boost/thread/detail/lock.hpp +209 -0
- data/ext/boost/thread/detail/read_write_lock.hpp +1106 -0
- data/ext/boost/thread/detail/singleton.hpp +59 -0
- data/ext/boost/thread/detail/tss_hooks.hpp +78 -0
- data/ext/boost/thread/exceptions.hpp +97 -0
- data/ext/boost/thread/mutex.hpp +170 -0
- data/ext/boost/thread/once.hpp +37 -0
- data/ext/boost/thread/recursive_mutex.hpp +184 -0
- data/ext/boost/thread/thread.hpp +90 -0
- data/ext/boost/thread/tss.hpp +128 -0
- data/ext/boost/thread/xtime.hpp +54 -0
- data/ext/boost/throw_exception.hpp +46 -0
- data/ext/boost/type.hpp +18 -0
- data/ext/boost/type_traits/add_const.hpp +47 -0
- data/ext/boost/type_traits/add_cv.hpp +48 -0
- data/ext/boost/type_traits/add_pointer.hpp +72 -0
- data/ext/boost/type_traits/add_reference.hpp +89 -0
- data/ext/boost/type_traits/add_volatile.hpp +47 -0
- data/ext/boost/type_traits/aligned_storage.hpp +13 -0
- data/ext/boost/type_traits/alignment_of.hpp +100 -0
- data/ext/boost/type_traits/alignment_traits.hpp +15 -0
- data/ext/boost/type_traits/arithmetic_traits.hpp +20 -0
- data/ext/boost/type_traits/array_traits.hpp +15 -0
- data/ext/boost/type_traits/broken_compiler_spec.hpp +117 -0
- data/ext/boost/type_traits/composite_traits.hpp +29 -0
- data/ext/boost/type_traits/config.hpp +76 -0
- data/ext/boost/type_traits/conversion_traits.hpp +17 -0
- data/ext/boost/type_traits/cv_traits.hpp +24 -0
- data/ext/boost/type_traits/decay.hpp +44 -0
- data/ext/boost/type_traits/detail/bool_trait_def.hpp +173 -0
- data/ext/boost/type_traits/detail/bool_trait_undef.hpp +27 -0
- data/ext/boost/type_traits/detail/cv_traits_impl.hpp +97 -0
- data/ext/boost/type_traits/detail/false_result.hpp +28 -0
- data/ext/boost/type_traits/detail/ice_and.hpp +35 -0
- data/ext/boost/type_traits/detail/ice_eq.hpp +36 -0
- data/ext/boost/type_traits/detail/ice_not.hpp +31 -0
- data/ext/boost/type_traits/detail/ice_or.hpp +34 -0
- data/ext/boost/type_traits/detail/is_function_ptr_helper.hpp +220 -0
- data/ext/boost/type_traits/detail/is_function_ptr_tester.hpp +654 -0
- data/ext/boost/type_traits/detail/is_mem_fun_pointer_impl.hpp +817 -0
- data/ext/boost/type_traits/detail/is_mem_fun_pointer_tester.hpp +2759 -0
- data/ext/boost/type_traits/detail/size_t_trait_def.hpp +58 -0
- data/ext/boost/type_traits/detail/size_t_trait_undef.hpp +16 -0
- data/ext/boost/type_traits/detail/template_arity_spec.hpp +31 -0
- data/ext/boost/type_traits/detail/type_trait_def.hpp +61 -0
- data/ext/boost/type_traits/detail/type_trait_undef.hpp +19 -0
- data/ext/boost/type_traits/detail/wrap.hpp +18 -0
- data/ext/boost/type_traits/detail/yes_no_type.hpp +26 -0
- data/ext/boost/type_traits/extent.hpp +134 -0
- data/ext/boost/type_traits/function_traits.hpp +236 -0
- data/ext/boost/type_traits/has_nothrow_assign.hpp +38 -0
- data/ext/boost/type_traits/has_nothrow_constructor.hpp +38 -0
- data/ext/boost/type_traits/has_nothrow_copy.hpp +38 -0
- data/ext/boost/type_traits/has_nothrow_destructor.hpp +25 -0
- data/ext/boost/type_traits/has_trivial_assign.hpp +50 -0
- data/ext/boost/type_traits/has_trivial_constructor.hpp +42 -0
- data/ext/boost/type_traits/has_trivial_copy.hpp +48 -0
- data/ext/boost/type_traits/has_trivial_destructor.hpp +42 -0
- data/ext/boost/type_traits/has_virtual_destructor.hpp +25 -0
- data/ext/boost/type_traits/ice.hpp +20 -0
- data/ext/boost/type_traits/integral_constant.hpp +53 -0
- data/ext/boost/type_traits/intrinsics.hpp +137 -0
- data/ext/boost/type_traits/is_abstract.hpp +137 -0
- data/ext/boost/type_traits/is_arithmetic.hpp +43 -0
- data/ext/boost/type_traits/is_array.hpp +90 -0
- data/ext/boost/type_traits/is_base_and_derived.hpp +223 -0
- data/ext/boost/type_traits/is_base_of.hpp +40 -0
- data/ext/boost/type_traits/is_class.hpp +128 -0
- data/ext/boost/type_traits/is_compound.hpp +40 -0
- data/ext/boost/type_traits/is_const.hpp +142 -0
- data/ext/boost/type_traits/is_convertible.hpp +416 -0
- data/ext/boost/type_traits/is_empty.hpp +211 -0
- data/ext/boost/type_traits/is_enum.hpp +180 -0
- data/ext/boost/type_traits/is_float.hpp +27 -0
- data/ext/boost/type_traits/is_floating_point.hpp +27 -0
- data/ext/boost/type_traits/is_function.hpp +88 -0
- data/ext/boost/type_traits/is_fundamental.hpp +41 -0
- data/ext/boost/type_traits/is_integral.hpp +71 -0
- data/ext/boost/type_traits/is_member_function_pointer.hpp +126 -0
- data/ext/boost/type_traits/is_member_object_pointer.hpp +46 -0
- data/ext/boost/type_traits/is_member_pointer.hpp +108 -0
- data/ext/boost/type_traits/is_object.hpp +53 -0
- data/ext/boost/type_traits/is_pod.hpp +135 -0
- data/ext/boost/type_traits/is_pointer.hpp +149 -0
- data/ext/boost/type_traits/is_polymorphic.hpp +102 -0
- data/ext/boost/type_traits/is_reference.hpp +116 -0
- data/ext/boost/type_traits/is_same.hpp +103 -0
- data/ext/boost/type_traits/is_scalar.hpp +55 -0
- data/ext/boost/type_traits/is_signed.hpp +117 -0
- data/ext/boost/type_traits/is_stateless.hpp +48 -0
- data/ext/boost/type_traits/is_union.hpp +49 -0
- data/ext/boost/type_traits/is_unsigned.hpp +114 -0
- data/ext/boost/type_traits/is_void.hpp +33 -0
- data/ext/boost/type_traits/is_volatile.hpp +131 -0
- data/ext/boost/type_traits/msvc/remove_all_extents.hpp +47 -0
- data/ext/boost/type_traits/msvc/remove_bounds.hpp +43 -0
- data/ext/boost/type_traits/msvc/remove_const.hpp +143 -0
- data/ext/boost/type_traits/msvc/remove_cv.hpp +190 -0
- data/ext/boost/type_traits/msvc/remove_extent.hpp +43 -0
- data/ext/boost/type_traits/msvc/remove_pointer.hpp +42 -0
- data/ext/boost/type_traits/msvc/remove_reference.hpp +42 -0
- data/ext/boost/type_traits/msvc/remove_volatile.hpp +143 -0
- data/ext/boost/type_traits/msvc/typeof.hpp +50 -0
- data/ext/boost/type_traits/object_traits.hpp +33 -0
- data/ext/boost/type_traits/rank.hpp +81 -0
- data/ext/boost/type_traits/reference_traits.hpp +15 -0
- data/ext/boost/type_traits/remove_all_extents.hpp +48 -0
- data/ext/boost/type_traits/remove_bounds.hpp +48 -0
- data/ext/boost/type_traits/remove_const.hpp +78 -0
- data/ext/boost/type_traits/remove_cv.hpp +61 -0
- data/ext/boost/type_traits/remove_extent.hpp +48 -0
- data/ext/boost/type_traits/remove_pointer.hpp +43 -0
- data/ext/boost/type_traits/remove_reference.hpp +50 -0
- data/ext/boost/type_traits/remove_volatile.hpp +77 -0
- data/ext/boost/type_traits/same_traits.hpp +15 -0
- data/ext/boost/type_traits/transform_traits.hpp +21 -0
- data/ext/boost/type_traits/transform_traits_spec.hpp +14 -0
- data/ext/boost/type_traits/type_with_alignment.hpp +288 -0
- data/ext/boost/utility.hpp +19 -0
- data/ext/boost/utility/addressof.hpp +58 -0
- data/ext/boost/utility/base_from_member.hpp +87 -0
- data/ext/boost/utility/compare_pointees.hpp +68 -0
- data/ext/boost/utility/enable_if.hpp +119 -0
- data/ext/boost/utility/in_place_factory.hpp +58 -0
- data/ext/boost/utility/result_of.hpp +66 -0
- data/ext/boost/utility/typed_in_place_factory.hpp +57 -0
- data/ext/boost/utility/value_init.hpp +77 -0
- data/ext/boost/visit_each.hpp +29 -0
- data/ext/boost/weak_ptr.hpp +194 -0
- data/ext/passenger/extconf.rb +17 -0
- data/ext/passenger/native_support.c +247 -0
- data/lib/passenger/abstract_server.rb +308 -0
- data/lib/passenger/application.rb +120 -0
- data/lib/passenger/application_spawner.rb +295 -0
- data/lib/passenger/cgi_fixed.rb +66 -0
- data/lib/passenger/console_text_template.rb +59 -0
- data/lib/passenger/dependencies.rb +285 -0
- data/lib/passenger/framework_spawner.rb +349 -0
- data/lib/passenger/html_template.rb +102 -0
- data/lib/passenger/message_channel.rb +221 -0
- data/lib/passenger/platform_info.rb +246 -0
- data/lib/passenger/request_handler.rb +324 -0
- data/lib/passenger/simple_benchmarking.rb +45 -0
- data/lib/passenger/spawn_manager.rb +251 -0
- data/lib/passenger/templates/apache2_config_snippets.txt.erb +13 -0
- data/lib/passenger/templates/apache_must_be_compiled_with_prefork_mpm.txt.erb +8 -0
- data/lib/passenger/templates/app_exited_during_initialization.html.erb +18 -0
- data/lib/passenger/templates/app_init_error.html.erb +64 -0
- data/lib/passenger/templates/database_error.html.erb +59 -0
- data/lib/passenger/templates/deployment_example.txt.erb +18 -0
- data/lib/passenger/templates/error_layout.css +97 -0
- data/lib/passenger/templates/error_layout.html.erb +39 -0
- data/lib/passenger/templates/framework_init_error.html.erb +39 -0
- data/lib/passenger/templates/general_error.html.erb +22 -0
- data/lib/passenger/templates/invalid_app_root.html.erb +9 -0
- data/lib/passenger/templates/load_error.html.erb +46 -0
- data/lib/passenger/templates/no_write_permission_to_passenger_root.txt.erb +9 -0
- data/lib/passenger/templates/osx_broken_apache_warning.txt.erb +23 -0
- data/lib/passenger/templates/possible_solutions_for_compilation_and_installation_problems.txt.erb +11 -0
- data/lib/passenger/templates/run_installer_as_root.txt.erb +8 -0
- data/lib/passenger/templates/version_not_found.html.erb +25 -0
- data/lib/passenger/templates/welcome.txt.erb +15 -0
- data/lib/passenger/utils.rb +222 -0
- data/lib/rake/cplusplus.rb +43 -0
- data/lib/rake/extensions.rb +175 -0
- data/lib/rake/gempackagetask.rb +105 -0
- data/lib/rake/packagetask.rb +186 -0
- data/lib/rake/rdoctask.rb +148 -0
- data/misc/find_owner_pipe_leaks.rb +121 -0
- data/misc/render_error_pages.rb +105 -0
- data/test/ApplicationPoolServerTest.cpp +100 -0
- data/test/ApplicationPoolServer_ApplicationPoolTest.cpp +23 -0
- data/test/ApplicationPoolTest.cpp +348 -0
- data/test/CxxTestMain.cpp +24 -0
- data/test/MessageChannelTest.cpp +310 -0
- data/test/SpawnManagerTest.cpp +64 -0
- data/test/StandardApplicationPoolTest.cpp +21 -0
- data/test/UtilsTest.cpp +100 -0
- data/test/abstract_server_spec.rb +17 -0
- data/test/application_spawner_spec.rb +78 -0
- data/test/application_spec.rb +25 -0
- data/test/config.yml.example +21 -0
- data/test/framework_spawner_spec.rb +99 -0
- data/test/integration_tests.rb +356 -0
- data/test/message_channel_spec.rb +171 -0
- data/test/minimal_spawner_spec.rb +19 -0
- data/test/spawn_manager_spec.rb +105 -0
- data/test/spawn_server_spec.rb +25 -0
- data/test/spawner_error_handling_spec.rb +35 -0
- data/test/spawner_privilege_lowering_spec.rb +71 -0
- data/test/stub/apache2/httpd.conf +72 -0
- data/test/stub/apache2/httpd.conf.erb +77 -0
- data/test/stub/apache2/mime.types +748 -0
- data/test/stub/broken-railsapp/config/environment.rb +2 -0
- data/test/stub/broken-railsapp/public/useless.txt +1 -0
- data/test/stub/broken-railsapp2/config/environment.rb +3 -0
- data/test/stub/broken-railsapp3/config/environment.rb +4 -0
- data/test/stub/broken-railsapp4/config/environment.rb +1 -0
- data/test/stub/broken-railsapp4/public/useless.txt +1 -0
- data/test/stub/broken-railsapp5/config/environment.rb +1 -0
- data/test/stub/broken-railsapp5/public/useless.txt +1 -0
- data/test/stub/broken-railsapp5/vendor/rails/actionmailer/lib/action_mailer.rb +0 -0
- data/test/stub/broken-railsapp5/vendor/rails/actionpack/lib/action_controller.rb +0 -0
- data/test/stub/broken-railsapp5/vendor/rails/actionpack/lib/action_pack.rb +0 -0
- data/test/stub/broken-railsapp5/vendor/rails/actionpack/lib/action_view.rb +0 -0
- data/test/stub/broken-railsapp5/vendor/rails/activerecord/lib/active_record.rb +0 -0
- data/test/stub/broken-railsapp5/vendor/rails/activeresource/lib/active_resource.rb +0 -0
- data/test/stub/broken-railsapp5/vendor/rails/activesupport/lib/active_support.rb +17 -0
- data/test/stub/broken-railsapp5/vendor/rails/activesupport/lib/active_support/whiny_nil.rb +0 -0
- data/test/stub/broken-railsapp5/vendor/rails/railties/lib/dispatcher.rb +0 -0
- data/test/stub/broken-railsapp5/vendor/rails/railties/lib/initializer.rb +9 -0
- data/test/stub/broken-railsapp5/vendor/rails/railties/lib/ruby_version_check.rb +1 -0
- data/test/stub/garbage1.dat +0 -0
- data/test/stub/garbage2.dat +0 -0
- data/test/stub/garbage3.dat +0 -0
- data/test/stub/http_request.yml +23 -0
- data/test/stub/message_channel.rb +9 -0
- data/test/stub/message_channel_2.rb +10 -0
- data/test/stub/message_channel_3.rb +15 -0
- data/test/stub/minimal-railsapp/README +3 -0
- data/test/stub/minimal-railsapp/config/application.rb +0 -0
- data/test/stub/minimal-railsapp/config/environment.rb +3 -0
- data/test/stub/minimal-railsapp/vendor/rails/actionmailer/lib/action_mailer.rb +0 -0
- data/test/stub/minimal-railsapp/vendor/rails/actionpack/lib/action_controller.rb +6 -0
- data/test/stub/minimal-railsapp/vendor/rails/actionpack/lib/action_pack.rb +0 -0
- data/test/stub/minimal-railsapp/vendor/rails/actionpack/lib/action_view.rb +0 -0
- data/test/stub/minimal-railsapp/vendor/rails/activerecord/lib/active_record.rb +0 -0
- data/test/stub/minimal-railsapp/vendor/rails/activeresource/lib/active_resource.rb +0 -0
- data/test/stub/minimal-railsapp/vendor/rails/activesupport/lib/active_support.rb +17 -0
- data/test/stub/minimal-railsapp/vendor/rails/activesupport/lib/active_support/whiny_nil.rb +0 -0
- data/test/stub/minimal-railsapp/vendor/rails/railties/lib/dispatcher.rb +0 -0
- data/test/stub/minimal-railsapp/vendor/rails/railties/lib/initializer.rb +8 -0
- data/test/stub/minimal-railsapp/vendor/rails/railties/lib/ruby_version_check.rb +1 -0
- data/test/stub/mycook/app/controllers/application.rb +12 -0
- data/test/stub/mycook/app/controllers/recipes_controller.rb +5 -0
- data/test/stub/mycook/app/controllers/uploads_controller.rb +11 -0
- data/test/stub/mycook/app/controllers/welcome_controller.rb +23 -0
- data/test/stub/mycook/app/helpers/application_helper.rb +3 -0
- data/test/stub/mycook/app/views/layouts/default.rhtml +26 -0
- data/test/stub/mycook/app/views/recipes/create.rhtml +13 -0
- data/test/stub/mycook/app/views/recipes/index.rhtml +3 -0
- data/test/stub/mycook/app/views/recipes/new.rhtml +8 -0
- data/test/stub/mycook/app/views/uploads/index.rhtml +1 -0
- data/test/stub/mycook/app/views/uploads/new.html.erb +8 -0
- data/test/stub/mycook/app/views/welcome/cached.rhtml +1 -0
- data/test/stub/mycook/app/views/welcome/index.rhtml +20 -0
- data/test/stub/mycook/config/boot.rb +108 -0
- data/test/stub/mycook/config/database.yml +19 -0
- data/test/stub/mycook/config/environment.rb +61 -0
- data/test/stub/mycook/config/environments/development.rb +18 -0
- data/test/stub/mycook/config/environments/production.rb +19 -0
- data/test/stub/mycook/config/environments/test.rb +22 -0
- data/test/stub/mycook/config/initializers/inflections.rb +10 -0
- data/test/stub/mycook/config/initializers/mime_types.rb +5 -0
- data/test/stub/mycook/config/routes.rb +38 -0
- data/test/stub/mycook/public/404.html +30 -0
- data/test/stub/mycook/public/422.html +30 -0
- data/test/stub/mycook/public/500.html +30 -0
- data/test/stub/mycook/public/dispatch.cgi +10 -0
- data/test/stub/mycook/public/dispatch.fcgi +24 -0
- data/test/stub/mycook/public/dispatch.rb +10 -0
- data/test/stub/mycook/public/favicon.ico +0 -0
- data/test/stub/mycook/public/images/angrywizard.gif +0 -0
- data/test/stub/mycook/public/images/cookbook.gif +0 -0
- data/test/stub/mycook/public/images/header.png +0 -0
- data/test/stub/mycook/public/images/rails.png +0 -0
- data/test/stub/mycook/public/javascripts/application.js +2 -0
- data/test/stub/mycook/public/javascripts/controls.js +963 -0
- data/test/stub/mycook/public/javascripts/dragdrop.js +972 -0
- data/test/stub/mycook/public/javascripts/effects.js +1120 -0
- data/test/stub/mycook/public/javascripts/prototype.js +4225 -0
- data/test/stub/mycook/public/robots.txt +5 -0
- data/test/stub/mycook/public/uploads.html +26 -0
- data/test/stub/mycook/public/welcome/cached.html +26 -0
- data/test/stub/railsapp-without-version-spec/app/controllers/application.rb +12 -0
- data/test/stub/railsapp-without-version-spec/app/controllers/foo_controller.rb +5 -0
- data/test/stub/railsapp-without-version-spec/app/helpers/application_helper.rb +3 -0
- data/test/stub/railsapp-without-version-spec/config/boot.rb +108 -0
- data/test/stub/railsapp-without-version-spec/config/database.yml +19 -0
- data/test/stub/railsapp-without-version-spec/config/environment.rb +58 -0
- data/test/stub/railsapp-without-version-spec/config/environments/development.rb +18 -0
- data/test/stub/railsapp-without-version-spec/config/environments/production.rb +19 -0
- data/test/stub/railsapp-without-version-spec/config/environments/test.rb +22 -0
- data/test/stub/railsapp-without-version-spec/config/initializers/inflections.rb +10 -0
- data/test/stub/railsapp-without-version-spec/config/initializers/mime_types.rb +5 -0
- data/test/stub/railsapp-without-version-spec/config/routes.rb +35 -0
- data/test/stub/railsapp-without-version-spec/public/useless.txt +1 -0
- data/test/stub/railsapp/app/controllers/application.rb +12 -0
- data/test/stub/railsapp/app/controllers/bar_controller_1.rb +5 -0
- data/test/stub/railsapp/app/controllers/bar_controller_2.rb +5 -0
- data/test/stub/railsapp/app/controllers/foo_controller.rb +5 -0
- data/test/stub/railsapp/app/helpers/application_helper.rb +3 -0
- data/test/stub/railsapp/config/boot.rb +108 -0
- data/test/stub/railsapp/config/database.yml +19 -0
- data/test/stub/railsapp/config/environment.rb +59 -0
- data/test/stub/railsapp/config/environments/development.rb +18 -0
- data/test/stub/railsapp/config/environments/production.rb +19 -0
- data/test/stub/railsapp/config/environments/test.rb +22 -0
- data/test/stub/railsapp/config/initializers/inflections.rb +10 -0
- data/test/stub/railsapp/config/initializers/mime_types.rb +5 -0
- data/test/stub/railsapp/config/routes.rb +35 -0
- data/test/stub/railsapp/public/useless.txt +1 -0
- data/test/stub/railsapp2/app/controllers/application.rb +12 -0
- data/test/stub/railsapp2/app/controllers/foo_controller.rb +5 -0
- data/test/stub/railsapp2/app/helpers/application_helper.rb +3 -0
- data/test/stub/railsapp2/config/boot.rb +108 -0
- data/test/stub/railsapp2/config/database.yml +19 -0
- data/test/stub/railsapp2/config/environment.rb +59 -0
- data/test/stub/railsapp2/config/environments/development.rb +18 -0
- data/test/stub/railsapp2/config/environments/production.rb +19 -0
- data/test/stub/railsapp2/config/environments/test.rb +22 -0
- data/test/stub/railsapp2/config/initializers/inflections.rb +10 -0
- data/test/stub/railsapp2/config/initializers/mime_types.rb +5 -0
- data/test/stub/railsapp2/config/routes.rb +35 -0
- data/test/stub/railsapp2/public/useless.txt +1 -0
- data/test/stub/spawn_server.rb +17 -0
- data/test/stub/zsfa/header.png +0 -0
- data/test/stub/zsfa/index.html +14 -0
- data/test/stub/zsfa/zsfa.png +0 -0
- data/test/support/apache2_config_writer.rb +44 -0
- data/test/support/config.rb +10 -0
- data/test/support/multipart.rb +62 -0
- data/test/support/run_rspec_tests.rb +10 -0
- data/test/support/tut.h +1219 -0
- data/test/support/tut_reporter.h +256 -0
- data/test/support/valgrind.h +2539 -0
- metadata +2204 -0
@@ -0,0 +1,673 @@
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
2
|
+
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
|
3
|
+
<title>Passenger: ApplicationPoolClientServer.h Source File</title>
|
4
|
+
<link href="doxygen.css" rel="stylesheet" type="text/css">
|
5
|
+
<link href="tabs.css" rel="stylesheet" type="text/css">
|
6
|
+
</head><body>
|
7
|
+
<!-- Generated by Doxygen 1.5.3 -->
|
8
|
+
<div class="tabs">
|
9
|
+
<ul>
|
10
|
+
<li><a href="main.html"><span>Main Page</span></a></li>
|
11
|
+
<li><a href="modules.html"><span>Modules</span></a></li>
|
12
|
+
<li><a href="annotated.html"><span>Classes</span></a></li>
|
13
|
+
<li class="current"><a href="files.html"><span>Files</span></a></li>
|
14
|
+
</ul>
|
15
|
+
</div>
|
16
|
+
<h1>ApplicationPoolClientServer.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
|
17
|
+
<a name="l00002"></a>00002 <span class="comment"> * Phusion Passenger - http://www.modrails.com/</span>
|
18
|
+
<a name="l00003"></a>00003 <span class="comment"> * Copyright (C) 2008 Phusion</span>
|
19
|
+
<a name="l00004"></a>00004 <span class="comment"> *</span>
|
20
|
+
<a name="l00005"></a>00005 <span class="comment"> * This program is free software; you can redistribute it and/or modify</span>
|
21
|
+
<a name="l00006"></a>00006 <span class="comment"> * it under the terms of the GNU General Public License as published by</span>
|
22
|
+
<a name="l00007"></a>00007 <span class="comment"> * the Free Software Foundation; version 2 of the License.</span>
|
23
|
+
<a name="l00008"></a>00008 <span class="comment"> *</span>
|
24
|
+
<a name="l00009"></a>00009 <span class="comment"> * This program is distributed in the hope that it will be useful,</span>
|
25
|
+
<a name="l00010"></a>00010 <span class="comment"> * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
|
26
|
+
<a name="l00011"></a>00011 <span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
|
27
|
+
<a name="l00012"></a>00012 <span class="comment"> * GNU General Public License for more details.</span>
|
28
|
+
<a name="l00013"></a>00013 <span class="comment"> *</span>
|
29
|
+
<a name="l00014"></a>00014 <span class="comment"> * You should have received a copy of the GNU General Public License along</span>
|
30
|
+
<a name="l00015"></a>00015 <span class="comment"> * with this program; if not, write to the Free Software Foundation, Inc.,</span>
|
31
|
+
<a name="l00016"></a>00016 <span class="comment"> * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.</span>
|
32
|
+
<a name="l00017"></a>00017 <span class="comment"> */</span>
|
33
|
+
<a name="l00018"></a>00018 <span class="preprocessor">#ifndef _PASSENGER_APPLICATION_POOL_CLIENT_SERVER_H_</span>
|
34
|
+
<a name="l00019"></a>00019 <span class="preprocessor"></span><span class="preprocessor">#define _PASSENGER_APPLICATION_POOL_CLIENT_SERVER_H_</span>
|
35
|
+
<a name="l00020"></a>00020 <span class="preprocessor"></span>
|
36
|
+
<a name="l00021"></a>00021 <span class="preprocessor">#include <boost/bind.hpp></span>
|
37
|
+
<a name="l00022"></a>00022 <span class="preprocessor">#include <boost/thread/thread.hpp></span>
|
38
|
+
<a name="l00023"></a>00023
|
39
|
+
<a name="l00024"></a>00024 <span class="preprocessor">#include <set></span>
|
40
|
+
<a name="l00025"></a>00025
|
41
|
+
<a name="l00026"></a>00026 <span class="preprocessor">#include <sys/types.h></span>
|
42
|
+
<a name="l00027"></a>00027 <span class="preprocessor">#include <sys/socket.h></span>
|
43
|
+
<a name="l00028"></a>00028 <span class="preprocessor">#include <cstdlib></span>
|
44
|
+
<a name="l00029"></a>00029 <span class="preprocessor">#include <errno.h></span>
|
45
|
+
<a name="l00030"></a>00030 <span class="preprocessor">#include <unistd.h></span>
|
46
|
+
<a name="l00031"></a>00031
|
47
|
+
<a name="l00032"></a>00032 <span class="preprocessor">#include "StandardApplicationPool.h"</span>
|
48
|
+
<a name="l00033"></a>00033 <span class="preprocessor">#include "MessageChannel.h"</span>
|
49
|
+
<a name="l00034"></a>00034 <span class="preprocessor">#include "Exceptions.h"</span>
|
50
|
+
<a name="l00035"></a>00035 <span class="preprocessor">#include "Logging.h"</span>
|
51
|
+
<a name="l00036"></a>00036
|
52
|
+
<a name="l00037"></a>00037 <span class="keyword">namespace </span>Passenger {
|
53
|
+
<a name="l00038"></a>00038
|
54
|
+
<a name="l00039"></a>00039 <span class="keyword">using namespace </span>std;
|
55
|
+
<a name="l00040"></a>00040 <span class="keyword">using namespace </span>boost;
|
56
|
+
<a name="l00041"></a>00041 <span class="comment"></span>
|
57
|
+
<a name="l00042"></a>00042 <span class="comment">/**</span>
|
58
|
+
<a name="l00043"></a>00043 <span class="comment"> * Multi-process usage support for ApplicationPool.</span>
|
59
|
+
<a name="l00044"></a>00044 <span class="comment"> *</span>
|
60
|
+
<a name="l00045"></a>00045 <span class="comment"> * ApplicationPoolServer implements a client/server architecture for ApplicationPool.</span>
|
61
|
+
<a name="l00046"></a>00046 <span class="comment"> * This allows one to use ApplicationPool in a multi-process environment (unlike</span>
|
62
|
+
<a name="l00047"></a>00047 <span class="comment"> * StandardApplicationPool). The cache/pool data is stored in the server. Different</span>
|
63
|
+
<a name="l00048"></a>00048 <span class="comment"> * processes can then access the pool through the server.</span>
|
64
|
+
<a name="l00049"></a>00049 <span class="comment"> *</span>
|
65
|
+
<a name="l00050"></a>00050 <span class="comment"> * ApplicationPoolServer itself does not inherit ApplicationPool. Instead, it returns</span>
|
66
|
+
<a name="l00051"></a>00051 <span class="comment"> * an ApplicationPool object via the connect() call. For example:</span>
|
67
|
+
<a name="l00052"></a>00052 <span class="comment"> * @code</span>
|
68
|
+
<a name="l00053"></a>00053 <span class="comment"> * // Create an ApplicationPoolServer.</span>
|
69
|
+
<a name="l00054"></a>00054 <span class="comment"> * ApplicationPoolServer server(...);</span>
|
70
|
+
<a name="l00055"></a>00055 <span class="comment"> * </span>
|
71
|
+
<a name="l00056"></a>00056 <span class="comment"> * // Now fork a child process, like Apache's prefork MPM eventually will.</span>
|
72
|
+
<a name="l00057"></a>00057 <span class="comment"> * pid_t pid = fork();</span>
|
73
|
+
<a name="l00058"></a>00058 <span class="comment"> * if (pid == 0) {</span>
|
74
|
+
<a name="l00059"></a>00059 <span class="comment"> * // Child process</span>
|
75
|
+
<a name="l00060"></a>00060 <span class="comment"> * </span>
|
76
|
+
<a name="l00061"></a>00061 <span class="comment"> * // Connect to the server. After connection, we have an ApplicationPool</span>
|
77
|
+
<a name="l00062"></a>00062 <span class="comment"> * // object!</span>
|
78
|
+
<a name="l00063"></a>00063 <span class="comment"> * ApplicationPoolPtr pool(server.connect());</span>
|
79
|
+
<a name="l00064"></a>00064 <span class="comment"> *</span>
|
80
|
+
<a name="l00065"></a>00065 <span class="comment"> * // The child process doesn't run a server (only the parent process does)</span>
|
81
|
+
<a name="l00066"></a>00066 <span class="comment"> * // so we call detach to free the server resources (things like file</span>
|
82
|
+
<a name="l00067"></a>00067 <span class="comment"> * // descriptors).</span>
|
83
|
+
<a name="l00068"></a>00068 <span class="comment"> * server.detach();</span>
|
84
|
+
<a name="l00069"></a>00069 <span class="comment"> *</span>
|
85
|
+
<a name="l00070"></a>00070 <span class="comment"> * ApplicationPool::SessionPtr session(pool->get("/home/webapps/foo"));</span>
|
86
|
+
<a name="l00071"></a>00071 <span class="comment"> * do_something_with(session);</span>
|
87
|
+
<a name="l00072"></a>00072 <span class="comment"> *</span>
|
88
|
+
<a name="l00073"></a>00073 <span class="comment"> * _exit(0);</span>
|
89
|
+
<a name="l00074"></a>00074 <span class="comment"> * } else {</span>
|
90
|
+
<a name="l00075"></a>00075 <span class="comment"> * // Parent process</span>
|
91
|
+
<a name="l00076"></a>00076 <span class="comment"> * waitpid(pid, NULL, 0);</span>
|
92
|
+
<a name="l00077"></a>00077 <span class="comment"> * }</span>
|
93
|
+
<a name="l00078"></a>00078 <span class="comment"> * @endcode</span>
|
94
|
+
<a name="l00079"></a>00079 <span class="comment"> *</span>
|
95
|
+
<a name="l00080"></a>00080 <span class="comment"> * @warning</span>
|
96
|
+
<a name="l00081"></a>00081 <span class="comment"> * ApplicationPoolServer uses threads internally. Threads will disappear after a fork(),</span>
|
97
|
+
<a name="l00082"></a>00082 <span class="comment"> * so ApplicationPoolServer will become usable as a server after a fork(). After a fork(),</span>
|
98
|
+
<a name="l00083"></a>00083 <span class="comment"> * you can still call connect() (and, of course, detach()), but the same</span>
|
99
|
+
<a name="l00084"></a>00084 <span class="comment"> * ApplicationPoolServer better still be running in the parent process. So in case of</span>
|
100
|
+
<a name="l00085"></a>00085 <span class="comment"> * Apache with the prefork MPM, be sure to create an ApplicationPoolServer</span>
|
101
|
+
<a name="l00086"></a>00086 <span class="comment"> * <em>after</em> Apache has daemonized.</span>
|
102
|
+
<a name="l00087"></a>00087 <span class="comment"> *</span>
|
103
|
+
<a name="l00088"></a>00088 <span class="comment"> * <h2>Implementation notes</h2></span>
|
104
|
+
<a name="l00089"></a>00089 <span class="comment"> * Notice that ApplicationPoolServer does do not use TCP sockets at all, or even named Unix</span>
|
105
|
+
<a name="l00090"></a>00090 <span class="comment"> * sockets, depite being a server that can handle multiple clients! So ApplicationPoolServer</span>
|
106
|
+
<a name="l00091"></a>00091 <span class="comment"> * will expose no open ports or temporary Unix socket files. Only child processes are able</span>
|
107
|
+
<a name="l00092"></a>00092 <span class="comment"> * to use the ApplicationPoolServer.</span>
|
108
|
+
<a name="l00093"></a>00093 <span class="comment"> *</span>
|
109
|
+
<a name="l00094"></a>00094 <span class="comment"> * This is implemented through anonymous Unix sockets (<tt>socketpair()</tt>) and file descriptor</span>
|
110
|
+
<a name="l00095"></a>00095 <span class="comment"> * passing. It allows one to emulate <tt>accept()</tt>. During initialization,</span>
|
111
|
+
<a name="l00096"></a>00096 <span class="comment"> * ApplicationPoolServer creates a pair of Unix sockets, one called <tt>serverSocket</tt></span>
|
112
|
+
<a name="l00097"></a>00097 <span class="comment"> * and the other called <tt>connectSocket</tt>. There is a thread which continuously</span>
|
113
|
+
<a name="l00098"></a>00098 <span class="comment"> * listens on serverSocket for incoming data. The data itself is not important, because it</span>
|
114
|
+
<a name="l00099"></a>00099 <span class="comment"> * only serves to wake up the thread. ApplicationPoolServer::connect() sends some data through</span>
|
115
|
+
<a name="l00100"></a>00100 <span class="comment"> * connectSocket, which wakes up the server thread. The server thread will then create</span>
|
116
|
+
<a name="l00101"></a>00101 <span class="comment"> * a pair of Unix sockets. One of them is passed through serverSocket. The other will be</span>
|
117
|
+
<a name="l00102"></a>00102 <span class="comment"> * handled by a newly created client thread. So the socket that was passed through serverSocket</span>
|
118
|
+
<a name="l00103"></a>00103 <span class="comment"> * is the client's connection to the server, while the other socket is the server's connection</span>
|
119
|
+
<a name="l00104"></a>00104 <span class="comment"> * to the client.</span>
|
120
|
+
<a name="l00105"></a>00105 <span class="comment"> *</span>
|
121
|
+
<a name="l00106"></a>00106 <span class="comment"> * Note that serverSocket and connectSocket are solely used for setting up new connections</span>
|
122
|
+
<a name="l00107"></a>00107 <span class="comment"> * ala accept(). They are not used for any actual data. In fact, they cannot be used in any</span>
|
123
|
+
<a name="l00108"></a>00108 <span class="comment"> * other way without some sort of inter-process synchronization mechanism, because all</span>
|
124
|
+
<a name="l00109"></a>00109 <span class="comment"> * child processes are connected to the same serverSocket. In contrast,</span>
|
125
|
+
<a name="l00110"></a>00110 <span class="comment"> * ApplicationPoolServer::connect() allows one to setup a private communicate channel between</span>
|
126
|
+
<a name="l00111"></a>00111 <span class="comment"> * the server and the current child process.</span>
|
127
|
+
<a name="l00112"></a>00112 <span class="comment"> *</span>
|
128
|
+
<a name="l00113"></a>00113 <span class="comment"> * Also note that each client is handled by a seperate thread. This is necessary because</span>
|
129
|
+
<a name="l00114"></a>00114 <span class="comment"> * ApplicationPoolServer internally uses StandardApplicationPool, and the current algorithm</span>
|
130
|
+
<a name="l00115"></a>00115 <span class="comment"> * for StandardApplicationPool::get() can block (in the case that the spawning limit has</span>
|
131
|
+
<a name="l00116"></a>00116 <span class="comment"> * been exceeded). While it is possible to get around this problem without using threads,</span>
|
132
|
+
<a name="l00117"></a>00117 <span class="comment"> * a thread-based implementation is easier to write.</span>
|
133
|
+
<a name="l00118"></a>00118 <span class="comment"> *</span>
|
134
|
+
<a name="l00119"></a>00119 <span class="comment"> * @ingroup Support</span>
|
135
|
+
<a name="l00120"></a>00120 <span class="comment"> */</span>
|
136
|
+
<a name="l00121"></a><a class="code" href="classPassenger_1_1ApplicationPoolServer.html">00121</a> <span class="keyword">class </span><a class="code" href="classPassenger_1_1ApplicationPoolServer.html" title="Multi-process usage support for ApplicationPool.">ApplicationPoolServer</a> {
|
137
|
+
<a name="l00122"></a>00122 <span class="keyword">private</span>:<span class="comment"></span>
|
138
|
+
<a name="l00123"></a>00123 <span class="comment"> /**</span>
|
139
|
+
<a name="l00124"></a>00124 <span class="comment"> * Contains data shared between RemoteSession and Client.</span>
|
140
|
+
<a name="l00125"></a>00125 <span class="comment"> * Since RemoteSession and Client have different life times, i.e. one may be</span>
|
141
|
+
<a name="l00126"></a>00126 <span class="comment"> * destroyed before the other, they both use a smart pointer that points to</span>
|
142
|
+
<a name="l00127"></a>00127 <span class="comment"> * a SharedData. This way, the SharedData object is only destroyed when</span>
|
143
|
+
<a name="l00128"></a>00128 <span class="comment"> * both the RemoteSession and the Client object has been destroyed.</span>
|
144
|
+
<a name="l00129"></a>00129 <span class="comment"> */</span>
|
145
|
+
<a name="l00130"></a>00130 <span class="keyword">struct </span>SharedData {<span class="comment"></span>
|
146
|
+
<a name="l00131"></a>00131 <span class="comment"> /**</span>
|
147
|
+
<a name="l00132"></a>00132 <span class="comment"> * The socket connection to the server, as was established by</span>
|
148
|
+
<a name="l00133"></a>00133 <span class="comment"> * ApplicationPoolServer::connect().</span>
|
149
|
+
<a name="l00134"></a>00134 <span class="comment"> */</span>
|
150
|
+
<a name="l00135"></a>00135 <span class="keywordtype">int</span> server;
|
151
|
+
<a name="l00136"></a>00136
|
152
|
+
<a name="l00137"></a>00137 ~SharedData() {
|
153
|
+
<a name="l00138"></a>00138 close(server);
|
154
|
+
<a name="l00139"></a>00139 }
|
155
|
+
<a name="l00140"></a>00140 };
|
156
|
+
<a name="l00141"></a>00141
|
157
|
+
<a name="l00142"></a>00142 <span class="keyword">typedef</span> shared_ptr<SharedData> SharedDataPtr;
|
158
|
+
<a name="l00143"></a>00143 <span class="comment"></span>
|
159
|
+
<a name="l00144"></a>00144 <span class="comment"> /**</span>
|
160
|
+
<a name="l00145"></a>00145 <span class="comment"> * An Application::Session which works together with ApplicationPoolServer.</span>
|
161
|
+
<a name="l00146"></a>00146 <span class="comment"> */</span>
|
162
|
+
<a name="l00147"></a>00147 <span class="keyword">class </span>RemoteSession: <span class="keyword">public</span> <a class="code" href="classPassenger_1_1Application.html" title="Represents a single Ruby on Rails application instance.">Application</a>::Session {
|
163
|
+
<a name="l00148"></a>00148 <span class="keyword">private</span>:
|
164
|
+
<a name="l00149"></a>00149 SharedDataPtr data;
|
165
|
+
<a name="l00150"></a>00150 <span class="keywordtype">int</span> id;
|
166
|
+
<a name="l00151"></a>00151 <span class="keywordtype">int</span> reader;
|
167
|
+
<a name="l00152"></a>00152 <span class="keywordtype">int</span> writer;
|
168
|
+
<a name="l00153"></a>00153 pid_t pid;
|
169
|
+
<a name="l00154"></a>00154 <span class="keyword">public</span>:
|
170
|
+
<a name="l00155"></a>00155 RemoteSession(SharedDataPtr data, pid_t pid, <span class="keywordtype">int</span> <span class="keywordtype">id</span>, <span class="keywordtype">int</span> reader, <span class="keywordtype">int</span> writer) {
|
171
|
+
<a name="l00156"></a>00156 this->data = data;
|
172
|
+
<a name="l00157"></a>00157 this->pid = pid;
|
173
|
+
<a name="l00158"></a>00158 this-><span class="keywordtype">id</span> = id;
|
174
|
+
<a name="l00159"></a>00159 this->reader = reader;
|
175
|
+
<a name="l00160"></a>00160 this->writer = writer;
|
176
|
+
<a name="l00161"></a>00161 }
|
177
|
+
<a name="l00162"></a>00162
|
178
|
+
<a name="l00163"></a>00163 <span class="keyword">virtual</span> ~RemoteSession() {
|
179
|
+
<a name="l00164"></a>00164 closeReader();
|
180
|
+
<a name="l00165"></a>00165 closeWriter();
|
181
|
+
<a name="l00166"></a>00166 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a>(data->server).write(<span class="stringliteral">"close"</span>, <a class="code" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString</a>(<span class="keywordtype">id</span>).c_str(), NULL);
|
182
|
+
<a name="l00167"></a>00167 }
|
183
|
+
<a name="l00168"></a>00168
|
184
|
+
<a name="l00169"></a>00169 <span class="keyword">virtual</span> <span class="keywordtype">int</span> getReader()<span class="keyword"> const </span>{
|
185
|
+
<a name="l00170"></a>00170 <span class="keywordflow">return</span> reader;
|
186
|
+
<a name="l00171"></a>00171 }
|
187
|
+
<a name="l00172"></a>00172
|
188
|
+
<a name="l00173"></a>00173 <span class="keyword">virtual</span> <span class="keywordtype">void</span> closeReader() {
|
189
|
+
<a name="l00174"></a>00174 <span class="keywordflow">if</span> (reader != -1) {
|
190
|
+
<a name="l00175"></a>00175 close(reader);
|
191
|
+
<a name="l00176"></a>00176 reader = -1;
|
192
|
+
<a name="l00177"></a>00177 }
|
193
|
+
<a name="l00178"></a>00178 }
|
194
|
+
<a name="l00179"></a>00179
|
195
|
+
<a name="l00180"></a>00180 <span class="keyword">virtual</span> <span class="keywordtype">int</span> getWriter()<span class="keyword"> const </span>{
|
196
|
+
<a name="l00181"></a>00181 <span class="keywordflow">return</span> writer;
|
197
|
+
<a name="l00182"></a>00182 }
|
198
|
+
<a name="l00183"></a>00183
|
199
|
+
<a name="l00184"></a>00184 <span class="keyword">virtual</span> <span class="keywordtype">void</span> closeWriter() {
|
200
|
+
<a name="l00185"></a>00185 <span class="keywordflow">if</span> (writer != -1) {
|
201
|
+
<a name="l00186"></a>00186 close(writer);
|
202
|
+
<a name="l00187"></a>00187 writer = -1;
|
203
|
+
<a name="l00188"></a>00188 }
|
204
|
+
<a name="l00189"></a>00189 }
|
205
|
+
<a name="l00190"></a>00190
|
206
|
+
<a name="l00191"></a>00191 <span class="keyword">virtual</span> pid_t getPid()<span class="keyword"> const </span>{
|
207
|
+
<a name="l00192"></a>00192 <span class="keywordflow">return</span> pid;
|
208
|
+
<a name="l00193"></a>00193 }
|
209
|
+
<a name="l00194"></a>00194 };
|
210
|
+
<a name="l00195"></a>00195 <span class="comment"></span>
|
211
|
+
<a name="l00196"></a>00196 <span class="comment"> /**</span>
|
212
|
+
<a name="l00197"></a>00197 <span class="comment"> * An ApplicationPool implementation that works together with ApplicationPoolServer.</span>
|
213
|
+
<a name="l00198"></a>00198 <span class="comment"> * It doesn't do much by itself, its job is mostly to forward queries/commands to</span>
|
214
|
+
<a name="l00199"></a>00199 <span class="comment"> * the server and returning the result. Most of the logic is in the server.</span>
|
215
|
+
<a name="l00200"></a>00200 <span class="comment"> */</span>
|
216
|
+
<a name="l00201"></a>00201 <span class="keyword">class </span>Client: <span class="keyword">public</span> <a class="code" href="classPassenger_1_1ApplicationPool.html" title="A persistent pool of Applications.">ApplicationPool</a> {
|
217
|
+
<a name="l00202"></a>00202 <span class="keyword">private</span>:
|
218
|
+
<a name="l00203"></a>00203 SharedDataPtr data;
|
219
|
+
<a name="l00204"></a>00204
|
220
|
+
<a name="l00205"></a>00205 <span class="keyword">public</span>:<span class="comment"></span>
|
221
|
+
<a name="l00206"></a>00206 <span class="comment"> /**</span>
|
222
|
+
<a name="l00207"></a>00207 <span class="comment"> * Create a new Client.</span>
|
223
|
+
<a name="l00208"></a>00208 <span class="comment"> *</span>
|
224
|
+
<a name="l00209"></a>00209 <span class="comment"> * @param sock The newly established socket connection with the ApplicationPoolServer.</span>
|
225
|
+
<a name="l00210"></a>00210 <span class="comment"> */</span>
|
226
|
+
<a name="l00211"></a>00211 Client(<span class="keywordtype">int</span> sock) {
|
227
|
+
<a name="l00212"></a>00212 data = <a class="code" href="group__Support.html#g41b6c4a82fed72531a147de0505a8396" title="Convenience shortcut for creating a shared_ptr.">ptr</a>(<span class="keyword">new</span> SharedData());
|
228
|
+
<a name="l00213"></a>00213 data->server = sock;
|
229
|
+
<a name="l00214"></a>00214 }
|
230
|
+
<a name="l00215"></a>00215
|
231
|
+
<a name="l00216"></a>00216 <span class="keyword">virtual</span> <span class="keywordtype">void</span> clear() {
|
232
|
+
<a name="l00217"></a>00217 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(data->server);
|
233
|
+
<a name="l00218"></a>00218 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"clear"</span>, NULL);
|
234
|
+
<a name="l00219"></a>00219 }
|
235
|
+
<a name="l00220"></a>00220
|
236
|
+
<a name="l00221"></a>00221 <span class="keyword">virtual</span> <span class="keywordtype">void</span> setMaxIdleTime(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> seconds) {
|
237
|
+
<a name="l00222"></a>00222 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(data->server);
|
238
|
+
<a name="l00223"></a>00223 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"setMaxIdleTime"</span>, <a class="code" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString</a>(seconds).c_str(), NULL);
|
239
|
+
<a name="l00224"></a>00224 }
|
240
|
+
<a name="l00225"></a>00225
|
241
|
+
<a name="l00226"></a>00226 <span class="keyword">virtual</span> <span class="keywordtype">void</span> setMax(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> max) {
|
242
|
+
<a name="l00227"></a>00227 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(data->server);
|
243
|
+
<a name="l00228"></a>00228 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"setMax"</span>, <a class="code" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString</a>(max).c_str(), NULL);
|
244
|
+
<a name="l00229"></a>00229 }
|
245
|
+
<a name="l00230"></a>00230
|
246
|
+
<a name="l00231"></a>00231 <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getActive()<span class="keyword"> const </span>{
|
247
|
+
<a name="l00232"></a>00232 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(data->server);
|
248
|
+
<a name="l00233"></a>00233 vector<string> args;
|
249
|
+
<a name="l00234"></a>00234
|
250
|
+
<a name="l00235"></a>00235 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"getActive"</span>, NULL);
|
251
|
+
<a name="l00236"></a>00236 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#129659b60d1a663337873d2af944431e" title="Read an array message from the underlying file descriptor.">read</a>(args);
|
252
|
+
<a name="l00237"></a>00237 <span class="keywordflow">return</span> <a class="code" href="group__Support.html#g73b17b509ee44938a56bf16cbf82fb48" title="Converts the given string to an integer.">atoi</a>(args[0].c_str());
|
253
|
+
<a name="l00238"></a>00238 }
|
254
|
+
<a name="l00239"></a>00239
|
255
|
+
<a name="l00240"></a>00240 <span class="keyword">virtual</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> getCount()<span class="keyword"> const </span>{
|
256
|
+
<a name="l00241"></a>00241 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(data->server);
|
257
|
+
<a name="l00242"></a>00242 vector<string> args;
|
258
|
+
<a name="l00243"></a>00243
|
259
|
+
<a name="l00244"></a>00244 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"getCount"</span>, NULL);
|
260
|
+
<a name="l00245"></a>00245 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#129659b60d1a663337873d2af944431e" title="Read an array message from the underlying file descriptor.">read</a>(args);
|
261
|
+
<a name="l00246"></a>00246 <span class="keywordflow">return</span> <a class="code" href="group__Support.html#g73b17b509ee44938a56bf16cbf82fb48" title="Converts the given string to an integer.">atoi</a>(args[0].c_str());
|
262
|
+
<a name="l00247"></a>00247 }
|
263
|
+
<a name="l00248"></a>00248
|
264
|
+
<a name="l00249"></a>00249 <span class="keyword">virtual</span> pid_t getSpawnServerPid()<span class="keyword"> const </span>{
|
265
|
+
<a name="l00250"></a>00250 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(data->server);
|
266
|
+
<a name="l00251"></a>00251 vector<string> args;
|
267
|
+
<a name="l00252"></a>00252
|
268
|
+
<a name="l00253"></a>00253 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"getSpawnServerPid"</span>, NULL);
|
269
|
+
<a name="l00254"></a>00254 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#129659b60d1a663337873d2af944431e" title="Read an array message from the underlying file descriptor.">read</a>(args);
|
270
|
+
<a name="l00255"></a>00255 <span class="keywordflow">return</span> <a class="code" href="group__Support.html#g73b17b509ee44938a56bf16cbf82fb48" title="Converts the given string to an integer.">atoi</a>(args[0].c_str());
|
271
|
+
<a name="l00256"></a>00256 }
|
272
|
+
<a name="l00257"></a>00257
|
273
|
+
<a name="l00258"></a>00258 <span class="keyword">virtual</span> <a class="code" href="classPassenger_1_1Application.html#d14f673494991460b16246a527ad8ad9" title="Convenient alias for Session smart pointer.">Application::SessionPtr</a> <span class="keyword">get</span>(<span class="keyword">const</span> <span class="keywordtype">string</span> &appRoot, <span class="keywordtype">bool</span> lowerPrivilege = <span class="keyword">true</span>, <span class="keyword">const</span> <span class="keywordtype">string</span> &lowestUser = <span class="stringliteral">"nobody"</span>) {
|
274
|
+
<a name="l00259"></a>00259 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(data->server);
|
275
|
+
<a name="l00260"></a>00260 vector<string> args;
|
276
|
+
<a name="l00261"></a>00261 <span class="keywordtype">int</span> reader, writer;
|
277
|
+
<a name="l00262"></a>00262
|
278
|
+
<a name="l00263"></a>00263 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"get"</span>, appRoot.c_str(),
|
279
|
+
<a name="l00264"></a>00264 (lowerPrivilege) ? <span class="stringliteral">"true"</span> : <span class="stringliteral">"false"</span>,
|
280
|
+
<a name="l00265"></a>00265 lowestUser.c_str(), NULL);
|
281
|
+
<a name="l00266"></a>00266 <span class="keywordflow">if</span> (!channel.<a class="code" href="classPassenger_1_1MessageChannel.html#129659b60d1a663337873d2af944431e" title="Read an array message from the underlying file descriptor.">read</a>(args)) {
|
282
|
+
<a name="l00267"></a>00267 <span class="keywordflow">throw</span> <a class="code" href="classPassenger_1_1IOException.html" title="Represents an error that occured during an I/O operation.">IOException</a>(<span class="stringliteral">"The ApplicationPool server unexpectedly closed the connection."</span>);
|
283
|
+
<a name="l00268"></a>00268 }
|
284
|
+
<a name="l00269"></a>00269 <span class="keywordflow">if</span> (args[0] == <span class="stringliteral">"ok"</span>) {
|
285
|
+
<a name="l00270"></a>00270 reader = channel.<a class="code" href="classPassenger_1_1MessageChannel.html#1561b7e4a0f4d39ea431f456e5655488" title="Receive a file descriptor, which had been passed over the underlying file descriptor...">readFileDescriptor</a>();
|
286
|
+
<a name="l00271"></a>00271 writer = channel.<a class="code" href="classPassenger_1_1MessageChannel.html#1561b7e4a0f4d39ea431f456e5655488" title="Receive a file descriptor, which had been passed over the underlying file descriptor...">readFileDescriptor</a>();
|
287
|
+
<a name="l00272"></a>00272 <span class="keywordflow">return</span> <a class="code" href="group__Support.html#g41b6c4a82fed72531a147de0505a8396" title="Convenience shortcut for creating a shared_ptr.">ptr</a>(<span class="keyword">new</span> RemoteSession(data, <a class="code" href="group__Support.html#g73b17b509ee44938a56bf16cbf82fb48" title="Converts the given string to an integer.">atoi</a>(args[1]), <a class="code" href="group__Support.html#g73b17b509ee44938a56bf16cbf82fb48" title="Converts the given string to an integer.">atoi</a>(args[2]), reader, writer));
|
288
|
+
<a name="l00273"></a>00273 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (args[0] == <span class="stringliteral">"SpawnException"</span>) {
|
289
|
+
<a name="l00274"></a>00274 <span class="keywordflow">if</span> (args[2] == <span class="stringliteral">"true"</span>) {
|
290
|
+
<a name="l00275"></a>00275 <span class="keywordtype">string</span> errorPage;
|
291
|
+
<a name="l00276"></a>00276
|
292
|
+
<a name="l00277"></a>00277 <span class="keywordflow">if</span> (!channel.<a class="code" href="classPassenger_1_1MessageChannel.html#4ce6a0e751b5e3563bee583c231569bc" title="Read a scalar message from the underlying file descriptor.">readScalar</a>(errorPage)) {
|
293
|
+
<a name="l00278"></a>00278 <span class="keywordflow">throw</span> <a class="code" href="classPassenger_1_1IOException.html" title="Represents an error that occured during an I/O operation.">IOException</a>(<span class="stringliteral">"The ApplicationPool server unexpectedly closed the connection."</span>);
|
294
|
+
<a name="l00279"></a>00279 }
|
295
|
+
<a name="l00280"></a>00280 <span class="keywordflow">throw</span> <a class="code" href="classPassenger_1_1SpawnException.html" title="Thrown when SpawnManager or ApplicationPool fails to spawn an application instance...">SpawnException</a>(args[1], errorPage);
|
296
|
+
<a name="l00281"></a>00281 } <span class="keywordflow">else</span> {
|
297
|
+
<a name="l00282"></a>00282 <span class="keywordflow">throw</span> <a class="code" href="classPassenger_1_1SpawnException.html" title="Thrown when SpawnManager or ApplicationPool fails to spawn an application instance...">SpawnException</a>(args[1]);
|
298
|
+
<a name="l00283"></a>00283 }
|
299
|
+
<a name="l00284"></a>00284 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (args[0] == <span class="stringliteral">"IOException"</span>) {
|
300
|
+
<a name="l00285"></a>00285 <span class="keywordflow">throw</span> <a class="code" href="classPassenger_1_1IOException.html" title="Represents an error that occured during an I/O operation.">IOException</a>(args[1]);
|
301
|
+
<a name="l00286"></a>00286 } <span class="keywordflow">else</span> {
|
302
|
+
<a name="l00287"></a>00287 <span class="keywordflow">throw</span> <a class="code" href="classPassenger_1_1IOException.html" title="Represents an error that occured during an I/O operation.">IOException</a>(<span class="stringliteral">"The ApplicationPool server returned an unknown message."</span>);
|
303
|
+
<a name="l00288"></a>00288 }
|
304
|
+
<a name="l00289"></a>00289 }
|
305
|
+
<a name="l00290"></a>00290 };
|
306
|
+
<a name="l00291"></a>00291 <span class="comment"></span>
|
307
|
+
<a name="l00292"></a>00292 <span class="comment"> /**</span>
|
308
|
+
<a name="l00293"></a>00293 <span class="comment"> * Contains information about exactly one client.</span>
|
309
|
+
<a name="l00294"></a>00294 <span class="comment"> */</span>
|
310
|
+
<a name="l00295"></a>00295 <span class="keyword">struct </span>ClientInfo {<span class="comment"></span>
|
311
|
+
<a name="l00296"></a>00296 <span class="comment"> /** The connection to the client. */</span>
|
312
|
+
<a name="l00297"></a>00297 <span class="keywordtype">int</span> fd;<span class="comment"></span>
|
313
|
+
<a name="l00298"></a>00298 <span class="comment"> /** The thread which handles the client. */</span>
|
314
|
+
<a name="l00299"></a>00299 thread *thr;
|
315
|
+
<a name="l00300"></a>00300 <span class="keywordtype">bool</span> detached;
|
316
|
+
<a name="l00301"></a>00301
|
317
|
+
<a name="l00302"></a>00302 ClientInfo() {
|
318
|
+
<a name="l00303"></a>00303 detached = <span class="keyword">false</span>;
|
319
|
+
<a name="l00304"></a>00304 }
|
320
|
+
<a name="l00305"></a>00305
|
321
|
+
<a name="l00306"></a>00306 <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1ApplicationPoolServer.html#b13957e32ae8ca36ba85f2e6ffefd5ce" title="Detach the server by freeing up some server resources such as file descriptors.">detach</a>() {
|
322
|
+
<a name="l00307"></a>00307 detached = <span class="keyword">true</span>;
|
323
|
+
<a name="l00308"></a>00308 close(fd);
|
324
|
+
<a name="l00309"></a>00309 fd = -1;
|
325
|
+
<a name="l00310"></a>00310 }
|
326
|
+
<a name="l00311"></a>00311
|
327
|
+
<a name="l00312"></a>00312 ~ClientInfo() {
|
328
|
+
<a name="l00313"></a>00313 <span class="comment">/* For some reason, joining or deleting (detaching)</span>
|
329
|
+
<a name="l00314"></a>00314 <span class="comment"> * the thread after fork() will cause a segfault.</span>
|
330
|
+
<a name="l00315"></a>00315 <span class="comment"> * I haven't figured out why that happens, so for now</span>
|
331
|
+
<a name="l00316"></a>00316 <span class="comment"> * I'll just ignore the thread (which isn't running</span>
|
332
|
+
<a name="l00317"></a>00317 <span class="comment"> * anyway).</span>
|
333
|
+
<a name="l00318"></a>00318 <span class="comment"> */</span>
|
334
|
+
<a name="l00319"></a>00319 <span class="keywordflow">if</span> (!detached) {
|
335
|
+
<a name="l00320"></a>00320 close(fd);
|
336
|
+
<a name="l00321"></a>00321 <span class="keyword">delete</span> thr;
|
337
|
+
<a name="l00322"></a>00322 }
|
338
|
+
<a name="l00323"></a>00323 }
|
339
|
+
<a name="l00324"></a>00324 };
|
340
|
+
<a name="l00325"></a>00325
|
341
|
+
<a name="l00326"></a>00326 <span class="keyword">typedef</span> shared_ptr<ClientInfo> ClientInfoPtr;
|
342
|
+
<a name="l00327"></a>00327
|
343
|
+
<a name="l00328"></a>00328 <a class="code" href="classPassenger_1_1StandardApplicationPool.html" title="A standard implementation of ApplicationPool for single-process environments.">StandardApplicationPool</a> pool;
|
344
|
+
<a name="l00329"></a>00329 <span class="keywordtype">int</span> serverSocket;
|
345
|
+
<a name="l00330"></a>00330 <span class="keywordtype">int</span> connectSocket;
|
346
|
+
<a name="l00331"></a>00331 <span class="keywordtype">bool</span> done, detached;
|
347
|
+
<a name="l00332"></a>00332
|
348
|
+
<a name="l00333"></a>00333 mutex lock;
|
349
|
+
<a name="l00334"></a>00334 thread *serverThread;
|
350
|
+
<a name="l00335"></a>00335 set<ClientInfoPtr> clients;
|
351
|
+
<a name="l00336"></a>00336
|
352
|
+
<a name="l00337"></a>00337 <span class="comment">/* TODO: the current design makes it possible to leak file descriptors.</span>
|
353
|
+
<a name="l00338"></a>00338 <span class="comment"> * For example, suppose that a fork() happens right after</span>
|
354
|
+
<a name="l00339"></a>00339 <span class="comment"> * serverThreadMainLoop() created a socketpair. Uh-oh. The problem is that</span>
|
355
|
+
<a name="l00340"></a>00340 <span class="comment"> * Apache can fork no matter what the threads are currently doing.</span>
|
356
|
+
<a name="l00341"></a>00341 <span class="comment"> *</span>
|
357
|
+
<a name="l00342"></a>00342 <span class="comment"> * This problem can be solved by running the server thread main loop in</span>
|
358
|
+
<a name="l00343"></a>00343 <span class="comment"> * its own process, instead of a thread in the Apache control process.</span>
|
359
|
+
<a name="l00344"></a>00344 <span class="comment"> *</span>
|
360
|
+
<a name="l00345"></a>00345 <span class="comment"> * This situation is a corner case though, and doesn't happen very often.</span>
|
361
|
+
<a name="l00346"></a>00346 <span class="comment"> * When it does happen, the problem isn't that great: an Apache worker</span>
|
362
|
+
<a name="l00347"></a>00347 <span class="comment"> * process will eventually get killed, thus freeing all its file</span>
|
363
|
+
<a name="l00348"></a>00348 <span class="comment"> * descriptors. So it should be acceptable to fix this problem in</span>
|
364
|
+
<a name="l00349"></a>00349 <span class="comment"> * a post-1.0.1 release.</span>
|
365
|
+
<a name="l00350"></a>00350 <span class="comment"> */</span>
|
366
|
+
<a name="l00351"></a>00351 <span class="comment"></span>
|
367
|
+
<a name="l00352"></a>00352 <span class="comment"> /**</span>
|
368
|
+
<a name="l00353"></a>00353 <span class="comment"> * The entry point of the server thread which sets up private connections.</span>
|
369
|
+
<a name="l00354"></a>00354 <span class="comment"> * See the class overview's implementation notes for details.</span>
|
370
|
+
<a name="l00355"></a>00355 <span class="comment"> */</span>
|
371
|
+
<a name="l00356"></a>00356 <span class="keywordtype">void</span> serverThreadMainLoop() {
|
372
|
+
<a name="l00357"></a>00357 <span class="keywordflow">while</span> (!done) {
|
373
|
+
<a name="l00358"></a>00358 <span class="keywordtype">int</span> fds[2], ret;
|
374
|
+
<a name="l00359"></a>00359 <span class="keywordtype">char</span> x;
|
375
|
+
<a name="l00360"></a>00360
|
376
|
+
<a name="l00361"></a>00361 <span class="comment">// The received data only serves to wake up the server socket,</span>
|
377
|
+
<a name="l00362"></a>00362 <span class="comment">// and is not important.</span>
|
378
|
+
<a name="l00363"></a>00363 <span class="keywordflow">do</span> {
|
379
|
+
<a name="l00364"></a>00364 ret = read(serverSocket, &x, 1);
|
380
|
+
<a name="l00365"></a>00365 } <span class="keywordflow">while</span> (ret == -1 && errno == EINTR);
|
381
|
+
<a name="l00366"></a>00366 <span class="keywordflow">if</span> (ret == 0) {
|
382
|
+
<a name="l00367"></a>00367 <span class="keywordflow">break</span>;
|
383
|
+
<a name="l00368"></a>00368 }
|
384
|
+
<a name="l00369"></a>00369
|
385
|
+
<a name="l00370"></a>00370 <span class="comment">// Incoming connect request.</span>
|
386
|
+
<a name="l00371"></a>00371 <span class="keywordflow">do</span> {
|
387
|
+
<a name="l00372"></a>00372 ret = socketpair(AF_UNIX, SOCK_STREAM, 0, fds);
|
388
|
+
<a name="l00373"></a>00373 } <span class="keywordflow">while</span> (ret == -1 && errno == EINTR);
|
389
|
+
<a name="l00374"></a>00374 <span class="keywordflow">if</span> (ret == -1) {
|
390
|
+
<a name="l00375"></a>00375 <span class="keywordtype">int</span> e = errno;
|
391
|
+
<a name="l00376"></a>00376 P_ERROR(<span class="stringliteral">"Cannot create an anonymous Unix socket: "</span> <<
|
392
|
+
<a name="l00377"></a>00377 strerror(e) << <span class="stringliteral">" ("</span> << e << <span class="stringliteral">") --- aborting!"</span>);
|
393
|
+
<a name="l00378"></a>00378 abort();
|
394
|
+
<a name="l00379"></a>00379
|
395
|
+
<a name="l00380"></a>00380 <span class="comment">// Shut up compiler warning.</span>
|
396
|
+
<a name="l00381"></a>00381 <span class="keywordtype">bool</span> x = <span class="keyword">false</span>;
|
397
|
+
<a name="l00382"></a>00382 <span class="keywordflow">if</span> (x) {
|
398
|
+
<a name="l00383"></a>00383 printf(<span class="stringliteral">"%d"</span>, e);
|
399
|
+
<a name="l00384"></a>00384 }
|
400
|
+
<a name="l00385"></a>00385 }
|
401
|
+
<a name="l00386"></a>00386
|
402
|
+
<a name="l00387"></a>00387 <span class="keywordflow">try</span> {
|
403
|
+
<a name="l00388"></a>00388 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a>(serverSocket).writeFileDescriptor(fds[1]);
|
404
|
+
<a name="l00389"></a>00389 <span class="keywordflow">do</span> {
|
405
|
+
<a name="l00390"></a>00390 ret = close(fds[1]);
|
406
|
+
<a name="l00391"></a>00391 } <span class="keywordflow">while</span> (ret == -1 && errno == EINTR);
|
407
|
+
<a name="l00392"></a>00392 } <span class="keywordflow">catch</span> (<a class="code" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a> &e) {
|
408
|
+
<a name="l00393"></a>00393 P_ERROR(<span class="stringliteral">"Cannot send a file descriptor: "</span> << e.<a class="code" href="classPassenger_1_1SystemException.html#0ef41d755fea2c9b1db2252e7c418dc8" title="Returns the system&#39;s error message.">sys</a>() <<
|
409
|
+
<a name="l00394"></a>00394 <span class="stringliteral">" --- aborting!"</span>);
|
410
|
+
<a name="l00395"></a>00395 abort();
|
411
|
+
<a name="l00396"></a>00396 } <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception &e) {
|
412
|
+
<a name="l00397"></a>00397 P_ERROR(<span class="stringliteral">"Cannot send a file descriptor: "</span> << e.what() <<
|
413
|
+
<a name="l00398"></a>00398 <span class="stringliteral">" --- aborting!"</span>);
|
414
|
+
<a name="l00399"></a>00399 abort();
|
415
|
+
<a name="l00400"></a>00400 }
|
416
|
+
<a name="l00401"></a>00401
|
417
|
+
<a name="l00402"></a>00402 ClientInfoPtr info(<span class="keyword">new</span> ClientInfo());
|
418
|
+
<a name="l00403"></a>00403 info->fd = fds[0];
|
419
|
+
<a name="l00404"></a>00404 info->thr = <span class="keyword">new</span> thread(bind(&ApplicationPoolServer::clientThreadMainLoop, <span class="keyword">this</span>, info));
|
420
|
+
<a name="l00405"></a>00405 mutex::scoped_lock l(lock);
|
421
|
+
<a name="l00406"></a>00406 clients.insert(info);
|
422
|
+
<a name="l00407"></a>00407 }
|
423
|
+
<a name="l00408"></a>00408 }
|
424
|
+
<a name="l00409"></a>00409 <span class="comment"></span>
|
425
|
+
<a name="l00410"></a>00410 <span class="comment"> /**</span>
|
426
|
+
<a name="l00411"></a>00411 <span class="comment"> * The entry point of a thread which handles exactly one client.</span>
|
427
|
+
<a name="l00412"></a>00412 <span class="comment"> */</span>
|
428
|
+
<a name="l00413"></a>00413 <span class="keywordtype">void</span> clientThreadMainLoop(ClientInfoPtr client) {
|
429
|
+
<a name="l00414"></a>00414 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(client->fd);
|
430
|
+
<a name="l00415"></a>00415 vector<string> args;
|
431
|
+
<a name="l00416"></a>00416 map<int, Application::SessionPtr> sessions;
|
432
|
+
<a name="l00417"></a>00417 <span class="keywordtype">int</span> lastID = 0;
|
433
|
+
<a name="l00418"></a>00418
|
434
|
+
<a name="l00419"></a>00419 <span class="keywordflow">try</span> {
|
435
|
+
<a name="l00420"></a>00420 <span class="keywordflow">while</span> (!done) {
|
436
|
+
<a name="l00421"></a>00421 <span class="keywordflow">if</span> (!channel.<a class="code" href="classPassenger_1_1MessageChannel.html#129659b60d1a663337873d2af944431e" title="Read an array message from the underlying file descriptor.">read</a>(args)) {
|
437
|
+
<a name="l00422"></a>00422 <span class="keywordflow">break</span>;
|
438
|
+
<a name="l00423"></a>00423 }
|
439
|
+
<a name="l00424"></a>00424
|
440
|
+
<a name="l00425"></a>00425 P_TRACE(3, <span class="stringliteral">"Client "</span> << <span class="keyword">this</span> << <span class="stringliteral">": received message: "</span> <<
|
441
|
+
<a name="l00426"></a>00426 <a class="code" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString</a>(args));
|
442
|
+
<a name="l00427"></a>00427 <span class="keywordflow">if</span> (args[0] == <span class="stringliteral">"get"</span> && args.size() == 4) {
|
443
|
+
<a name="l00428"></a>00428 <a class="code" href="classPassenger_1_1Application.html#d14f673494991460b16246a527ad8ad9" title="Convenient alias for Session smart pointer.">Application::SessionPtr</a> session;
|
444
|
+
<a name="l00429"></a>00429 <span class="keywordtype">bool</span> failed = <span class="keyword">false</span>;
|
445
|
+
<a name="l00430"></a>00430 <span class="keywordflow">try</span> {
|
446
|
+
<a name="l00431"></a>00431 session = pool.<a class="code" href="classPassenger_1_1StandardApplicationPool.html#45cfa1878f1018f1626669cad9885caf" title="Open a new session with the application specified by appRoot.">get</a>(args[1], args[2] == <span class="stringliteral">"true"</span>, args[3]);
|
447
|
+
<a name="l00432"></a>00432 sessions[lastID] = session;
|
448
|
+
<a name="l00433"></a>00433 lastID++;
|
449
|
+
<a name="l00434"></a>00434 } <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classPassenger_1_1SpawnException.html" title="Thrown when SpawnManager or ApplicationPool fails to spawn an application instance...">SpawnException</a> &e) {
|
450
|
+
<a name="l00435"></a>00435 <span class="keywordflow">if</span> (e.<a class="code" href="classPassenger_1_1SpawnException.html#e65dc272e183fd9e5637a4091cc6bbf4" title="Check whether an error page is available.">hasErrorPage</a>()) {
|
451
|
+
<a name="l00436"></a>00436 P_TRACE(3, <span class="stringliteral">"Client "</span> << <span class="keyword">this</span> << <span class="stringliteral">": SpawnException "</span>
|
452
|
+
<a name="l00437"></a>00437 <span class="stringliteral">"occured (with error page)"</span>);
|
453
|
+
<a name="l00438"></a>00438 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"SpawnException"</span>, e.<a class="code" href="classPassenger_1_1SpawnException.html#d2da180f89a43423a4b37248249972ff">what</a>(), <span class="stringliteral">"true"</span>, NULL);
|
454
|
+
<a name="l00439"></a>00439 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#44e01a783c48abadeea0d915b9893bfb" title="Send a scalar message over the underlying file descriptor.">writeScalar</a>(e.<a class="code" href="classPassenger_1_1SpawnException.html#6f675a37edd7070875d0744e7dd010a1" title="Return the error page content.">getErrorPage</a>());
|
455
|
+
<a name="l00440"></a>00440 } <span class="keywordflow">else</span> {
|
456
|
+
<a name="l00441"></a>00441 P_TRACE(3, <span class="stringliteral">"Client "</span> << <span class="keyword">this</span> << <span class="stringliteral">": SpawnException "</span>
|
457
|
+
<a name="l00442"></a>00442 <span class="stringliteral">"occured (no error page)"</span>);
|
458
|
+
<a name="l00443"></a>00443 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"SpawnException"</span>, e.<a class="code" href="classPassenger_1_1SpawnException.html#d2da180f89a43423a4b37248249972ff">what</a>(), <span class="stringliteral">"false"</span>, NULL);
|
459
|
+
<a name="l00444"></a>00444 }
|
460
|
+
<a name="l00445"></a>00445 failed = <span class="keyword">true</span>;
|
461
|
+
<a name="l00446"></a>00446 } <span class="keywordflow">catch</span> (<span class="keyword">const</span> <a class="code" href="classPassenger_1_1IOException.html" title="Represents an error that occured during an I/O operation.">IOException</a> &e) {
|
462
|
+
<a name="l00447"></a>00447 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"IOException"</span>, e.<a class="code" href="classPassenger_1_1IOException.html#1b65d0fdb9bc5136f5b7df759c14768a">what</a>(), NULL);
|
463
|
+
<a name="l00448"></a>00448 failed = <span class="keyword">true</span>;
|
464
|
+
<a name="l00449"></a>00449 }
|
465
|
+
<a name="l00450"></a>00450 <span class="keywordflow">if</span> (!failed) {
|
466
|
+
<a name="l00451"></a>00451 <span class="keywordflow">try</span> {
|
467
|
+
<a name="l00452"></a>00452 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<span class="stringliteral">"ok"</span>, <a class="code" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString</a>(session->getPid()).c_str(),
|
468
|
+
<a name="l00453"></a>00453 <a class="code" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString</a>(lastID - 1).c_str(), NULL);
|
469
|
+
<a name="l00454"></a>00454 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#73e3f3cda384c085a2af0e820ccd3e98" title="Pass a file descriptor.">writeFileDescriptor</a>(session->getReader());
|
470
|
+
<a name="l00455"></a>00455 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#73e3f3cda384c085a2af0e820ccd3e98" title="Pass a file descriptor.">writeFileDescriptor</a>(session->getWriter());
|
471
|
+
<a name="l00456"></a>00456 session->closeReader();
|
472
|
+
<a name="l00457"></a>00457 session->closeWriter();
|
473
|
+
<a name="l00458"></a>00458 } <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception &) {
|
474
|
+
<a name="l00459"></a>00459 P_TRACE(3, <span class="stringliteral">"Client "</span> << <span class="keyword">this</span> << <span class="stringliteral">": something went wrong "</span>
|
475
|
+
<a name="l00460"></a>00460 <span class="stringliteral">"while sending 'ok' back to the client."</span>);
|
476
|
+
<a name="l00461"></a>00461 sessions.erase(lastID - 1);
|
477
|
+
<a name="l00462"></a>00462 <span class="keywordflow">throw</span>;
|
478
|
+
<a name="l00463"></a>00463 }
|
479
|
+
<a name="l00464"></a>00464 }
|
480
|
+
<a name="l00465"></a>00465
|
481
|
+
<a name="l00466"></a>00466 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (args[0] == <span class="stringliteral">"close"</span> && args.size() == 2) {
|
482
|
+
<a name="l00467"></a>00467 sessions.erase(<a class="code" href="group__Support.html#g73b17b509ee44938a56bf16cbf82fb48" title="Converts the given string to an integer.">atoi</a>(args[1]));
|
483
|
+
<a name="l00468"></a>00468
|
484
|
+
<a name="l00469"></a>00469 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (args[0] == <span class="stringliteral">"clear"</span> && args.size() == 1) {
|
485
|
+
<a name="l00470"></a>00470 pool.<a class="code" href="classPassenger_1_1StandardApplicationPool.html#bcf8faeb4f431ae07ea0e20270661d08" title="Clear all application instances that are currently in the pool.">clear</a>();
|
486
|
+
<a name="l00471"></a>00471
|
487
|
+
<a name="l00472"></a>00472 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (args[0] == <span class="stringliteral">"setMaxIdleTime"</span> && args.size() == 2) {
|
488
|
+
<a name="l00473"></a>00473 pool.<a class="code" href="classPassenger_1_1StandardApplicationPool.html#3cf74662b3d74626d67c7765c59a366a">setMaxIdleTime</a>(<a class="code" href="group__Support.html#g73b17b509ee44938a56bf16cbf82fb48" title="Converts the given string to an integer.">atoi</a>(args[1]));
|
489
|
+
<a name="l00474"></a>00474
|
490
|
+
<a name="l00475"></a>00475 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (args[0] == <span class="stringliteral">"setMax"</span> && args.size() == 2) {
|
491
|
+
<a name="l00476"></a>00476 pool.<a class="code" href="classPassenger_1_1StandardApplicationPool.html#04ef8c92da189520ad2022f4f82e9553" title="Set a hard limit on the number of application instances that this ApplicationPool...">setMax</a>(<a class="code" href="group__Support.html#g73b17b509ee44938a56bf16cbf82fb48" title="Converts the given string to an integer.">atoi</a>(args[1]));
|
492
|
+
<a name="l00477"></a>00477
|
493
|
+
<a name="l00478"></a>00478 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (args[0] == <span class="stringliteral">"getActive"</span> && args.size() == 1) {
|
494
|
+
<a name="l00479"></a>00479 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<a class="code" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString</a>(pool.<a class="code" href="classPassenger_1_1StandardApplicationPool.html#7773c4a3dfbd88eac72401d063831788" title="Get the number of active applications in the pool.">getActive</a>()).c_str(), NULL);
|
495
|
+
<a name="l00480"></a>00480
|
496
|
+
<a name="l00481"></a>00481 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (args[0] == <span class="stringliteral">"getCount"</span> && args.size() == 1) {
|
497
|
+
<a name="l00482"></a>00482 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<a class="code" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString</a>(pool.<a class="code" href="classPassenger_1_1StandardApplicationPool.html#cdbfe2b9ffacdab4438c879c2411bf02" title="Get the number of active applications in the pool.">getCount</a>()).c_str(), NULL);
|
498
|
+
<a name="l00483"></a>00483
|
499
|
+
<a name="l00484"></a>00484 } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (args[0] == <span class="stringliteral">"getSpawnServerPid"</span> && args.size() == 1) {
|
500
|
+
<a name="l00485"></a>00485 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#9ad7a978cf8409e01ab2f0a2b6be5a0a" title="Send an array message, which consists of the given elements, over the underlying...">write</a>(<a class="code" href="group__Support.html#gf6fab368d70c18fdf16bf5a24f630407" title="Convert anything to a string.">toString</a>(pool.<a class="code" href="classPassenger_1_1StandardApplicationPool.html#6955152d237920988d20297d2fff5660" title="Get the process ID of the spawn server that is used.">getSpawnServerPid</a>()).c_str(), NULL);
|
501
|
+
<a name="l00486"></a>00486
|
502
|
+
<a name="l00487"></a>00487 } <span class="keywordflow">else</span> {
|
503
|
+
<a name="l00488"></a>00488 <span class="keywordtype">string</span> name;
|
504
|
+
<a name="l00489"></a>00489 <span class="keywordflow">if</span> (args.empty()) {
|
505
|
+
<a name="l00490"></a>00490 name = <span class="stringliteral">"(null)"</span>;
|
506
|
+
<a name="l00491"></a>00491 } <span class="keywordflow">else</span> {
|
507
|
+
<a name="l00492"></a>00492 name = args[0];
|
508
|
+
<a name="l00493"></a>00493 }
|
509
|
+
<a name="l00494"></a>00494 P_WARN(<span class="stringliteral">"An ApplicationPoolServer client sent an invalid command: "</span>
|
510
|
+
<a name="l00495"></a>00495 << name << <span class="stringliteral">" ("</span> << args.size() << <span class="stringliteral">" elements)"</span>);
|
511
|
+
<a name="l00496"></a>00496 done = <span class="keyword">true</span>;
|
512
|
+
<a name="l00497"></a>00497 }
|
513
|
+
<a name="l00498"></a>00498 }
|
514
|
+
<a name="l00499"></a>00499 } <span class="keywordflow">catch</span> (<span class="keyword">const</span> exception &e) {
|
515
|
+
<a name="l00500"></a>00500 P_WARN(<span class="stringliteral">"Uncaught exception in ApplicationPoolServer client thread: "</span> <<
|
516
|
+
<a name="l00501"></a>00501 e.what());
|
517
|
+
<a name="l00502"></a>00502 }
|
518
|
+
<a name="l00503"></a>00503
|
519
|
+
<a name="l00504"></a>00504 mutex::scoped_lock l(lock);
|
520
|
+
<a name="l00505"></a>00505 clients.erase(client);
|
521
|
+
<a name="l00506"></a>00506 }
|
522
|
+
<a name="l00507"></a>00507
|
523
|
+
<a name="l00508"></a>00508 <span class="keyword">public</span>:<span class="comment"></span>
|
524
|
+
<a name="l00509"></a>00509 <span class="comment"> /**</span>
|
525
|
+
<a name="l00510"></a>00510 <span class="comment"> * Create a new ApplicationPoolServer object.</span>
|
526
|
+
<a name="l00511"></a>00511 <span class="comment"> *</span>
|
527
|
+
<a name="l00512"></a>00512 <span class="comment"> * @param spawnServerCommand The filename of the spawn server to use.</span>
|
528
|
+
<a name="l00513"></a>00513 <span class="comment"> * @param logFile Specify a log file that the spawn server should use.</span>
|
529
|
+
<a name="l00514"></a>00514 <span class="comment"> * Messages on its standard output and standard error channels</span>
|
530
|
+
<a name="l00515"></a>00515 <span class="comment"> * will be written to this log file. If an empty string is</span>
|
531
|
+
<a name="l00516"></a>00516 <span class="comment"> * specified, no log file will be used, and the spawn server</span>
|
532
|
+
<a name="l00517"></a>00517 <span class="comment"> * will use the same standard output/error channels as the</span>
|
533
|
+
<a name="l00518"></a>00518 <span class="comment"> * current process.</span>
|
534
|
+
<a name="l00519"></a>00519 <span class="comment"> * @param environment The RAILS_ENV environment that all RoR applications</span>
|
535
|
+
<a name="l00520"></a>00520 <span class="comment"> * should use. If an empty string is specified, the current value</span>
|
536
|
+
<a name="l00521"></a>00521 <span class="comment"> * of the RAILS_ENV environment variable will be used.</span>
|
537
|
+
<a name="l00522"></a>00522 <span class="comment"> * @param rubyCommand The Ruby interpreter's command.</span>
|
538
|
+
<a name="l00523"></a>00523 <span class="comment"> * @param user The user that the spawn manager should run as. This</span>
|
539
|
+
<a name="l00524"></a>00524 <span class="comment"> * parameter only has effect if the current process is</span>
|
540
|
+
<a name="l00525"></a>00525 <span class="comment"> * running as root. If the empty string is given, or if</span>
|
541
|
+
<a name="l00526"></a>00526 <span class="comment"> * the <tt>user</tt> is not a valid username, then</span>
|
542
|
+
<a name="l00527"></a>00527 <span class="comment"> * the spawn manager will be run as the current user.</span>
|
543
|
+
<a name="l00528"></a>00528 <span class="comment"> * @throws SystemException An error occured while trying to setup the spawn server</span>
|
544
|
+
<a name="l00529"></a>00529 <span class="comment"> * or the server socket.</span>
|
545
|
+
<a name="l00530"></a>00530 <span class="comment"> * @throws IOException The specified log file could not be opened.</span>
|
546
|
+
<a name="l00531"></a>00531 <span class="comment"> * @throws boost::thread_resource_error A threading resource could not be</span>
|
547
|
+
<a name="l00532"></a>00532 <span class="comment"> * allocated or initialized.</span>
|
548
|
+
<a name="l00533"></a>00533 <span class="comment"> */</span>
|
549
|
+
<a name="l00534"></a><a class="code" href="classPassenger_1_1ApplicationPoolServer.html#3e40ce83b3fdd4eec9d7a76597d5a7f1">00534</a> <a class="code" href="classPassenger_1_1ApplicationPoolServer.html#3e40ce83b3fdd4eec9d7a76597d5a7f1" title="Create a new ApplicationPoolServer object.">ApplicationPoolServer</a>(<span class="keyword">const</span> <span class="keywordtype">string</span> &spawnServerCommand,
|
550
|
+
<a name="l00535"></a>00535 <span class="keyword">const</span> <span class="keywordtype">string</span> &logFile = <span class="stringliteral">""</span>,
|
551
|
+
<a name="l00536"></a>00536 <span class="keyword">const</span> <span class="keywordtype">string</span> &environment = <span class="stringliteral">"production"</span>,
|
552
|
+
<a name="l00537"></a>00537 <span class="keyword">const</span> <span class="keywordtype">string</span> &rubyCommand = <span class="stringliteral">"ruby"</span>,
|
553
|
+
<a name="l00538"></a>00538 <span class="keyword">const</span> <span class="keywordtype">string</span> &user = <span class="stringliteral">""</span>)
|
554
|
+
<a name="l00539"></a>00539 : pool(spawnServerCommand, logFile, environment, rubyCommand, user) {
|
555
|
+
<a name="l00540"></a>00540 <span class="keywordtype">int</span> fds[2];
|
556
|
+
<a name="l00541"></a>00541
|
557
|
+
<a name="l00542"></a>00542 <span class="keywordflow">if</span> (socketpair(AF_UNIX, SOCK_STREAM, 0, fds) == -1) {
|
558
|
+
<a name="l00543"></a>00543 <span class="keywordflow">throw</span> <a class="code" href="classPassenger_1_1SystemException.html" title="Represents an error returned by a system call or a standard library call.">SystemException</a>(<span class="stringliteral">"Cannot create a Unix socket pair"</span>, errno);
|
559
|
+
<a name="l00544"></a>00544 }
|
560
|
+
<a name="l00545"></a>00545 serverSocket = fds[0];
|
561
|
+
<a name="l00546"></a>00546 connectSocket = fds[1];
|
562
|
+
<a name="l00547"></a>00547 done = <span class="keyword">false</span>;
|
563
|
+
<a name="l00548"></a>00548 detached = <span class="keyword">false</span>;
|
564
|
+
<a name="l00549"></a>00549 <span class="keywordflow">try</span> {
|
565
|
+
<a name="l00550"></a>00550 serverThread = <span class="keyword">new</span> thread(bind(&ApplicationPoolServer::serverThreadMainLoop, <span class="keyword">this</span>));
|
566
|
+
<a name="l00551"></a>00551 } <span class="keywordflow">catch</span> (<span class="keyword">const</span> thread_resource_error &e) {
|
567
|
+
<a name="l00552"></a>00552 <span class="keywordflow">throw</span> thread_resource_error(<span class="stringliteral">"Could not create the ApplicationPoolServer "</span>
|
568
|
+
<a name="l00553"></a>00553 <span class="stringliteral">"server main loop thread"</span>, e.native_error());
|
569
|
+
<a name="l00554"></a>00554 }
|
570
|
+
<a name="l00555"></a>00555 }
|
571
|
+
<a name="l00556"></a>00556
|
572
|
+
<a name="l00557"></a>00557 ~<a class="code" href="classPassenger_1_1ApplicationPoolServer.html" title="Multi-process usage support for ApplicationPool.">ApplicationPoolServer</a>() {
|
573
|
+
<a name="l00558"></a>00558 <span class="keywordflow">if</span> (!detached) {
|
574
|
+
<a name="l00559"></a>00559 done = <span class="keyword">true</span>;
|
575
|
+
<a name="l00560"></a>00560 close(connectSocket);
|
576
|
+
<a name="l00561"></a>00561 serverThread->join();
|
577
|
+
<a name="l00562"></a>00562 <span class="keyword">delete</span> serverThread;
|
578
|
+
<a name="l00563"></a>00563 close(serverSocket);
|
579
|
+
<a name="l00564"></a>00564
|
580
|
+
<a name="l00565"></a>00565 set<ClientInfoPtr> clientsCopy;
|
581
|
+
<a name="l00566"></a>00566 {
|
582
|
+
<a name="l00567"></a>00567 mutex::scoped_lock l(lock);
|
583
|
+
<a name="l00568"></a>00568 clientsCopy = clients;
|
584
|
+
<a name="l00569"></a>00569 }
|
585
|
+
<a name="l00570"></a>00570 set<ClientInfoPtr>::iterator it;
|
586
|
+
<a name="l00571"></a>00571 <span class="keywordflow">for</span> (it = clientsCopy.begin(); it != clientsCopy.end(); it++) {
|
587
|
+
<a name="l00572"></a>00572 (*it)->thr->join();
|
588
|
+
<a name="l00573"></a>00573 }
|
589
|
+
<a name="l00574"></a>00574 }
|
590
|
+
<a name="l00575"></a>00575 }
|
591
|
+
<a name="l00576"></a>00576 <span class="comment"></span>
|
592
|
+
<a name="l00577"></a>00577 <span class="comment"> /**</span>
|
593
|
+
<a name="l00578"></a>00578 <span class="comment"> * Connects to the server and returns a usable ApplicationPool object.</span>
|
594
|
+
<a name="l00579"></a>00579 <span class="comment"> * All cache/pool data of this ApplicationPool is actually stored on</span>
|
595
|
+
<a name="l00580"></a>00580 <span class="comment"> * the server and shared with other clients, but that is totally</span>
|
596
|
+
<a name="l00581"></a>00581 <span class="comment"> * transparent to the user of the ApplicationPool object.</span>
|
597
|
+
<a name="l00582"></a>00582 <span class="comment"> *</span>
|
598
|
+
<a name="l00583"></a>00583 <span class="comment"> * @warning</span>
|
599
|
+
<a name="l00584"></a>00584 <span class="comment"> * One may only use the returned ApplicationPool object for handling</span>
|
600
|
+
<a name="l00585"></a>00585 <span class="comment"> * one session at a time. For example, don't do stuff like this:</span>
|
601
|
+
<a name="l00586"></a>00586 <span class="comment"> * @code</span>
|
602
|
+
<a name="l00587"></a>00587 <span class="comment"> * ApplicationPoolPtr pool = server.connect();</span>
|
603
|
+
<a name="l00588"></a>00588 <span class="comment"> * Application::SessionPtr session1 = pool->get(...);</span>
|
604
|
+
<a name="l00589"></a>00589 <span class="comment"> * Application::SessionPtr session2 = pool->get(...);</span>
|
605
|
+
<a name="l00590"></a>00590 <span class="comment"> * @endcode</span>
|
606
|
+
<a name="l00591"></a>00591 <span class="comment"> * Otherwise, a deadlock can occur under certain circumstances.</span>
|
607
|
+
<a name="l00592"></a>00592 <span class="comment"> * @warning</span>
|
608
|
+
<a name="l00593"></a>00593 <span class="comment"> * Instead, one should call connect() multiple times:</span>
|
609
|
+
<a name="l00594"></a>00594 <span class="comment"> * @code</span>
|
610
|
+
<a name="l00595"></a>00595 <span class="comment"> * ApplicationPoolPtr pool1 = server.connect();</span>
|
611
|
+
<a name="l00596"></a>00596 <span class="comment"> * Application::SessionPtr session1 = pool1->get(...);</span>
|
612
|
+
<a name="l00597"></a>00597 <span class="comment"> * </span>
|
613
|
+
<a name="l00598"></a>00598 <span class="comment"> * ApplicationPoolPtr pool2 = server.connect();</span>
|
614
|
+
<a name="l00599"></a>00599 <span class="comment"> * Application::SessionPtr session2 = pool2->get(...);</span>
|
615
|
+
<a name="l00600"></a>00600 <span class="comment"> * @endcode</span>
|
616
|
+
<a name="l00601"></a>00601 <span class="comment"> *</span>
|
617
|
+
<a name="l00602"></a>00602 <span class="comment"> * @throws SystemException Something went wrong.</span>
|
618
|
+
<a name="l00603"></a>00603 <span class="comment"> * @throws IOException Something went wrong.</span>
|
619
|
+
<a name="l00604"></a>00604 <span class="comment"> */</span>
|
620
|
+
<a name="l00605"></a><a class="code" href="classPassenger_1_1ApplicationPoolServer.html#18f77057cc28e7924a8f4d1397aa0468">00605</a> ApplicationPoolPtr <a class="code" href="classPassenger_1_1ApplicationPoolServer.html#18f77057cc28e7924a8f4d1397aa0468" title="Connects to the server and returns a usable ApplicationPool object.">connect</a>() {
|
621
|
+
<a name="l00606"></a>00606 <a class="code" href="classPassenger_1_1MessageChannel.html" title="Convenience class for I/O operations on file descriptors.">MessageChannel</a> channel(connectSocket);
|
622
|
+
<a name="l00607"></a>00607 <span class="keywordtype">int</span> fd;
|
623
|
+
<a name="l00608"></a>00608
|
624
|
+
<a name="l00609"></a>00609 <span class="comment">// Write some random data to wake up the server.</span>
|
625
|
+
<a name="l00610"></a>00610 channel.<a class="code" href="classPassenger_1_1MessageChannel.html#069314e4c7e1fe8c8ab36e16d2cc5fef" title="Send a block of data over the underlying file descriptor.">writeRaw</a>(<span class="stringliteral">"x"</span>, 1);
|
626
|
+
<a name="l00611"></a>00611
|
627
|
+
<a name="l00612"></a>00612 fd = channel.<a class="code" href="classPassenger_1_1MessageChannel.html#1561b7e4a0f4d39ea431f456e5655488" title="Receive a file descriptor, which had been passed over the underlying file descriptor...">readFileDescriptor</a>();
|
628
|
+
<a name="l00613"></a>00613 <span class="keywordflow">return</span> <a class="code" href="group__Support.html#g41b6c4a82fed72531a147de0505a8396" title="Convenience shortcut for creating a shared_ptr.">ptr</a>(<span class="keyword">new</span> Client(fd));
|
629
|
+
<a name="l00614"></a>00614 }
|
630
|
+
<a name="l00615"></a>00615 <span class="comment"></span>
|
631
|
+
<a name="l00616"></a>00616 <span class="comment"> /**</span>
|
632
|
+
<a name="l00617"></a>00617 <span class="comment"> * Detach the server by freeing up some server resources such as file descriptors.</span>
|
633
|
+
<a name="l00618"></a>00618 <span class="comment"> * This should be called by child processes that wish to use a server, but do</span>
|
634
|
+
<a name="l00619"></a>00619 <span class="comment"> * not run the server itself.</span>
|
635
|
+
<a name="l00620"></a>00620 <span class="comment"> *</span>
|
636
|
+
<a name="l00621"></a>00621 <span class="comment"> * This method may only be called once. The ApplicationPoolServer object</span>
|
637
|
+
<a name="l00622"></a>00622 <span class="comment"> * will become unusable once detach() has been called.</span>
|
638
|
+
<a name="l00623"></a>00623 <span class="comment"> *</span>
|
639
|
+
<a name="l00624"></a>00624 <span class="comment"> * @warning Never call this method in the process in which this</span>
|
640
|
+
<a name="l00625"></a>00625 <span class="comment"> * ApplicationPoolServer was created!</span>
|
641
|
+
<a name="l00626"></a>00626 <span class="comment"> */</span>
|
642
|
+
<a name="l00627"></a><a class="code" href="classPassenger_1_1ApplicationPoolServer.html#b13957e32ae8ca36ba85f2e6ffefd5ce">00627</a> <span class="keywordtype">void</span> <a class="code" href="classPassenger_1_1ApplicationPoolServer.html#b13957e32ae8ca36ba85f2e6ffefd5ce" title="Detach the server by freeing up some server resources such as file descriptors.">detach</a>() {
|
643
|
+
<a name="l00628"></a>00628 detached = <span class="keyword">true</span>;
|
644
|
+
<a name="l00629"></a>00629 close(connectSocket);
|
645
|
+
<a name="l00630"></a>00630 close(serverSocket);
|
646
|
+
<a name="l00631"></a>00631 <span class="keyword">delete</span> serverThread;
|
647
|
+
<a name="l00632"></a>00632
|
648
|
+
<a name="l00633"></a>00633 <span class="comment">/* A client thread might have a reference to a ClientInfo</span>
|
649
|
+
<a name="l00634"></a>00634 <span class="comment"> * object. And because that thread doesn't run anymore after a</span>
|
650
|
+
<a name="l00635"></a>00635 <span class="comment"> * fork(), the reference never gets removed and the ClientInfo</span>
|
651
|
+
<a name="l00636"></a>00636 <span class="comment"> * object never gets destroyed. This results in file descriptor</span>
|
652
|
+
<a name="l00637"></a>00637 <span class="comment"> * leaks. So we forcefully close the file descriptors.</span>
|
653
|
+
<a name="l00638"></a>00638 <span class="comment"> */</span>
|
654
|
+
<a name="l00639"></a>00639 set<ClientInfoPtr>::iterator it;
|
655
|
+
<a name="l00640"></a>00640 <span class="keywordflow">for</span> (it = clients.begin(); it != clients.end(); it++) {
|
656
|
+
<a name="l00641"></a>00641 (*it)->detach();
|
657
|
+
<a name="l00642"></a>00642 }
|
658
|
+
<a name="l00643"></a>00643 clients.clear();
|
659
|
+
<a name="l00644"></a>00644
|
660
|
+
<a name="l00645"></a>00645 pool.<a class="code" href="classPassenger_1_1StandardApplicationPool.html#047ba4c66c67d5913c8edc36524c5eac">detach</a>();
|
661
|
+
<a name="l00646"></a>00646 }
|
662
|
+
<a name="l00647"></a>00647 };
|
663
|
+
<a name="l00648"></a>00648
|
664
|
+
<a name="l00649"></a>00649 <span class="keyword">typedef</span> shared_ptr<ApplicationPoolServer> ApplicationPoolServerPtr;
|
665
|
+
<a name="l00650"></a>00650
|
666
|
+
<a name="l00651"></a>00651 } <span class="comment">// namespace Passenger</span>
|
667
|
+
<a name="l00652"></a>00652
|
668
|
+
<a name="l00653"></a>00653 <span class="preprocessor">#endif </span><span class="comment">/* _PASSENGER_APPLICATION_POOL_CLIENT_SERVER_H_ */</span>
|
669
|
+
</pre></div><hr size="1"><address style="text-align: right;"><small>Generated on Fri Apr 11 18:16:04 2008 for Passenger by
|
670
|
+
<a href="http://www.doxygen.org/index.html">
|
671
|
+
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.3 </small></address>
|
672
|
+
</body>
|
673
|
+
</html>
|