passenger 2.2.15 → 3.0.0.pre1
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 +21 -12
- data/LICENSE +1 -1
- data/NEWS +8 -1
- data/PACKAGING.TXT +25 -0
- data/Rakefile +28 -891
- data/bin/passenger +32 -0
- data/bin/passenger-config +5 -5
- data/bin/passenger-install-apache2-module +37 -24
- data/bin/passenger-install-nginx-module +48 -46
- data/bin/passenger-make-enterprisey +8 -9
- data/bin/passenger-memory-stats +20 -150
- data/bin/passenger-status +130 -44
- data/bin/passenger-stress-test +5 -4
- data/build/agents.rb +73 -0
- data/build/apache2.rb +165 -0
- data/build/basics.rb +81 -0
- data/build/common_library.rb +198 -0
- data/build/config.rb +35 -0
- data/{misc/rake/cplusplus.rb → build/cplusplus_support.rb} +1 -1
- data/build/cxx_tests.rb +205 -0
- data/build/documentation.rb +77 -0
- data/{misc/rake → build}/gempackagetask.rb +1 -1
- data/build/integration_tests.rb +57 -0
- data/build/misc.rb +146 -0
- data/build/nginx.rb +64 -0
- data/build/oxt_tests.rb +52 -0
- data/{misc/rake → build}/packagetask.rb +0 -0
- data/build/packaging.rb +189 -0
- data/{misc/rake/extensions.rb → build/rake_extensions.rb} +1 -1
- data/{misc/rake → build}/rdoctask.rb +0 -0
- data/build/ruby_extension.rb +46 -0
- data/build/ruby_tests.rb +42 -0
- data/build/test_basics.rb +31 -0
- data/doc/ApplicationPool algorithm.txt +447 -234
- data/doc/Architectural overview.html +47 -56
- data/doc/Doxyfile +1 -1
- data/doc/Security of user switching support.html +46 -57
- data/doc/Users guide Apache.html +1033 -306
- data/doc/Users guide Apache.txt +419 -99
- data/doc/Users guide Nginx.html +1252 -253
- data/doc/Users guide Nginx.txt +711 -87
- data/doc/Users guide Standalone.html +603 -0
- data/doc/Users guide Standalone.txt +40 -0
- data/doc/cxxapi/AbstractSpawnManager_8h_source.html +141 -0
- data/doc/cxxapi/Account_8h_source.html +206 -0
- data/doc/cxxapi/AccountsDatabase_8h_source.html +161 -0
- data/doc/cxxapi/AgentBase_8h_source.html +70 -0
- data/doc/cxxapi/AgentsStarter_8h_source.html +112 -0
- data/doc/cxxapi/BCrypt_8h_source.html +104 -0
- data/doc/cxxapi/Blowfish_8h_source.html +134 -0
- data/doc/cxxapi/Bucket_8h_source.html +4 -3
- data/doc/cxxapi/Constants_8h_source.html +79 -0
- data/doc/cxxapi/ContentHandler_8h_source.html +95 -0
- data/doc/cxxapi/DirectoryMapper_8h_source.html +9 -8
- data/doc/cxxapi/EventedClient_8h_source.html +629 -0
- data/doc/cxxapi/EventedMessageServer_8h_source.html +358 -0
- data/doc/cxxapi/EventedServer_8h_source.html +326 -0
- data/doc/cxxapi/Exceptions_8h_source.html +366 -0
- data/doc/cxxapi/FileDescriptor_8h_source.html +260 -0
- data/doc/cxxapi/Hooks_8h_source.html +2 -1
- data/doc/cxxapi/HttpStatusExtractor_8h_source.html +382 -0
- data/doc/cxxapi/Logging_8h_source.html +726 -0
- data/doc/cxxapi/MessageChannel_8h_source.html +852 -0
- data/doc/cxxapi/MessageClient_8h_source.html +328 -0
- data/doc/cxxapi/MessageReadersWriters_8h_source.html +539 -0
- data/doc/cxxapi/MessageServer_8h_source.html +606 -0
- data/doc/cxxapi/PoolOptions_8h_source.html +548 -0
- data/doc/cxxapi/Process_8h_source.html +286 -0
- data/doc/cxxapi/RandomGenerator_8h_source.html +191 -0
- data/doc/cxxapi/ResourceLocator_8h_source.html +115 -0
- data/doc/cxxapi/ScgiRequestParser_8h_source.html +406 -0
- data/doc/cxxapi/ServerInstanceDir_8h_source.html +374 -0
- data/doc/cxxapi/Session_8h_source.html +501 -0
- data/doc/cxxapi/SpawnManager_8h_source.html +647 -0
- data/doc/cxxapi/StaticContentHandler_8h_source.html +68 -0
- data/doc/cxxapi/StaticString_8h_source.html +254 -0
- data/doc/cxxapi/StringListCreator_8h_source.html +114 -0
- data/doc/cxxapi/Utils_8h_source.html +442 -0
- data/doc/cxxapi/annotated.html +46 -0
- data/doc/cxxapi/apache2_2Configuration_8h_source.html +82 -0
- data/doc/cxxapi/classAgentWatcher-members.html +30 -26
- data/doc/cxxapi/classAgentWatcher.html +168 -194
- data/doc/cxxapi/classClient-members.html +14 -11
- data/doc/cxxapi/classClient.html +35 -35
- data/doc/cxxapi/classHooks-members.html +2 -0
- data/doc/cxxapi/classHooks.html +2 -0
- data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager-members.html +16 -13
- data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager.html +78 -82
- data/doc/cxxapi/classPassenger_1_1ArgumentException-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1ArgumentException.html +26 -22
- data/doc/cxxapi/classPassenger_1_1ArrayMessage-members.html +37 -0
- data/doc/cxxapi/classPassenger_1_1ArrayMessage.html +113 -0
- data/doc/cxxapi/classPassenger_1_1BufferedUpload-members.html +14 -11
- data/doc/cxxapi/classPassenger_1_1BufferedUpload.html +41 -42
- data/doc/cxxapi/classPassenger_1_1BusyException-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1BusyException.html +24 -20
- data/doc/cxxapi/classPassenger_1_1ConfigurationException-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1ConfigurationException.html +23 -19
- data/doc/cxxapi/classPassenger_1_1DirectoryMapper-members.html +2 -0
- data/doc/cxxapi/classPassenger_1_1DirectoryMapper.html +8 -6
- data/doc/cxxapi/classPassenger_1_1EOFException-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1EOFException.html +27 -23
- data/doc/cxxapi/classPassenger_1_1EventFd-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1EventFd.html +24 -21
- data/doc/cxxapi/classPassenger_1_1EventedClient-members.html +54 -0
- data/doc/cxxapi/classPassenger_1_1EventedClient.html +436 -0
- data/doc/cxxapi/classPassenger_1_1EventedMessageServer-members.html +37 -0
- data/doc/cxxapi/classPassenger_1_1EventedMessageServer.html +59 -0
- data/doc/cxxapi/classPassenger_1_1EventedMessageServer__inherit__graph.map +3 -0
- data/doc/cxxapi/classPassenger_1_1EventedMessageServer__inherit__graph.md5 +1 -0
- data/doc/cxxapi/classPassenger_1_1EventedMessageServer__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1EventedServer-members.html +37 -0
- data/doc/cxxapi/classPassenger_1_1EventedServer.html +93 -0
- data/doc/cxxapi/classPassenger_1_1EventedServer__inherit__graph.map +3 -0
- data/doc/cxxapi/classPassenger_1_1EventedServer__inherit__graph.md5 +1 -0
- data/doc/cxxapi/classPassenger_1_1EventedServer__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1FileDescriptor-members.html +16 -13
- data/doc/cxxapi/classPassenger_1_1FileDescriptor.html +63 -70
- data/doc/cxxapi/classPassenger_1_1FileNotFoundException-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1FileNotFoundException.html +26 -22
- data/doc/cxxapi/classPassenger_1_1FileSystemException-members.html +17 -14
- data/doc/cxxapi/classPassenger_1_1FileSystemException.html +32 -30
- data/doc/cxxapi/classPassenger_1_1HttpStatusExtractor-members.html +15 -12
- data/doc/cxxapi/classPassenger_1_1HttpStatusExtractor.html +59 -59
- data/doc/cxxapi/classPassenger_1_1IOException-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1IOException.html +27 -23
- data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +36 -33
- data/doc/cxxapi/classPassenger_1_1MessageChannel.html +326 -344
- data/doc/cxxapi/classPassenger_1_1MessageServer-members.html +25 -22
- data/doc/cxxapi/classPassenger_1_1MessageServer.html +160 -191
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext.html +29 -27
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.map +3 -1
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.md5 +1 -1
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext-members.html +17 -14
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext.html +69 -79
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.map +3 -1
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.md5 +1 -1
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.png +0 -0
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler-members.html +15 -12
- data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler.html +60 -63
- data/doc/cxxapi/classPassenger_1_1Process-members.html +20 -17
- data/doc/cxxapi/classPassenger_1_1Process.html +88 -95
- data/doc/cxxapi/classPassenger_1_1RandomGenerator-members.html +13 -10
- data/doc/cxxapi/classPassenger_1_1RandomGenerator.html +36 -35
- data/doc/cxxapi/classPassenger_1_1RuntimeException-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1RuntimeException.html +24 -20
- data/doc/cxxapi/classPassenger_1_1ScalarMessage-members.html +37 -0
- data/doc/cxxapi/classPassenger_1_1ScalarMessage.html +76 -0
- data/doc/cxxapi/classPassenger_1_1ScgiRequestParser-members.html +26 -23
- data/doc/cxxapi/classPassenger_1_1ScgiRequestParser.html +121 -138
- data/doc/cxxapi/classPassenger_1_1SecurityException-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1SecurityException.html +26 -22
- data/doc/cxxapi/classPassenger_1_1Session-members.html +29 -26
- data/doc/cxxapi/classPassenger_1_1Session.html +219 -240
- data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +14 -11
- data/doc/cxxapi/classPassenger_1_1SpawnException.html +36 -37
- data/doc/cxxapi/classPassenger_1_1SpawnManager-members.html +18 -15
- data/doc/cxxapi/classPassenger_1_1SpawnManager.html +115 -110
- data/doc/cxxapi/classPassenger_1_1StandardSession-members.html +30 -27
- data/doc/cxxapi/classPassenger_1_1StandardSession.html +163 -184
- data/doc/cxxapi/classPassenger_1_1StaticString-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1StaticString.html +27 -25
- data/doc/cxxapi/classPassenger_1_1SystemException-members.html +16 -13
- data/doc/cxxapi/classPassenger_1_1SystemException.html +65 -67
- data/doc/cxxapi/classPassenger_1_1TimeRetrievalException-members.html +16 -13
- data/doc/cxxapi/classPassenger_1_1TimeRetrievalException.html +27 -23
- data/doc/cxxapi/classPassenger_1_1TimeoutException-members.html +12 -9
- data/doc/cxxapi/classPassenger_1_1TimeoutException.html +24 -20
- data/doc/cxxapi/classPassenger_1_1Uint16Message-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1Uint16Message.html +51 -0
- data/doc/cxxapi/classPassenger_1_1Uint32Message-members.html +36 -0
- data/doc/cxxapi/classPassenger_1_1Uint32Message.html +51 -0
- data/doc/cxxapi/classServer-members.html +12 -9
- data/doc/cxxapi/classServer.html +23 -20
- data/doc/cxxapi/classServerInstanceDirToucher-members.html +12 -9
- data/doc/cxxapi/classServerInstanceDirToucher.html +21 -17
- data/doc/cxxapi/classes.html +18 -4
- data/doc/cxxapi/definitions_8h_source.html +1 -0
- data/doc/cxxapi/files.html +36 -1
- data/doc/cxxapi/functions.html +53 -21
- data/doc/cxxapi/functions_0x62.html +82 -0
- data/doc/cxxapi/functions_0x63.html +99 -0
- data/doc/cxxapi/functions_0x64.html +95 -0
- data/doc/cxxapi/functions_0x65.html +88 -0
- data/doc/cxxapi/functions_0x66.html +100 -0
- data/doc/cxxapi/functions_0x67.html +170 -0
- data/doc/cxxapi/functions_0x68.html +88 -0
- data/doc/cxxapi/functions_0x69.html +93 -0
- data/doc/cxxapi/functions_0x6b.html +80 -0
- data/doc/cxxapi/functions_0x6c.html +88 -0
- data/doc/cxxapi/functions_0x6d.html +88 -0
- data/doc/cxxapi/functions_0x6e.html +86 -0
- data/doc/cxxapi/functions_0x6f.html +94 -0
- data/doc/cxxapi/functions_0x70.html +94 -0
- data/doc/cxxapi/functions_0x72.html +110 -0
- data/doc/cxxapi/functions_0x73.html +171 -0
- data/doc/cxxapi/functions_0x74.html +85 -0
- data/doc/cxxapi/functions_0x75.html +85 -0
- data/doc/cxxapi/functions_0x77.html +92 -0
- data/doc/cxxapi/functions_0x7e.html +79 -0
- data/doc/cxxapi/functions_enum.html +14 -12
- data/doc/cxxapi/functions_eval.html +22 -16
- data/doc/cxxapi/functions_func.html +460 -1
- data/doc/cxxapi/functions_vars.html +163 -63
- data/doc/cxxapi/graph_legend.html +1 -0
- data/doc/cxxapi/graph_legend.png +0 -0
- data/doc/cxxapi/group__Core.html +2 -2
- data/doc/cxxapi/group__Core.map +1 -2
- data/doc/cxxapi/group__Core.png +0 -0
- data/doc/cxxapi/group__Exceptions.html +32 -40
- data/doc/cxxapi/group__Hooks.html +2 -1
- data/doc/cxxapi/group__Hooks.map +1 -1
- data/doc/cxxapi/group__Hooks.png +0 -0
- data/doc/cxxapi/group__Support.html +509 -0
- data/doc/cxxapi/hierarchy.html +66 -62
- data/doc/cxxapi/inherit__graph__10.map +3 -1
- data/doc/cxxapi/inherit__graph__10.md5 +1 -1
- data/doc/cxxapi/inherit__graph__10.png +0 -0
- data/doc/cxxapi/inherit__graph__11.map +4 -1
- data/doc/cxxapi/inherit__graph__11.md5 +1 -1
- data/doc/cxxapi/inherit__graph__11.png +0 -0
- data/doc/cxxapi/inherit__graph__12.map +3 -1
- data/doc/cxxapi/inherit__graph__12.md5 +1 -1
- data/doc/cxxapi/inherit__graph__12.png +0 -0
- data/doc/cxxapi/inherit__graph__13.map +3 -1
- data/doc/cxxapi/inherit__graph__13.md5 +1 -1
- data/doc/cxxapi/inherit__graph__13.png +0 -0
- data/doc/cxxapi/inherit__graph__14.map +3 -1
- data/doc/cxxapi/inherit__graph__14.md5 +1 -1
- data/doc/cxxapi/inherit__graph__14.png +0 -0
- data/doc/cxxapi/inherit__graph__15.map +5 -1
- data/doc/cxxapi/inherit__graph__15.md5 +1 -1
- data/doc/cxxapi/inherit__graph__15.png +0 -0
- data/doc/cxxapi/inherit__graph__16.map +3 -3
- data/doc/cxxapi/inherit__graph__16.md5 +1 -1
- data/doc/cxxapi/inherit__graph__16.png +0 -0
- data/doc/cxxapi/inherit__graph__17.map +3 -1
- data/doc/cxxapi/inherit__graph__17.md5 +1 -1
- data/doc/cxxapi/inherit__graph__17.png +0 -0
- data/doc/cxxapi/inherit__graph__18.map +4 -1
- data/doc/cxxapi/inherit__graph__18.md5 +1 -1
- data/doc/cxxapi/inherit__graph__18.png +0 -0
- data/doc/cxxapi/inherit__graph__19.map +3 -1
- data/doc/cxxapi/inherit__graph__19.md5 +1 -1
- data/doc/cxxapi/inherit__graph__19.png +0 -0
- data/doc/cxxapi/inherit__graph__20.map +3 -2
- data/doc/cxxapi/inherit__graph__20.md5 +1 -1
- data/doc/cxxapi/inherit__graph__20.png +0 -0
- data/doc/cxxapi/inherit__graph__21.map +3 -1
- data/doc/cxxapi/inherit__graph__21.md5 +1 -1
- data/doc/cxxapi/inherit__graph__21.png +0 -0
- data/doc/cxxapi/inherit__graph__22.map +3 -1
- data/doc/cxxapi/inherit__graph__22.md5 +1 -1
- data/doc/cxxapi/inherit__graph__22.png +0 -0
- data/doc/cxxapi/inherit__graph__23.map +3 -1
- data/doc/cxxapi/inherit__graph__23.md5 +1 -1
- data/doc/cxxapi/inherit__graph__23.png +0 -0
- data/doc/cxxapi/inherit__graph__24.map +3 -1
- data/doc/cxxapi/inherit__graph__24.md5 +1 -1
- data/doc/cxxapi/inherit__graph__24.png +0 -0
- data/doc/cxxapi/inherit__graph__25.map +3 -1
- data/doc/cxxapi/inherit__graph__25.md5 +1 -1
- data/doc/cxxapi/inherit__graph__25.png +0 -0
- data/doc/cxxapi/inherit__graph__26.map +3 -1
- data/doc/cxxapi/inherit__graph__26.md5 +1 -1
- data/doc/cxxapi/inherit__graph__26.png +0 -0
- data/doc/cxxapi/inherit__graph__27.map +3 -1
- data/doc/cxxapi/inherit__graph__27.md5 +1 -1
- data/doc/cxxapi/inherit__graph__27.png +0 -0
- data/doc/cxxapi/inherit__graph__28.map +4 -1
- data/doc/cxxapi/inherit__graph__28.md5 +1 -1
- data/doc/cxxapi/inherit__graph__28.png +0 -0
- data/doc/cxxapi/inherit__graph__29.map +3 -1
- data/doc/cxxapi/inherit__graph__29.md5 +1 -1
- data/doc/cxxapi/inherit__graph__29.png +0 -0
- data/doc/cxxapi/inherit__graph__30.map +3 -2
- data/doc/cxxapi/inherit__graph__30.md5 +1 -1
- data/doc/cxxapi/inherit__graph__30.png +0 -0
- data/doc/cxxapi/inherit__graph__31.map +3 -1
- data/doc/cxxapi/inherit__graph__31.md5 +1 -1
- data/doc/cxxapi/inherit__graph__31.png +0 -0
- data/doc/cxxapi/inherit__graph__32.map +5 -1
- data/doc/cxxapi/inherit__graph__32.md5 +1 -1
- data/doc/cxxapi/inherit__graph__32.png +0 -0
- data/doc/cxxapi/inherit__graph__33.map +3 -1
- data/doc/cxxapi/inherit__graph__33.md5 +1 -1
- data/doc/cxxapi/inherit__graph__33.png +0 -0
- data/doc/cxxapi/inherit__graph__34.map +3 -3
- data/doc/cxxapi/inherit__graph__34.md5 +1 -1
- data/doc/cxxapi/inherit__graph__34.png +0 -0
- data/doc/cxxapi/inherit__graph__35.map +3 -1
- data/doc/cxxapi/inherit__graph__35.md5 +1 -1
- data/doc/cxxapi/inherit__graph__35.png +0 -0
- data/doc/cxxapi/inherit__graph__36.map +3 -1
- data/doc/cxxapi/inherit__graph__36.md5 +1 -1
- data/doc/cxxapi/inherit__graph__36.png +0 -0
- data/doc/cxxapi/inherit__graph__37.map +3 -1
- data/doc/cxxapi/inherit__graph__37.md5 +1 -1
- data/doc/cxxapi/inherit__graph__37.png +0 -0
- data/doc/cxxapi/inherit__graph__4.map +3 -1
- data/doc/cxxapi/inherit__graph__4.md5 +1 -1
- data/doc/cxxapi/inherit__graph__4.png +0 -0
- data/doc/cxxapi/inherit__graph__5.map +3 -1
- data/doc/cxxapi/inherit__graph__5.md5 +1 -1
- data/doc/cxxapi/inherit__graph__5.png +0 -0
- data/doc/cxxapi/inherit__graph__6.map +3 -1
- data/doc/cxxapi/inherit__graph__6.md5 +1 -1
- data/doc/cxxapi/inherit__graph__6.png +0 -0
- data/doc/cxxapi/inherit__graph__7.map +3 -1
- data/doc/cxxapi/inherit__graph__7.md5 +1 -1
- data/doc/cxxapi/inherit__graph__7.png +0 -0
- data/doc/cxxapi/inherit__graph__8.map +3 -1
- data/doc/cxxapi/inherit__graph__8.md5 +1 -1
- data/doc/cxxapi/inherit__graph__8.png +0 -0
- data/doc/cxxapi/inherit__graph__9.map +3 -1
- data/doc/cxxapi/inherit__graph__9.md5 +1 -1
- data/doc/cxxapi/inherit__graph__9.png +0 -0
- data/doc/cxxapi/inherits.html +123 -126
- data/doc/cxxapi/main.html +1 -0
- data/doc/cxxapi/modules.html +2 -1
- data/doc/cxxapi/namespacePassenger.html +263 -492
- data/doc/cxxapi/namespacemembers.html +68 -96
- data/doc/cxxapi/namespacemembers_enum.html +14 -12
- data/doc/cxxapi/namespacemembers_eval.html +20 -15
- data/doc/cxxapi/namespacemembers_func.html +52 -88
- data/doc/cxxapi/namespacemembers_type.html +18 -14
- data/doc/cxxapi/namespaces.html +12 -9
- data/doc/cxxapi/nginx_2Configuration_8h_source.html +125 -0
- data/doc/cxxapi/ngx__http__passenger__module_8h_source.html +94 -0
- data/doc/cxxapi/structPassenger_1_1MessageServer_1_1DisconnectEventBroadcastGuard-members.html +12 -9
- data/doc/cxxapi/structPassenger_1_1MessageServer_1_1DisconnectEventBroadcastGuard.html +24 -22
- data/doc/cxxapi/structPassenger_1_1PoolOptions-members.html +43 -38
- data/doc/cxxapi/structPassenger_1_1PoolOptions.html +275 -325
- data/doc/cxxapi/structPassenger_1_1StaticString_1_1Hash-members.html +12 -9
- data/doc/cxxapi/structPassenger_1_1StaticString_1_1Hash.html +24 -22
- data/doc/cxxapi/tree.html +152 -7
- data/doc/users_guide_snippets/{analysis_and_system_maintenance_tools.txt → analysis_and_system_maintenance.txt} +58 -1
- data/doc/users_guide_snippets/appendix_c_spawning_methods.txt +1 -2
- data/doc/users_guide_snippets/global_queueing_explained.txt +1 -5
- data/doc/users_guide_snippets/{rails_spawn_method.txt → passenger_spawn_method.txt} +9 -8
- data/doc/users_guide_snippets/tips.txt +12 -6
- data/doc/users_guide_snippets/under_the_hood/page_caching_support.txt +22 -0
- data/ext/apache2/Bucket.cpp +4 -4
- data/ext/apache2/Bucket.h +3 -3
- data/ext/apache2/Configuration.cpp +278 -381
- data/ext/apache2/Configuration.h +3 -357
- data/ext/apache2/Configuration.hpp +461 -0
- data/ext/apache2/DirectoryMapper.h +3 -3
- data/ext/apache2/HelperAgent.cpp +359 -0
- data/ext/apache2/Hooks.cpp +339 -226
- data/ext/apache2/Hooks.h +1 -1
- data/ext/apache2/mod_passenger.c +10 -4
- data/ext/boost/algorithm/string/case_conv.hpp +4 -4
- data/ext/boost/algorithm/string/concept.hpp +2 -2
- data/ext/boost/algorithm/string/detail/case_conv.hpp +18 -9
- data/ext/boost/algorithm/string/detail/find_format.hpp +44 -43
- data/ext/boost/algorithm/string/detail/find_format_all.hpp +56 -56
- data/ext/boost/algorithm/string/detail/find_format_store.hpp +7 -0
- data/ext/boost/algorithm/string/detail/finder.hpp +14 -14
- data/ext/boost/algorithm/string/detail/formatter.hpp +2 -2
- data/ext/boost/algorithm/string/detail/replace_storage.hpp +3 -3
- data/ext/boost/algorithm/string/detail/sequence.hpp +3 -3
- data/ext/boost/algorithm/string/erase.hpp +98 -98
- data/ext/boost/algorithm/string/find_format.hpp +56 -38
- data/ext/boost/algorithm/string/finder.hpp +6 -6
- data/ext/boost/algorithm/string/formatter.hpp +1 -1
- data/ext/boost/algorithm/string/replace.hpp +99 -99
- data/ext/boost/bind.hpp +5 -1670
- data/ext/boost/bind/bind.hpp +1751 -0
- data/ext/boost/bind/bind_mf2_cc.hpp +228 -0
- data/ext/boost/bind/mem_fn.hpp +389 -0
- data/ext/boost/bind/mem_fn_template.hpp +54 -27
- data/ext/boost/bind/placeholders.hpp +3 -2
- data/ext/boost/concept_check.hpp +10 -0
- data/ext/boost/config/abi/msvc_prefix.hpp +15 -1
- data/ext/boost/config/abi_prefix.hpp +1 -1
- data/ext/boost/config/abi_suffix.hpp +3 -2
- data/ext/boost/config/auto_link.hpp +6 -1
- data/ext/boost/config/compiler/borland.hpp +75 -17
- data/ext/boost/config/compiler/codegear.hpp +163 -0
- data/ext/boost/config/compiler/common_edg.hpp +35 -0
- data/ext/boost/config/compiler/digitalmars.hpp +26 -0
- data/ext/boost/config/compiler/gcc.hpp +69 -14
- data/ext/boost/config/compiler/hp_acc.hpp +32 -0
- data/ext/boost/config/compiler/intel.hpp +13 -2
- data/ext/boost/config/compiler/kai.hpp +0 -2
- data/ext/boost/config/compiler/metrowerks.hpp +29 -1
- data/ext/boost/config/compiler/mpw.hpp +30 -0
- data/ext/boost/config/compiler/pgi.hpp +37 -0
- data/ext/boost/config/compiler/sgi_mipspro.hpp +1 -0
- data/ext/boost/config/compiler/sunpro_cc.hpp +39 -7
- data/ext/boost/config/compiler/vacpp.hpp +31 -3
- data/ext/boost/config/compiler/visualc.hpp +72 -5
- data/ext/boost/config/no_tr1/cmath.hpp +28 -0
- data/ext/boost/config/platform/bsd.hpp +16 -3
- data/ext/boost/config/platform/hpux.hpp +3 -0
- data/ext/boost/config/platform/macos.hpp +8 -0
- data/ext/boost/config/platform/solaris.hpp +7 -0
- data/ext/boost/config/platform/vxworks.hpp +31 -0
- data/ext/boost/config/select_compiler_config.hpp +4 -0
- data/ext/boost/config/select_platform_config.hpp +6 -2
- data/ext/boost/config/select_stdlib_config.hpp +17 -8
- data/ext/boost/config/stdlib/dinkumware.hpp +34 -2
- data/ext/boost/config/stdlib/libcomo.hpp +25 -0
- data/ext/boost/config/stdlib/libstdcpp3.hpp +56 -2
- data/ext/boost/config/stdlib/modena.hpp +25 -0
- data/ext/boost/config/stdlib/msl.hpp +24 -0
- data/ext/boost/config/stdlib/roguewave.hpp +26 -0
- data/ext/boost/config/stdlib/sgi.hpp +25 -0
- data/ext/boost/config/stdlib/stlport.hpp +36 -1
- data/ext/boost/config/stdlib/vacpp.hpp +25 -0
- data/ext/boost/config/suffix.hpp +67 -32
- data/ext/boost/config/warning_disable.hpp +47 -0
- data/ext/boost/cstdint.hpp +62 -36
- data/ext/boost/date_time/c_time.hpp +28 -12
- data/ext/boost/date_time/compiler_config.hpp +27 -5
- data/ext/boost/date_time/constrained_value.hpp +36 -13
- data/ext/boost/date_time/date.hpp +44 -33
- data/ext/boost/date_time/date_duration.hpp +13 -14
- data/ext/boost/date_time/date_facet.hpp +215 -226
- data/ext/boost/date_time/date_generator_formatter.hpp +22 -20
- data/ext/boost/date_time/date_generator_parser.hpp +52 -51
- data/ext/boost/date_time/date_generators.hpp +16 -16
- data/ext/boost/date_time/date_parsing.hpp +115 -98
- data/ext/boost/date_time/filetime_functions.hpp +133 -41
- data/ext/boost/date_time/format_date_parser.hpp +22 -10
- data/ext/boost/date_time/gregorian/conversion.hpp +32 -39
- data/ext/boost/date_time/gregorian/greg_calendar.hpp +15 -14
- data/ext/boost/date_time/gregorian/greg_date.hpp +19 -18
- data/ext/boost/date_time/gregorian/greg_duration.hpp +106 -10
- data/ext/boost/date_time/gregorian/greg_duration_types.hpp +16 -7
- data/ext/boost/date_time/gregorian/greg_weekday.hpp +2 -2
- data/ext/boost/date_time/gregorian/gregorian_io.hpp +11 -4
- data/ext/boost/date_time/gregorian_calendar.hpp +8 -8
- data/ext/boost/date_time/gregorian_calendar.ipp +30 -30
- data/ext/boost/date_time/int_adapter.hpp +4 -2
- data/ext/boost/date_time/microsec_time_clock.hpp +39 -117
- data/ext/boost/date_time/period_parser.hpp +17 -15
- data/ext/boost/date_time/posix_time/conversion.hpp +28 -29
- data/ext/boost/date_time/posix_time/posix_time_config.hpp +19 -19
- data/ext/boost/date_time/posix_time/posix_time_io.hpp +31 -38
- data/ext/boost/date_time/posix_time/time_formatters.hpp +32 -32
- data/ext/boost/date_time/string_parse_tree.hpp +46 -46
- data/ext/boost/date_time/strings_from_facet.hpp +7 -5
- data/ext/boost/date_time/time.hpp +7 -6
- data/ext/boost/date_time/time_defs.hpp +12 -2
- data/ext/boost/date_time/time_duration.hpp +27 -26
- data/ext/boost/date_time/time_facet.hpp +386 -321
- data/ext/boost/date_time/time_formatting_streams.hpp +8 -5
- data/ext/boost/date_time/time_resolution_traits.hpp +29 -25
- data/ext/boost/date_time/time_system_split.hpp +7 -13
- data/ext/boost/date_time/wrapping_int.hpp +21 -15
- data/ext/boost/detail/call_traits.hpp +1 -1
- data/ext/boost/detail/endian.hpp +4 -4
- data/ext/boost/detail/no_exceptions_support.hpp +87 -0
- data/ext/boost/detail/sp_typeinfo.hpp +50 -4
- data/ext/boost/detail/workaround.hpp +63 -3
- data/ext/boost/enable_shared_from_this.hpp +4 -59
- data/ext/boost/exception/current_exception_cast.hpp +43 -0
- data/ext/boost/exception/detail/attribute_noreturn.hpp +17 -0
- data/ext/boost/exception/detail/error_info_impl.hpp +75 -0
- data/ext/boost/exception/detail/exception_ptr.hpp +490 -0
- data/ext/boost/exception/detail/is_output_streamable.hpp +47 -0
- data/ext/boost/exception/detail/object_hex_dump.hpp +50 -0
- data/ext/boost/exception/detail/type_info.hpp +79 -0
- data/ext/boost/exception/diagnostic_information.hpp +182 -0
- data/ext/boost/exception/exception.hpp +422 -0
- data/ext/boost/exception/get_error_info.hpp +130 -0
- data/ext/boost/exception/info.hpp +167 -0
- data/ext/boost/exception/to_string.hpp +83 -0
- data/ext/boost/exception/to_string_stub.hpp +109 -0
- data/ext/boost/exception_ptr.hpp +11 -0
- data/ext/boost/function/detail/prologue.hpp +2 -1
- data/ext/boost/function/function_base.hpp +270 -128
- data/ext/boost/function/function_fwd.hpp +70 -0
- data/ext/boost/function/function_template.hpp +319 -130
- data/ext/boost/get_pointer.hpp +5 -1
- data/ext/boost/integer.hpp +253 -0
- data/ext/boost/integer_fwd.hpp +174 -0
- data/ext/boost/integer_traits.hpp +26 -1
- data/ext/boost/io/ios_state.hpp +8 -0
- data/ext/boost/iterator/detail/config_def.hpp +4 -2
- data/ext/boost/iterator/iterator_adaptor.hpp +7 -2
- data/ext/boost/iterator/iterator_facade.hpp +1 -2
- data/ext/boost/lexical_cast.hpp +113 -105
- data/ext/boost/limits.hpp +1 -1
- data/ext/boost/mem_fn.hpp +5 -370
- data/ext/boost/memory_order.hpp +53 -0
- data/ext/boost/mpl/always.hpp +3 -3
- data/ext/boost/mpl/and.hpp +3 -3
- data/ext/boost/mpl/apply.hpp +3 -3
- data/ext/boost/mpl/apply_fwd.hpp +3 -3
- data/ext/boost/mpl/apply_wrap.hpp +37 -6
- data/ext/boost/mpl/arg.hpp +3 -3
- data/ext/boost/mpl/arg_fwd.hpp +3 -3
- data/ext/boost/mpl/assert.hpp +6 -6
- data/ext/boost/mpl/aux_/adl_barrier.hpp +3 -3
- data/ext/boost/mpl/aux_/arg_typedef.hpp +3 -3
- data/ext/boost/mpl/aux_/arity.hpp +3 -3
- data/ext/boost/mpl/aux_/arity_spec.hpp +3 -3
- data/ext/boost/mpl/aux_/common_name_wknd.hpp +3 -3
- data/ext/boost/mpl/aux_/config/adl.hpp +4 -4
- data/ext/boost/mpl/aux_/config/arrays.hpp +4 -4
- data/ext/boost/mpl/aux_/config/bcc.hpp +28 -0
- data/ext/boost/mpl/aux_/config/bind.hpp +4 -4
- data/ext/boost/mpl/aux_/config/compiler.hpp +8 -6
- data/ext/boost/mpl/aux_/config/ctps.hpp +3 -3
- data/ext/boost/mpl/aux_/config/dtp.hpp +5 -5
- data/ext/boost/mpl/aux_/config/eti.hpp +3 -3
- data/ext/boost/mpl/aux_/config/gcc.hpp +3 -3
- data/ext/boost/mpl/aux_/config/has_apply.hpp +3 -3
- data/ext/boost/mpl/aux_/config/has_xxx.hpp +3 -3
- data/ext/boost/mpl/aux_/config/integral.hpp +4 -4
- data/ext/boost/mpl/aux_/config/intel.hpp +3 -3
- data/ext/boost/mpl/aux_/config/lambda.hpp +3 -3
- data/ext/boost/mpl/aux_/config/msvc.hpp +3 -3
- data/ext/boost/mpl/aux_/config/msvc_typename.hpp +3 -3
- data/ext/boost/mpl/aux_/config/nttp.hpp +3 -3
- data/ext/boost/mpl/aux_/config/overload_resolution.hpp +3 -3
- data/ext/boost/mpl/aux_/config/pp_counter.hpp +3 -3
- data/ext/boost/mpl/aux_/config/preprocessor.hpp +4 -4
- data/ext/boost/mpl/aux_/config/static_constant.hpp +3 -3
- data/ext/boost/mpl/aux_/config/ttp.hpp +4 -4
- data/ext/boost/mpl/aux_/config/use_preprocessed.hpp +3 -3
- data/ext/boost/mpl/aux_/config/workaround.hpp +3 -3
- data/ext/boost/mpl/aux_/full_lambda.hpp +3 -3
- data/ext/boost/mpl/aux_/has_apply.hpp +3 -3
- data/ext/boost/mpl/aux_/has_type.hpp +3 -3
- data/ext/boost/mpl/aux_/include_preprocessed.hpp +3 -3
- data/ext/boost/mpl/aux_/integral_wrapper.hpp +3 -3
- data/ext/boost/mpl/aux_/lambda_arity_param.hpp +3 -3
- data/ext/boost/mpl/aux_/lambda_support.hpp +4 -4
- data/ext/boost/mpl/aux_/msvc_never_true.hpp +3 -3
- data/ext/boost/mpl/aux_/na.hpp +3 -3
- data/ext/boost/mpl/aux_/na_assert.hpp +3 -3
- data/ext/boost/mpl/aux_/na_fwd.hpp +3 -3
- data/ext/boost/mpl/aux_/na_spec.hpp +3 -3
- data/ext/boost/mpl/aux_/nested_type_wknd.hpp +3 -3
- data/ext/boost/mpl/aux_/nttp_decl.hpp +3 -3
- data/ext/boost/mpl/aux_/preprocessor/def_params_tail.hpp +3 -3
- data/ext/boost/mpl/aux_/preprocessor/enum.hpp +3 -3
- data/ext/boost/mpl/aux_/preprocessor/filter_params.hpp +3 -3
- data/ext/boost/mpl/aux_/preprocessor/params.hpp +3 -3
- data/ext/boost/mpl/aux_/preprocessor/sub.hpp +3 -3
- data/ext/boost/mpl/aux_/static_cast.hpp +3 -3
- data/ext/boost/mpl/aux_/template_arity.hpp +3 -3
- data/ext/boost/mpl/aux_/template_arity_fwd.hpp +3 -3
- data/ext/boost/mpl/aux_/type_wrapper.hpp +3 -3
- data/ext/boost/mpl/aux_/value_wknd.hpp +3 -3
- data/ext/boost/mpl/aux_/yes_no.hpp +3 -3
- data/ext/boost/mpl/bind.hpp +3 -3
- data/ext/boost/mpl/bind_fwd.hpp +3 -3
- data/ext/boost/mpl/bool.hpp +3 -3
- data/ext/boost/mpl/bool_fwd.hpp +3 -3
- data/ext/boost/mpl/eval_if.hpp +3 -3
- data/ext/boost/mpl/has_xxx.hpp +10 -8
- data/ext/boost/mpl/identity.hpp +3 -3
- data/ext/boost/mpl/if.hpp +3 -3
- data/ext/boost/mpl/int.hpp +3 -3
- data/ext/boost/mpl/int_fwd.hpp +3 -3
- data/ext/boost/mpl/integral_c.hpp +3 -3
- data/ext/boost/mpl/integral_c_fwd.hpp +3 -3
- data/ext/boost/mpl/integral_c_tag.hpp +3 -3
- data/ext/boost/mpl/lambda.hpp +3 -3
- data/ext/boost/mpl/lambda_fwd.hpp +3 -3
- data/ext/boost/mpl/limits/arity.hpp +3 -3
- data/ext/boost/mpl/logical.hpp +3 -3
- data/ext/boost/mpl/next.hpp +3 -3
- data/ext/boost/mpl/next_prior.hpp +3 -3
- data/ext/boost/mpl/not.hpp +3 -3
- data/ext/boost/mpl/or.hpp +3 -3
- data/ext/boost/mpl/placeholders.hpp +3 -3
- data/ext/boost/mpl/protect.hpp +3 -3
- data/ext/boost/mpl/quote.hpp +18 -7
- data/ext/boost/mpl/size_t.hpp +3 -3
- data/ext/boost/mpl/size_t_fwd.hpp +3 -3
- data/ext/boost/mpl/void.hpp +3 -3
- data/ext/boost/mpl/void_fwd.hpp +3 -3
- data/ext/boost/non_type.hpp +27 -27
- data/ext/boost/operators.hpp +51 -18
- data/ext/boost/preprocessor/arithmetic/detail/div_base.hpp +61 -0
- data/ext/boost/preprocessor/arithmetic/mod.hpp +39 -0
- data/ext/boost/preprocessor/comparison/less_equal.hpp +39 -0
- data/ext/boost/preprocessor/control/deduce_d.hpp +22 -0
- data/ext/boost/preprocessor/logical/not.hpp +30 -0
- data/ext/boost/preprocessor/seq/cat.hpp +48 -0
- data/ext/boost/preprocessor/seq/fold_left.hpp +1070 -0
- data/ext/boost/preprocessor/seq/transform.hpp +48 -0
- data/ext/boost/range/as_literal.hpp +10 -14
- data/ext/boost/range/begin.hpp +4 -4
- data/ext/boost/range/detail/implementation_help.hpp +4 -0
- data/ext/boost/range/end.hpp +4 -4
- data/ext/boost/range/iterator_range.hpp +31 -15
- data/ext/boost/ref.hpp +12 -1
- data/ext/boost/scoped_array.hpp +16 -0
- data/ext/boost/scoped_ptr.hpp +16 -0
- data/ext/boost/shared_ptr.hpp +2 -602
- data/ext/boost/{detail → smart_ptr}/bad_weak_ptr.hpp +4 -4
- data/ext/boost/{detail → smart_ptr/detail}/atomic_count.hpp +14 -19
- data/ext/boost/{detail → smart_ptr/detail}/atomic_count_gcc.hpp +13 -9
- data/ext/boost/{detail → smart_ptr/detail}/atomic_count_gcc_x86.hpp +5 -12
- data/ext/boost/{detail → smart_ptr/detail}/atomic_count_pthreads.hpp +5 -5
- data/ext/boost/{detail → smart_ptr/detail}/atomic_count_solaris.hpp +3 -3
- data/ext/boost/{detail → smart_ptr/detail}/atomic_count_sync.hpp +9 -5
- data/ext/boost/{detail → smart_ptr/detail}/atomic_count_win32.hpp +3 -3
- data/ext/boost/smart_ptr/detail/operator_bool.hpp +56 -0
- data/ext/boost/{detail → smart_ptr/detail}/shared_count.hpp +86 -17
- data/ext/boost/smart_ptr/detail/sp_convertible.hpp +76 -0
- data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +70 -0
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_acc_ia64.hpp +4 -4
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_cw_ppc.hpp +4 -4
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_cw_x86.hpp +4 -4
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_gcc_ia64.hpp +4 -4
- data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +172 -0
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_gcc_ppc.hpp +4 -4
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_gcc_sparc.hpp +7 -7
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_gcc_x86.hpp +4 -4
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_nt.hpp +4 -4
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_pt.hpp +4 -4
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_solaris.hpp +4 -4
- data/ext/boost/smart_ptr/detail/sp_counted_base_spin.hpp +131 -0
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_sync.hpp +8 -4
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_w32.hpp +4 -4
- data/ext/boost/{detail → smart_ptr/detail}/sp_counted_impl.hpp +5 -5
- data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +49 -0
- data/ext/boost/smart_ptr/detail/spinlock.hpp +53 -0
- data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +85 -0
- data/ext/boost/smart_ptr/detail/spinlock_nt.hpp +89 -0
- data/ext/boost/smart_ptr/detail/spinlock_pool.hpp +87 -0
- data/ext/boost/smart_ptr/detail/spinlock_pt.hpp +79 -0
- data/ext/boost/smart_ptr/detail/spinlock_sync.hpp +87 -0
- data/ext/boost/smart_ptr/detail/yield_k.hpp +149 -0
- data/ext/boost/smart_ptr/enable_shared_from_this.hpp +79 -0
- data/ext/boost/smart_ptr/scoped_array.hpp +107 -0
- data/ext/boost/smart_ptr/scoped_ptr.hpp +131 -0
- data/ext/boost/smart_ptr/shared_ptr.hpp +701 -0
- data/ext/boost/smart_ptr/weak_ptr.hpp +230 -0
- data/ext/boost/src/pthread/thread.cpp +115 -203
- data/ext/boost/src/tss_null.cpp +1 -1
- data/ext/boost/static_assert.hpp +14 -4
- data/ext/boost/thread.hpp +7 -2
- data/ext/boost/thread/barrier.hpp +63 -0
- data/ext/boost/thread/detail/force_cast.hpp +39 -0
- data/ext/boost/thread/detail/move.hpp +29 -2
- data/ext/boost/thread/detail/platform.hpp +3 -3
- data/ext/boost/thread/detail/singleton.hpp +59 -0
- data/ext/boost/thread/detail/thread.hpp +496 -0
- data/ext/boost/thread/detail/thread_group.hpp +105 -0
- data/ext/boost/thread/detail/thread_heap_alloc.hpp +23 -0
- data/ext/boost/thread/detail/thread_interruption.hpp +35 -0
- data/ext/boost/thread/detail/tss_hooks.hpp +82 -0
- data/ext/boost/thread/exceptions.hpp +174 -60
- data/ext/boost/thread/future.hpp +1364 -0
- data/ext/boost/thread/locks.hpp +899 -32
- data/ext/boost/thread/once.hpp +4 -0
- data/ext/boost/thread/pthread/condition_variable.hpp +16 -21
- data/ext/boost/thread/pthread/condition_variable_fwd.hpp +37 -3
- data/ext/boost/thread/pthread/mutex.hpp +20 -7
- data/ext/boost/thread/pthread/once.hpp +7 -2
- data/ext/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +5 -1
- data/ext/boost/thread/pthread/recursive_mutex.hpp +22 -5
- data/ext/boost/thread/pthread/shared_mutex.hpp +303 -0
- data/ext/boost/thread/pthread/thread_data.hpp +37 -10
- data/ext/boost/thread/pthread/thread_heap_alloc.hpp +242 -0
- data/ext/boost/thread/pthread/timespec.hpp +11 -3
- data/ext/boost/thread/shared_mutex.hpp +21 -0
- data/ext/boost/thread/thread.hpp +8 -3
- data/ext/boost/thread/thread_time.hpp +4 -0
- data/ext/boost/thread/tss.hpp +106 -13
- data/ext/boost/thread/xtime.hpp +6 -2
- data/ext/boost/throw_exception.hpp +36 -7
- data/ext/boost/token_functions.hpp +1 -1
- data/ext/boost/tokenizer.hpp +1 -1
- data/ext/boost/type_traits/add_pointer.hpp +1 -1
- data/ext/boost/type_traits/add_volatile.hpp +47 -0
- data/ext/boost/type_traits/alignment_of.hpp +29 -1
- data/ext/boost/type_traits/config.hpp +1 -1
- data/ext/boost/type_traits/conversion_traits.hpp +1 -1
- data/ext/boost/type_traits/has_trivial_destructor.hpp +42 -0
- data/ext/boost/type_traits/intrinsics.hpp +88 -1
- data/ext/boost/type_traits/is_abstract.hpp +14 -5
- data/ext/boost/type_traits/is_arithmetic.hpp +8 -0
- data/ext/boost/type_traits/is_array.hpp +3 -2
- data/ext/boost/type_traits/is_base_and_derived.hpp +254 -0
- data/ext/boost/type_traits/is_base_of.hpp +51 -0
- data/ext/boost/type_traits/is_class.hpp +12 -0
- data/ext/boost/type_traits/is_const.hpp +6 -2
- data/ext/boost/type_traits/is_convertible.hpp +14 -2
- data/ext/boost/type_traits/is_enum.hpp +10 -1
- data/ext/boost/type_traits/is_function.hpp +11 -3
- data/ext/boost/type_traits/is_fundamental.hpp +45 -0
- data/ext/boost/type_traits/is_integral.hpp +5 -0
- data/ext/boost/type_traits/is_member_function_pointer.hpp +5 -3
- data/ext/boost/type_traits/is_member_pointer.hpp +4 -2
- data/ext/boost/type_traits/is_pointer.hpp +3 -1
- data/ext/boost/type_traits/is_reference.hpp +4 -2
- data/ext/boost/type_traits/is_signed.hpp +135 -0
- data/ext/boost/type_traits/is_unsigned.hpp +130 -0
- data/ext/boost/type_traits/is_void.hpp +5 -0
- data/ext/boost/type_traits/is_volatile.hpp +4 -2
- data/ext/boost/type_traits/make_unsigned.hpp +137 -0
- data/ext/boost/type_traits/remove_reference.hpp +1 -1
- data/ext/boost/type_traits/type_with_alignment.hpp +106 -1
- data/ext/boost/utility.hpp +2 -1
- data/ext/boost/utility/addressof.hpp +61 -17
- data/ext/boost/utility/binary.hpp +708 -0
- data/ext/boost/utility/enable_if.hpp +2 -2
- data/ext/boost/weak_ptr.hpp +4 -174
- data/ext/common/AbstractSpawnManager.h +110 -0
- data/ext/common/Account.h +175 -0
- data/ext/common/AccountsDatabase.cpp +81 -0
- data/ext/common/AccountsDatabase.h +130 -0
- data/ext/common/AgentBase.cpp +323 -0
- data/ext/common/{Version.h → AgentBase.h} +14 -6
- data/ext/common/AgentsStarter.cpp +154 -0
- data/ext/common/AgentsStarter.h +81 -0
- data/ext/common/AgentsStarter.hpp +619 -0
- data/ext/common/ApplicationPool/Client.h +796 -0
- data/ext/common/{ApplicationPool.h → ApplicationPool/Interface.h} +108 -18
- data/ext/common/ApplicationPool/Pool.h +1315 -0
- data/ext/common/ApplicationPool/Server.h +475 -0
- data/ext/common/BCrypt.cpp +343 -0
- data/ext/common/BCrypt.h +73 -0
- data/ext/common/Blowfish.c +685 -0
- data/ext/common/Blowfish.h +103 -0
- data/ext/common/Constants.h +48 -0
- data/ext/common/EventedClient.h +598 -0
- data/ext/common/EventedMessageServer.h +327 -0
- data/ext/common/EventedServer.h +295 -0
- data/ext/common/Exceptions.h +78 -1
- data/ext/common/FileDescriptor.h +229 -0
- data/ext/common/HelperAgent/BacktracesServer.h +59 -0
- data/ext/common/Logging.cpp +8 -9
- data/ext/common/Logging.h +593 -21
- data/ext/common/LoggingAgent/ChangeNotifier.h +63 -0
- data/ext/common/LoggingAgent/DataStoreId.h +177 -0
- data/ext/common/LoggingAgent/LoggingServer.h +1343 -0
- data/ext/common/LoggingAgent/Main.cpp +278 -0
- data/ext/common/LoggingAgent/RemoteSender.h +457 -0
- data/ext/common/MessageChannel.h +196 -34
- data/ext/common/MessageClient.h +297 -0
- data/ext/common/MessageReadersWriters.h +508 -0
- data/ext/common/MessageServer.h +575 -0
- data/ext/common/PoolOptions.h +279 -117
- data/ext/common/Process.h +255 -0
- data/ext/common/RandomGenerator.h +160 -0
- data/ext/common/ResourceLocator.h +84 -0
- data/ext/common/ServerInstanceDir.h +343 -0
- data/ext/common/Session.h +470 -0
- data/ext/common/SpawnManager.h +256 -201
- data/ext/common/StaticString.h +79 -4
- data/ext/common/StringListCreator.h +2 -2
- data/ext/common/Utils.cpp +385 -397
- data/ext/common/Utils.h +79 -165
- data/ext/common/{Base64.cpp → Utils/Base64.cpp} +0 -0
- data/ext/common/{Base64.h → Utils/Base64.h} +27 -1
- data/ext/common/Utils/BlockingQueue.h +136 -0
- data/ext/common/Utils/BlockingScalar.h +50 -0
- data/ext/common/{CachedFileStat.cpp → Utils/CachedFileStat.cpp} +1 -1
- data/ext/common/{CachedFileStat.h → Utils/CachedFileStat.h} +1 -1
- data/ext/common/{CachedFileStat.hpp → Utils/CachedFileStat.hpp} +1 -1
- data/ext/common/{FileChangeChecker.h → Utils/FileChangeChecker.h} +1 -1
- data/ext/common/Utils/FileHandleGuard.h +81 -0
- data/ext/common/Utils/IOUtils.cpp +754 -0
- data/ext/common/Utils/IOUtils.h +253 -0
- data/ext/common/Utils/MD5.cpp +406 -0
- data/ext/common/Utils/MD5.h +98 -0
- data/ext/common/Utils/MemZeroGuard.h +103 -0
- data/ext/common/Utils/ProcessMetricsCollector.h +462 -0
- data/ext/common/Utils/ScopeGuard.h +72 -0
- data/ext/common/Utils/StrIntUtils.cpp +329 -0
- data/ext/common/Utils/StrIntUtils.h +228 -0
- data/ext/common/{SystemTime.cpp → Utils/SystemTime.cpp} +5 -1
- data/ext/common/Utils/SystemTime.h +201 -0
- data/ext/common/{Timer.h → Utils/Timer.h} +58 -18
- data/ext/common/Utils/VariantMap.h +363 -0
- data/ext/common/Utils/foo.cpp +10 -0
- data/ext/common/Watchdog.cpp +1034 -0
- data/ext/google/COPYING +28 -0
- data/ext/google/ChangeLog +167 -0
- data/ext/google/dense_hash_map +310 -0
- data/ext/google/dense_hash_set +287 -0
- data/ext/google/sparse_hash_map +294 -0
- data/ext/google/sparse_hash_set +275 -0
- data/ext/google/sparsehash/densehashtable.h +1062 -0
- data/ext/google/sparsehash/sparseconfig.h +55 -0
- data/ext/google/sparsehash/sparsehashtable.h +1015 -0
- data/ext/google/sparsetable +1468 -0
- data/ext/google/type_traits.h +250 -0
- data/ext/libev/Changes +302 -0
- data/ext/libev/LICENSE +36 -0
- data/ext/libev/Makefile.am +18 -0
- data/ext/libev/Makefile.in +685 -0
- data/ext/libev/README +58 -0
- data/ext/libev/aclocal.m4 +7549 -0
- data/ext/libev/autogen.sh +6 -0
- data/ext/libev/config.guess +1526 -0
- data/ext/libev/config.h +122 -0
- data/ext/libev/config.h.in +121 -0
- data/ext/libev/config.sub +1658 -0
- data/ext/libev/configure +22156 -0
- data/ext/libev/configure.ac +18 -0
- data/ext/libev/ev++.h +800 -0
- data/ext/libev/ev.c +3694 -0
- data/ext/libev/ev.h +705 -0
- data/ext/libev/ev_epoll.c +228 -0
- data/ext/libev/ev_kqueue.c +196 -0
- data/ext/libev/ev_poll.c +144 -0
- data/ext/libev/ev_port.c +165 -0
- data/ext/libev/ev_select.c +308 -0
- data/ext/libev/ev_vars.h +187 -0
- data/ext/libev/ev_win32.c +153 -0
- data/ext/libev/ev_wrap.h +178 -0
- data/ext/libev/event.c +401 -0
- data/ext/libev/event.h +158 -0
- data/ext/libev/install-sh +294 -0
- data/ext/libev/libev.m4 +38 -0
- data/ext/libev/ltmain.sh +6871 -0
- data/ext/libev/missing +336 -0
- data/ext/libev/mkinstalldirs +111 -0
- data/ext/nginx/Configuration.c +532 -182
- data/ext/nginx/Configuration.h +33 -10
- data/ext/nginx/ContentHandler.c +188 -53
- data/ext/nginx/ContentHandler.h +1 -1
- data/ext/nginx/{HelperServer.cpp → HelperAgent.cpp} +433 -299
- data/ext/nginx/HttpStatusExtractor.h +1 -1
- data/ext/nginx/ScgiRequestParser.h +68 -11
- data/ext/nginx/StaticContentHandler.c +4 -1
- data/ext/nginx/StaticContentHandler.h +1 -1
- data/ext/nginx/config +5 -5
- data/ext/nginx/ngx_http_passenger_module.c +315 -469
- data/ext/nginx/ngx_http_passenger_module.h +8 -17
- data/ext/oxt/backtrace.cpp +49 -41
- data/ext/oxt/backtrace.hpp +1 -1
- data/ext/oxt/detail/backtrace_disabled.hpp +1 -1
- data/ext/oxt/detail/backtrace_enabled.hpp +16 -15
- data/ext/oxt/detail/spin_lock_darwin.hpp +69 -0
- data/ext/oxt/detail/spin_lock_gcc_x86.hpp +3 -4
- data/ext/oxt/detail/spin_lock_portable.hpp +1 -1
- data/ext/oxt/detail/spin_lock_pthreads.hpp +1 -1
- data/ext/oxt/detail/tracable_exception_disabled.hpp +1 -1
- data/ext/oxt/detail/tracable_exception_enabled.hpp +1 -1
- data/ext/oxt/dynamic_thread_group.hpp +195 -0
- data/ext/oxt/macros.hpp +1 -1
- data/ext/oxt/spin_lock.hpp +4 -2
- data/ext/oxt/system_calls.cpp +129 -13
- data/ext/oxt/system_calls.hpp +16 -2
- data/ext/oxt/thread.cpp +1 -1
- data/ext/oxt/thread.hpp +49 -14
- data/ext/oxt/tracable_exception.cpp +5 -5
- data/ext/oxt/tracable_exception.hpp +1 -1
- data/ext/phusion_passenger/extconf.rb +7 -2
- data/ext/phusion_passenger/native_support.c +733 -33
- data/{bin → helper-scripts}/passenger-spawn-server +50 -12
- data/helper-scripts/prespawn +63 -0
- data/lib/phusion_passenger.rb +113 -0
- data/lib/phusion_passenger/abstract_installer.rb +50 -12
- data/lib/phusion_passenger/abstract_request_handler.rb +432 -171
- data/lib/phusion_passenger/abstract_server.rb +125 -122
- data/lib/phusion_passenger/abstract_server_collection.rb +51 -22
- data/lib/phusion_passenger/admin_tools.rb +1 -1
- data/lib/phusion_passenger/admin_tools/memory_stats.rb +299 -0
- data/lib/phusion_passenger/admin_tools/server_instance.rb +334 -0
- data/lib/phusion_passenger/analytics_logger.rb +342 -0
- data/lib/phusion_passenger/{application.rb → app_process.rb} +73 -24
- data/lib/phusion_passenger/classic_rails/application_spawner.rb +344 -0
- data/lib/phusion_passenger/{railz → classic_rails}/cgi_fixed.rb +2 -2
- data/lib/phusion_passenger/{railz → classic_rails}/framework_spawner.rb +75 -98
- data/lib/phusion_passenger/{railz → classic_rails}/request_handler.rb +8 -6
- data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_base_extension.rb +65 -0
- data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_benchmarking_extension.rb +48 -0
- data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_rescue_extension.rb +59 -0
- data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ar_abstract_adapter_extension.rb +54 -0
- data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/as_cache_extension.rb +130 -0
- data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/av_benchmark_helper_extension.rb +47 -0
- data/lib/phusion_passenger/classic_rails_extensions/init.rb +123 -0
- data/lib/phusion_passenger/console_text_template.rb +1 -1
- data/lib/phusion_passenger/constants.rb +9 -5
- data/lib/phusion_passenger/debug_logging.rb +104 -0
- data/lib/phusion_passenger/dependencies.rb +187 -4
- data/lib/phusion_passenger/exceptions.rb +4 -4
- data/lib/phusion_passenger/html_template.rb +6 -8
- data/lib/phusion_passenger/message_channel.rb +137 -21
- data/lib/phusion_passenger/message_client.rb +173 -0
- data/lib/phusion_passenger/native_support.rb +108 -0
- data/lib/phusion_passenger/packaging.rb +82 -13
- data/lib/phusion_passenger/platform_info.rb +84 -475
- data/lib/phusion_passenger/platform_info/apache.rb +329 -0
- data/lib/phusion_passenger/platform_info/binary_compatibility.rb +187 -0
- data/lib/phusion_passenger/platform_info/compiler.rb +154 -0
- data/lib/phusion_passenger/{events.rb → platform_info/curl.rb} +26 -23
- data/lib/phusion_passenger/platform_info/documentation_tools.rb +35 -0
- data/lib/phusion_passenger/platform_info/linux.rb +77 -0
- data/lib/phusion_passenger/platform_info/operating_system.rb +51 -0
- data/lib/phusion_passenger/platform_info/ruby.rb +198 -0
- data/lib/phusion_passenger/platform_info/zlib.rb +38 -0
- data/lib/phusion_passenger/plugin.rb +96 -0
- data/lib/phusion_passenger/public_api.rb +112 -0
- data/lib/phusion_passenger/rack/application_spawner.rb +146 -71
- data/lib/phusion_passenger/rack/request_handler.rb +36 -13
- data/lib/phusion_passenger/rails3_extensions/init.rb +204 -0
- data/lib/phusion_passenger/simple_benchmarking.rb +1 -1
- data/lib/phusion_passenger/spawn_manager.rb +137 -141
- data/lib/phusion_passenger/standalone/app_finder.rb +153 -0
- data/lib/phusion_passenger/standalone/command.rb +237 -0
- data/lib/phusion_passenger/standalone/config_file.rb +119 -0
- data/lib/phusion_passenger/standalone/help_command.rb +57 -0
- data/lib/phusion_passenger/standalone/main.rb +101 -0
- data/lib/phusion_passenger/standalone/package_runtime_command.rb +92 -0
- data/lib/phusion_passenger/standalone/runtime_installer.rb +466 -0
- data/lib/phusion_passenger/standalone/start_command.rb +510 -0
- data/lib/phusion_passenger/standalone/status_command.rb +62 -0
- data/lib/phusion_passenger/standalone/stop_command.rb +74 -0
- data/lib/phusion_passenger/standalone/utils.rb +42 -0
- data/lib/phusion_passenger/standalone/version_command.rb +42 -0
- data/lib/phusion_passenger/templates/framework_init_error.html.erb +1 -1
- data/lib/phusion_passenger/templates/standalone/cannot_write_to_dir.txt.erb +11 -0
- data/lib/phusion_passenger/templates/standalone/config.erb +69 -0
- data/lib/phusion_passenger/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +17 -0
- data/lib/phusion_passenger/templates/standalone/run_installer_as_root.txt.erb +8 -0
- data/lib/phusion_passenger/templates/standalone/welcome.txt.erb +8 -0
- data/lib/phusion_passenger/templates/standalone_default_root/index.html +1 -0
- data/lib/phusion_passenger/templates/version_not_found.html.erb +2 -2
- data/lib/phusion_passenger/utils.rb +476 -125
- data/lib/phusion_passenger/utils/file_system_watcher.rb +186 -0
- data/lib/phusion_passenger/utils/hosts_file_parser.rb +130 -0
- data/lib/phusion_passenger/utils/tmpdir.rb +70 -0
- data/lib/phusion_passenger/utils/unseekable_socket.rb +196 -0
- data/lib/phusion_passenger/wsgi/application_spawner.rb +24 -20
- data/lib/phusion_passenger/wsgi/request_handler.py +1 -1
- data/misc/copy_boost_headers.rb +36 -9
- data/misc/find_owner_pipe_leaks.rb +1 -1
- data/misc/render_error_pages.rb +1 -1
- data/misc/union_station_gateway.crt +32 -0
- data/test/config.yml.example +24 -13
- data/test/cxx/ApplicationPool_PoolTest.cpp +33 -0
- data/test/cxx/ApplicationPool_PoolTestCases.cpp +1029 -0
- data/test/cxx/ApplicationPool_ServerTest.cpp +308 -0
- data/test/cxx/ApplicationPool_Server_PoolTest.cpp +80 -0
- data/test/{Base64Test.cpp → cxx/Base64Test.cpp} +4 -2
- data/test/{CachedFileStatTest.cpp → cxx/CachedFileStatTest.cpp} +3 -3
- data/test/{CxxTestMain.cpp → cxx/CxxTestMain.cpp} +6 -27
- data/test/cxx/EventedClientTest.cpp +386 -0
- data/test/{FileChangeCheckerTest.cpp → cxx/FileChangeCheckerTest.cpp} +3 -5
- data/test/cxx/FileDescriptorTest.cpp +69 -0
- data/test/{HttpStatusExtractorTest.cpp → cxx/HttpStatusExtractorTest.cpp} +1 -1
- data/test/cxx/IOUtilsTest.cpp +398 -0
- data/test/cxx/LoggingTest.cpp +914 -0
- data/test/cxx/MessageChannelTest.cpp +672 -0
- data/test/cxx/MessageReadersWritersTest.cpp +574 -0
- data/test/cxx/MessageServerTest.cpp +383 -0
- data/test/{PoolOptionsTest.cpp → cxx/PoolOptionsTest.cpp} +2 -3
- data/test/{ScgiRequestParserTest.cpp → cxx/ScgiRequestParserTest.cpp} +53 -1
- data/test/cxx/ServerInstanceDirTest.cpp +186 -0
- data/test/cxx/SpawnManagerTest.cpp +161 -0
- data/test/cxx/StaticStringTest.cpp +86 -0
- data/test/{SystemTimeTest.cpp → cxx/SystemTimeTest.cpp} +2 -2
- data/test/cxx/TestSupport.cpp +166 -0
- data/test/cxx/TestSupport.h +254 -0
- data/test/cxx/UtilsTest.cpp +521 -0
- data/test/cxx/VariantMapTest.cpp +179 -0
- data/test/integration_tests/apache2_tests.rb +198 -127
- data/test/integration_tests/cgi_environment_spec.rb +26 -0
- data/test/integration_tests/mycook_spec.rb +2 -28
- data/test/integration_tests/nginx_tests.rb +125 -16
- data/test/integration_tests/spec_helper.rb +19 -0
- data/test/oxt/backtrace_test.cpp +19 -59
- data/test/oxt/counter.hpp +55 -0
- data/test/oxt/dynamic_thread_group_test.cpp +131 -0
- data/test/oxt/oxt_test_main.cpp +2 -2
- data/test/oxt/spin_lock_test.cpp +59 -0
- data/test/oxt/syscall_interruption_test.cpp +1 -1
- data/test/ruby/abstract_request_handler_spec.rb +346 -25
- data/test/ruby/abstract_server_collection_spec.rb +4 -3
- data/test/ruby/abstract_server_spec.rb +37 -27
- data/test/ruby/admin_tools_spec.rb +362 -0
- data/test/ruby/analytics_logger_spec.rb +253 -0
- data/test/ruby/{application_spec.rb → app_process_spec.rb} +14 -14
- data/test/ruby/classic_rails/application_spawner_spec.rb +89 -0
- data/test/ruby/classic_rails/framework_spawner_spec.rb +92 -0
- data/test/ruby/debug_logging_spec.rb +141 -0
- data/test/ruby/message_channel_spec.rb +51 -25
- data/test/ruby/rack/application_spawner_spec.rb +99 -82
- data/test/ruby/shared/abstract_server_spec.rb +23 -0
- data/test/ruby/shared/rails/analytics_logging_extensions_spec.rb +375 -0
- data/test/ruby/shared/spawners/classic_rails/framework_spawner_spec.rb +38 -0
- data/test/ruby/shared/spawners/classic_rails/lack_of_rails_gem_version_spec.rb +19 -0
- data/test/ruby/shared/spawners/classic_rails/spawner_spec.rb +15 -0
- data/test/ruby/shared/spawners/non_preloading_spawner_spec.rb +27 -0
- data/test/ruby/shared/spawners/preloading_spawner_spec.rb +29 -0
- data/test/ruby/shared/spawners/reload_all_spec.rb +36 -0
- data/test/ruby/shared/spawners/reload_single_spec.rb +52 -0
- data/test/ruby/shared/spawners/spawn_server_spec.rb +28 -0
- data/test/ruby/shared/spawners/spawner_spec.rb +273 -0
- data/test/ruby/shared/utils/pseudo_io_spec.rb +60 -0
- data/test/ruby/spawn_manager_spec.rb +104 -175
- data/test/ruby/spec_helper.rb +104 -0
- data/test/ruby/utils/file_system_watcher_spec.rb +221 -0
- data/test/ruby/utils/hosts_file_parser.rb +258 -0
- data/test/ruby/utils/unseekable_socket_spec.rb +66 -0
- data/test/ruby/utils_spec.rb +410 -59
- data/test/ruby/wsgi/application_spawner_spec.rb +16 -20
- data/test/stub/apache2/httpd.conf.erb +11 -6
- data/test/stub/message_channel.rb +3 -1
- data/test/stub/message_channel_2.rb +3 -1
- data/test/stub/message_channel_3.rb +5 -3
- data/test/stub/nginx/nginx.conf.erb +3 -2
- data/test/stub/rails_apps/1.2/empty/Rakefile +10 -0
- data/test/stub/rails_apps/1.2/empty/app/controllers/application.rb +7 -0
- data/test/stub/rails_apps/{foobar → 1.2/empty}/app/helpers/application_helper.rb +0 -0
- data/test/stub/rails_apps/{mycook → 1.2/empty}/config/boot.rb +3 -3
- data/test/stub/rails_apps/1.2/empty/config/database.yml +31 -0
- data/test/stub/rails_apps/1.2/empty/config/environment.rb +66 -0
- data/test/stub/rails_apps/1.2/empty/config/environments/development.rb +21 -0
- data/test/stub/rails_apps/{foobar → 1.2/empty}/config/environments/production.rb +0 -0
- data/test/stub/rails_apps/1.2/empty/config/environments/staging.rb +18 -0
- data/test/stub/rails_apps/1.2/empty/config/environments/test.rb +19 -0
- data/test/stub/rails_apps/1.2/empty/config/routes.rb +23 -0
- data/test/stub/rails_apps/1.2/empty/doc/README_FOR_APP +2 -0
- data/test/stub/rails_apps/{mycook → 1.2/empty}/public/404.html +0 -0
- data/test/stub/rails_apps/1.2/empty/public/500.html +30 -0
- data/test/stub/rails_apps/1.2/empty/public/dispatch.cgi +10 -0
- data/test/stub/rails_apps/1.2/empty/public/dispatch.fcgi +24 -0
- data/test/stub/rails_apps/1.2/empty/public/dispatch.rb +10 -0
- data/test/stub/rails_apps/{mycook → 1.2/empty}/public/favicon.ico +0 -0
- data/test/stub/rails_apps/{mycook → 1.2/empty}/public/images/rails.png +0 -0
- data/test/stub/rails_apps/1.2/empty/public/robots.txt +1 -0
- data/test/stub/rails_apps/1.2/empty/script/about +3 -0
- data/test/stub/rails_apps/1.2/empty/script/breakpointer +3 -0
- data/test/stub/rails_apps/1.2/empty/script/console +3 -0
- data/test/stub/rails_apps/1.2/empty/script/destroy +3 -0
- data/test/stub/rails_apps/1.2/empty/script/generate +3 -0
- data/test/stub/rails_apps/1.2/empty/script/performance/benchmarker +3 -0
- data/test/stub/rails_apps/1.2/empty/script/performance/profiler +3 -0
- data/test/stub/rails_apps/1.2/empty/script/plugin +3 -0
- data/test/stub/rails_apps/1.2/empty/script/process/inspector +3 -0
- data/test/stub/rails_apps/1.2/empty/script/process/reaper +3 -0
- data/test/stub/rails_apps/1.2/empty/script/process/spawner +3 -0
- data/test/stub/rails_apps/1.2/empty/script/runner +3 -0
- data/test/stub/rails_apps/1.2/empty/script/server +3 -0
- data/test/stub/rails_apps/1.2/empty/test/test_helper.rb +28 -0
- data/test/stub/rails_apps/2.0/empty/Rakefile +10 -0
- data/test/stub/rails_apps/2.0/empty/app/controllers/application.rb +10 -0
- data/test/stub/rails_apps/{mycook → 2.0/empty}/app/helpers/application_helper.rb +0 -0
- data/test/stub/rails_apps/{foobar → 2.0/empty}/config/boot.rb +3 -3
- data/test/stub/rails_apps/2.0/empty/config/database.yml +31 -0
- data/test/stub/rails_apps/2.0/empty/config/environment.rb +59 -0
- data/test/stub/rails_apps/{mycook → 2.0/empty}/config/environments/development.rb +1 -1
- data/test/stub/rails_apps/2.0/empty/config/environments/production.rb +18 -0
- data/test/stub/rails_apps/2.0/empty/config/environments/staging.rb +18 -0
- data/test/stub/rails_apps/2.0/empty/config/environments/test.rb +22 -0
- data/test/stub/rails_apps/{foobar → 2.0/empty}/config/initializers/inflections.rb +0 -0
- data/test/stub/rails_apps/{foobar → 2.0/empty}/config/initializers/mime_types.rb +0 -0
- data/test/stub/rails_apps/{foobar → 2.0/empty}/config/routes.rb +0 -0
- data/test/stub/rails_apps/2.0/empty/doc/README_FOR_APP +2 -0
- data/test/stub/rails_apps/2.0/empty/public/404.html +30 -0
- data/test/stub/rails_apps/{mycook → 2.0/empty}/public/422.html +0 -0
- data/test/stub/rails_apps/{mycook → 2.0/empty}/public/500.html +0 -0
- data/test/stub/rails_apps/2.0/empty/public/dispatch.cgi +10 -0
- data/test/stub/rails_apps/2.0/empty/public/dispatch.fcgi +24 -0
- data/test/stub/rails_apps/2.0/empty/public/dispatch.rb +10 -0
- data/test/stub/rails_apps/2.0/empty/public/favicon.ico +0 -0
- data/test/stub/rails_apps/2.0/empty/public/images/rails.png +0 -0
- data/test/stub/rails_apps/{mycook → 2.0/empty}/public/robots.txt +0 -0
- data/test/stub/rails_apps/2.0/empty/script/about +3 -0
- data/test/stub/rails_apps/2.0/empty/script/console +3 -0
- data/test/stub/rails_apps/2.0/empty/script/destroy +3 -0
- data/test/stub/rails_apps/2.0/empty/script/generate +3 -0
- data/test/stub/rails_apps/2.0/empty/script/performance/benchmarker +3 -0
- data/test/stub/rails_apps/2.0/empty/script/performance/profiler +3 -0
- data/test/stub/rails_apps/2.0/empty/script/performance/request +3 -0
- data/test/stub/rails_apps/2.0/empty/script/plugin +3 -0
- data/test/stub/rails_apps/2.0/empty/script/process/inspector +3 -0
- data/test/stub/rails_apps/2.0/empty/script/process/reaper +3 -0
- data/test/stub/rails_apps/2.0/empty/script/process/spawner +3 -0
- data/test/stub/rails_apps/2.0/empty/script/runner +3 -0
- data/test/stub/rails_apps/2.0/empty/script/server +3 -0
- data/test/stub/rails_apps/2.0/empty/test/test_helper.rb +38 -0
- data/test/stub/rails_apps/2.2/empty/Rakefile +10 -0
- data/test/stub/rails_apps/2.2/empty/app/controllers/application.rb +15 -0
- data/test/stub/rails_apps/2.2/empty/app/helpers/application_helper.rb +3 -0
- data/test/stub/rails_apps/2.2/empty/config/boot.rb +109 -0
- data/test/stub/rails_apps/2.2/empty/config/database.yml +31 -0
- data/test/stub/rails_apps/2.2/empty/config/environment.rb +75 -0
- data/test/stub/rails_apps/{foobar → 2.2/empty}/config/environments/development.rb +0 -0
- data/test/stub/rails_apps/2.2/empty/config/environments/production.rb +24 -0
- data/test/stub/rails_apps/2.2/empty/config/environments/staging.rb +24 -0
- data/test/stub/rails_apps/2.2/empty/config/environments/test.rb +22 -0
- data/test/stub/rails_apps/2.2/empty/config/initializers/inflections.rb +10 -0
- data/test/stub/rails_apps/{mycook → 2.2/empty}/config/initializers/mime_types.rb +0 -0
- data/test/stub/rails_apps/2.2/empty/config/initializers/new_rails_defaults.rb +17 -0
- data/test/stub/rails_apps/2.2/empty/config/locales/en.yml +5 -0
- data/test/stub/rails_apps/2.2/empty/config/routes.rb +43 -0
- data/test/stub/rails_apps/2.2/empty/doc/README_FOR_APP +5 -0
- data/test/stub/rails_apps/2.2/empty/public/404.html +30 -0
- data/test/stub/rails_apps/2.2/empty/public/422.html +30 -0
- data/test/stub/rails_apps/2.2/empty/public/500.html +33 -0
- data/test/stub/rails_apps/2.2/empty/public/dispatch.cgi +10 -0
- data/test/stub/rails_apps/2.2/empty/public/dispatch.fcgi +24 -0
- data/test/stub/rails_apps/2.2/empty/public/dispatch.rb +10 -0
- data/test/stub/rails_apps/2.2/empty/public/favicon.ico +0 -0
- data/test/stub/rails_apps/2.2/empty/public/images/rails.png +0 -0
- data/test/stub/rails_apps/2.2/empty/public/robots.txt +5 -0
- data/test/stub/rails_apps/2.2/empty/script/about +4 -0
- data/test/stub/rails_apps/2.2/empty/script/console +3 -0
- data/test/stub/rails_apps/2.2/empty/script/dbconsole +3 -0
- data/test/stub/rails_apps/2.2/empty/script/destroy +3 -0
- data/test/stub/rails_apps/2.2/empty/script/generate +3 -0
- data/test/stub/rails_apps/2.2/empty/script/performance/benchmarker +3 -0
- data/test/stub/rails_apps/2.2/empty/script/performance/profiler +3 -0
- data/test/stub/rails_apps/2.2/empty/script/performance/request +3 -0
- data/test/stub/rails_apps/2.2/empty/script/plugin +3 -0
- data/test/stub/rails_apps/2.2/empty/script/process/inspector +3 -0
- data/test/stub/rails_apps/2.2/empty/script/process/reaper +3 -0
- data/test/stub/rails_apps/2.2/empty/script/process/spawner +3 -0
- data/test/stub/rails_apps/2.2/empty/script/runner +3 -0
- data/test/stub/rails_apps/2.2/empty/script/server +3 -0
- data/test/stub/rails_apps/2.2/empty/test/performance/browsing_test.rb +9 -0
- data/test/stub/rails_apps/2.2/empty/test/test_helper.rb +38 -0
- data/test/stub/rails_apps/2.3/empty/Rakefile +10 -0
- data/test/stub/rails_apps/2.3/empty/app/controllers/application_controller.rb +10 -0
- data/test/stub/rails_apps/2.3/empty/app/helpers/application_helper.rb +3 -0
- data/test/stub/rails_apps/2.3/empty/config/boot.rb +110 -0
- data/test/stub/rails_apps/2.3/empty/config/database.yml +31 -0
- data/test/stub/rails_apps/2.3/empty/config/environment.rb +41 -0
- data/test/stub/rails_apps/2.3/empty/config/environments/development.rb +17 -0
- data/test/stub/rails_apps/2.3/empty/config/environments/production.rb +28 -0
- data/test/stub/rails_apps/2.3/empty/config/environments/staging.rb +28 -0
- data/test/stub/rails_apps/2.3/empty/config/environments/test.rb +28 -0
- data/test/stub/rails_apps/2.3/empty/config/initializers/backtrace_silencers.rb +7 -0
- data/test/stub/rails_apps/2.3/empty/config/initializers/inflections.rb +10 -0
- data/test/stub/rails_apps/2.3/empty/config/initializers/mime_types.rb +5 -0
- data/test/stub/rails_apps/2.3/empty/config/initializers/new_rails_defaults.rb +21 -0
- data/test/stub/rails_apps/2.3/empty/config/initializers/session_store.rb +15 -0
- data/test/stub/rails_apps/2.3/empty/config/locales/en.yml +5 -0
- data/test/stub/rails_apps/2.3/empty/config/routes.rb +43 -0
- data/test/stub/rails_apps/2.3/empty/db/seeds.rb +7 -0
- data/test/stub/rails_apps/2.3/empty/doc/README_FOR_APP +2 -0
- data/test/stub/rails_apps/2.3/empty/public/404.html +30 -0
- data/test/stub/rails_apps/2.3/empty/public/422.html +30 -0
- data/test/stub/rails_apps/2.3/empty/public/500.html +30 -0
- data/test/stub/rails_apps/2.3/empty/public/favicon.ico +0 -0
- data/test/stub/rails_apps/2.3/empty/public/images/rails.png +0 -0
- data/test/stub/rails_apps/2.3/empty/public/robots.txt +5 -0
- data/test/stub/rails_apps/2.3/empty/script/about +4 -0
- data/test/stub/rails_apps/2.3/empty/script/console +3 -0
- data/test/stub/rails_apps/2.3/empty/script/dbconsole +3 -0
- data/test/stub/rails_apps/2.3/empty/script/destroy +3 -0
- data/test/stub/rails_apps/2.3/empty/script/generate +3 -0
- data/test/stub/rails_apps/2.3/empty/script/performance/benchmarker +3 -0
- data/test/stub/rails_apps/2.3/empty/script/performance/profiler +3 -0
- data/test/stub/rails_apps/2.3/empty/script/plugin +3 -0
- data/test/stub/rails_apps/2.3/empty/script/runner +3 -0
- data/test/stub/rails_apps/2.3/empty/script/server +3 -0
- data/test/stub/rails_apps/2.3/empty/test/performance/browsing_test.rb +9 -0
- data/test/stub/rails_apps/2.3/empty/test/test_helper.rb +38 -0
- data/test/stub/rails_apps/2.3/foobar/Rakefile +10 -0
- data/test/stub/rails_apps/{foobar/app/controllers/application.rb → 2.3/foobar/app/controllers/application_controller.rb} +0 -0
- data/test/stub/rails_apps/{foobar → 2.3/foobar}/app/controllers/bar_controller_1.rb +0 -0
- data/test/stub/rails_apps/{foobar → 2.3/foobar}/app/controllers/bar_controller_2.rb +0 -0
- data/test/stub/rails_apps/{foobar → 2.3/foobar}/app/controllers/foo_controller.rb +0 -0
- data/test/stub/rails_apps/2.3/foobar/app/helpers/application_helper.rb +3 -0
- data/test/stub/rails_apps/2.3/foobar/config/boot.rb +110 -0
- data/test/stub/rails_apps/{foobar → 2.3/foobar}/config/database.yml +0 -0
- data/test/stub/rails_apps/{foobar → 2.3/foobar}/config/environment.rb +1 -1
- data/test/stub/rails_apps/2.3/foobar/config/environments/development.rb +17 -0
- data/test/stub/rails_apps/2.3/foobar/config/environments/production.rb +18 -0
- data/test/stub/rails_apps/2.3/foobar/config/environments/staging.rb +18 -0
- data/test/stub/rails_apps/{mycook → 2.3/foobar}/config/initializers/inflections.rb +0 -0
- data/test/stub/rails_apps/2.3/foobar/config/initializers/mime_types.rb +5 -0
- data/test/stub/rails_apps/2.3/foobar/config/routes.rb +35 -0
- data/test/stub/rails_apps/2.3/foobar/script/about +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/console +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/dbconsole +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/destroy +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/generate +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/performance/benchmarker +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/performance/profiler +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/performance/request +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/plugin +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/process/inspector +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/process/reaper +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/process/spawner +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/runner +3 -0
- data/test/stub/rails_apps/2.3/foobar/script/server +3 -0
- data/test/stub/rails_apps/2.3/mycook/Rakefile +10 -0
- data/test/stub/rails_apps/{mycook/app/controllers/application.rb → 2.3/mycook/app/controllers/application_controller.rb} +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/controllers/recipes_controller.rb +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/controllers/uploads_controller.rb +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/controllers/welcome_controller.rb +0 -0
- data/test/stub/rails_apps/2.3/mycook/app/helpers/application_helper.rb +3 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/layouts/default.rhtml +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/recipes/create.rhtml +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/recipes/index.rhtml +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/recipes/new.rhtml +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/uploads/index.rhtml +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/uploads/new.html.erb +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/welcome/cached.rhtml +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/welcome/index.rhtml +0 -0
- data/test/stub/rails_apps/2.3/mycook/config/boot.rb +110 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/config/database.yml +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/config/environment.rb +1 -1
- data/test/stub/rails_apps/2.3/mycook/config/environments/development.rb +18 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/config/environments/production.rb +0 -0
- data/test/stub/rails_apps/2.3/mycook/config/initializers/inflections.rb +10 -0
- data/test/stub/rails_apps/2.3/mycook/config/initializers/mime_types.rb +5 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/config/routes.rb +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/log/useless.txt +0 -0
- data/test/stub/rails_apps/2.3/mycook/public/404.html +30 -0
- data/test/stub/rails_apps/2.3/mycook/public/422.html +30 -0
- data/test/stub/rails_apps/2.3/mycook/public/500.html +30 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/dispatch.cgi +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/dispatch.fcgi +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/dispatch.rb +1 -1
- data/test/stub/rails_apps/2.3/mycook/public/favicon.ico +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/images/angrywizard.gif +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/images/cookbook.gif +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/images/header.png +0 -0
- data/test/stub/rails_apps/2.3/mycook/public/images/rails.png +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/javascripts/application.js +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/javascripts/controls.js +73 -73
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/javascripts/dragdrop.js +166 -165
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/javascripts/effects.js +174 -166
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/javascripts/prototype.js +362 -267
- data/test/stub/rails_apps/2.3/mycook/public/robots.txt +5 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/uploads.html +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/welcome/cached.html +0 -0
- data/test/stub/rails_apps/2.3/mycook/script/about +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/console +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/dbconsole +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/destroy +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/generate +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/performance/benchmarker +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/performance/profiler +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/performance/request +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/plugin +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/process/inspector +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/process/reaper +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/process/spawner +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/runner +3 -0
- data/test/stub/rails_apps/2.3/mycook/script/server +3 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/sites/some.site/public/uploads.html +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/sites/some.site/public/welcome/cached.html +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/tmp/cache/useless.txt +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/tmp/pids/useless.txt +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/tmp/sessions/useless.txt +0 -0
- data/test/stub/rails_apps/{mycook → 2.3/mycook}/tmp/sockets/useless.txt +0 -0
- data/test/stub/rails_apps/3.0/empty/Gemfile +22 -0
- data/test/stub/rails_apps/3.0/empty/Rakefile +10 -0
- data/test/stub/rails_apps/3.0/empty/app/controllers/application_controller.rb +4 -0
- data/test/stub/rails_apps/3.0/empty/app/helpers/application_helper.rb +2 -0
- data/test/stub/rails_apps/3.0/empty/app/views/layouts/application.html.erb +14 -0
- data/test/stub/rails_apps/3.0/empty/config.ru +4 -0
- data/test/stub/rails_apps/3.0/empty/config/application.rb +48 -0
- data/test/stub/rails_apps/3.0/empty/config/boot.rb +13 -0
- data/test/stub/rails_apps/3.0/empty/config/database.yml +22 -0
- data/test/stub/rails_apps/3.0/empty/config/environment.rb +5 -0
- data/test/stub/rails_apps/3.0/empty/config/environments/development.rb +19 -0
- data/test/stub/rails_apps/3.0/empty/config/environments/production.rb +48 -0
- data/test/stub/rails_apps/3.0/empty/config/environments/test.rb +32 -0
- data/test/stub/rails_apps/3.0/empty/config/initializers/backtrace_silencers.rb +7 -0
- data/test/stub/rails_apps/3.0/empty/config/initializers/inflections.rb +10 -0
- data/test/stub/rails_apps/3.0/empty/config/initializers/mime_types.rb +5 -0
- data/test/stub/rails_apps/3.0/empty/config/initializers/passenger.rb +1 -0
- data/test/stub/rails_apps/3.0/empty/config/initializers/secret_token.rb +7 -0
- data/test/stub/rails_apps/3.0/empty/config/initializers/session_store.rb +8 -0
- data/test/stub/rails_apps/3.0/empty/config/locales/en.yml +5 -0
- data/test/stub/rails_apps/3.0/empty/config/routes.rb +58 -0
- data/test/stub/rails_apps/3.0/empty/db/seeds.rb +7 -0
- data/test/stub/rails_apps/3.0/empty/doc/README_FOR_APP +2 -0
- data/test/stub/rails_apps/3.0/empty/log/development.log +3 -0
- data/test/stub/rails_apps/3.0/empty/public/404.html +26 -0
- data/test/stub/rails_apps/3.0/empty/public/422.html +26 -0
- data/test/stub/rails_apps/3.0/empty/public/500.html +26 -0
- data/test/stub/rails_apps/3.0/empty/public/favicon.ico +0 -0
- data/test/stub/rails_apps/3.0/empty/public/index.html +279 -0
- data/test/stub/rails_apps/3.0/empty/public/robots.txt +5 -0
- data/test/stub/rails_apps/3.0/empty/script/rails +9 -0
- data/test/stub/rails_apps/3.0/empty/test/performance/browsing_test.rb +9 -0
- data/test/stub/rails_apps/3.0/empty/test/test_helper.rb +13 -0
- data/test/stub/spawn_server.rb +4 -2
- data/test/stub/vendor_rails/minimal/actionpack/lib/action_controller.rb +3 -0
- data/test/stub/vendor_rails/minimal/railties/lib/initializer.rb +7 -2
- data/test/support/apache2_controller.rb +10 -2
- data/test/support/nginx_controller.rb +3 -2
- data/test/support/test_helper.rb +282 -46
- data/test/{support → tut}/tut.h +6 -0
- data/test/{support → tut}/tut_reporter.h +0 -0
- metadata +824 -266
- data/benchmark/ApplicationPool.cpp +0 -52
- data/benchmark/accept_vs_socketpair_vs_named_pipes.rb +0 -126
- data/benchmark/dispatcher.rb +0 -42
- data/benchmark/overhead_of_password_checking.rb +0 -81
- data/benchmark/socket_connections_vs_persistent_pipe.rb +0 -99
- data/benchmark/unix_sockets_vs_pipes.rb +0 -83
- data/ext/boost/LICENSE.TXT +0 -23
- data/ext/boost/VERSION.TXT +0 -1
- data/ext/boost/detail/sp_counted_base.hpp +0 -81
- data/ext/boost/src/pthread/exceptions.cpp +0 -146
- data/ext/boost/src/win32/exceptions.cpp +0 -124
- data/ext/boost/src/win32/thread.cpp +0 -629
- data/ext/boost/src/win32/timeconv.inl +0 -130
- data/ext/boost/src/win32/tss_dll.cpp +0 -72
- data/ext/boost/src/win32/tss_pe.cpp +0 -269
- data/ext/boost/thread/pthread/thread.hpp +0 -339
- data/ext/boost/thread/pthread/tss.hpp +0 -103
- data/ext/common/Application.h +0 -511
- data/ext/common/ApplicationPoolServer.h +0 -794
- data/ext/common/ApplicationPoolServerExecutable.cpp +0 -743
- data/ext/common/ApplicationPoolStatusReporter.h +0 -336
- data/ext/common/DummySpawnManager.h +0 -108
- data/ext/common/StandardApplicationPool.h +0 -821
- data/ext/common/SystemTime.h +0 -88
- data/lib/phusion_passenger/admin_tools/control_process.rb +0 -150
- data/lib/phusion_passenger/railz/application_spawner.rb +0 -463
- data/lib/phusion_passenger/templates/invalid_app_root.html.erb +0 -9
- data/test/ApplicationPoolServerTest.cpp +0 -114
- data/test/ApplicationPoolServer_ApplicationPoolTest.cpp +0 -33
- data/test/ApplicationPoolTest.cpp +0 -599
- data/test/MessageChannelTest.cpp +0 -320
- data/test/SpawnManagerTest.cpp +0 -64
- data/test/StandardApplicationPoolTest.cpp +0 -27
- data/test/StaticStringTest.cpp +0 -51
- data/test/UtilsTest.cpp +0 -257
- data/test/ruby/rails/application_spawner_spec.rb +0 -159
- data/test/ruby/rails/framework_spawner_spec.rb +0 -133
- data/test/ruby/rails/minimal_spawner_spec.rb +0 -93
- data/test/ruby/rails/spawner_error_handling_spec.rb +0 -107
- data/test/ruby/rails/spawner_privilege_lowering_spec.rb +0 -97
- data/test/ruby/spawn_server_spec.rb +0 -26
- data/test/stub/MessageServer.dSYM/Contents/Info.plist +0 -25
- data/test/stub/MessageServer.dSYM/Contents/Resources/DWARF/MessageServer +0 -0
- data/test/support/Support.cpp +0 -84
- data/test/support/Support.h +0 -118
- data/test/support/config.rb +0 -38
- data/test/support/run_rspec_tests.rb +0 -10
@@ -6,7 +6,7 @@
|
|
6
6
|
* Boost Software License, Version 1.0. (See accompanying
|
7
7
|
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
|
8
8
|
* Author: Jeff Garland
|
9
|
-
* $Date:
|
9
|
+
* $Date: 2009-02-01 06:29:43 -0500 (Sun, 01 Feb 2009) $
|
10
10
|
*/
|
11
11
|
|
12
12
|
#include <sstream>
|
@@ -49,6 +49,7 @@ gather_month_strings(const std::locale& locale, bool short_strings=true)
|
|
49
49
|
{
|
50
50
|
//grab the needed strings by using the locale to
|
51
51
|
//output each month
|
52
|
+
const charT* p_outfmt = outfmt.c_str(), *p_outfmt_end = p_outfmt + outfmt.size();
|
52
53
|
for (int m=0; m < 12; m++) {
|
53
54
|
tm tm_value;
|
54
55
|
tm_value.tm_mon = m;
|
@@ -56,8 +57,8 @@ gather_month_strings(const std::locale& locale, bool short_strings=true)
|
|
56
57
|
ostream_iter_type oitr(ss);
|
57
58
|
std::use_facet<time_put_facet_type>(locale).put(oitr, ss, ss.fill(),
|
58
59
|
&tm_value,
|
59
|
-
|
60
|
-
|
60
|
+
p_outfmt,
|
61
|
+
p_outfmt_end);
|
61
62
|
months.push_back(ss.str());
|
62
63
|
}
|
63
64
|
}
|
@@ -101,6 +102,7 @@ gather_weekday_strings(const std::locale& locale, bool short_strings=true)
|
|
101
102
|
{
|
102
103
|
//grab the needed strings by using the locale to
|
103
104
|
//output each month / weekday
|
105
|
+
const charT* p_outfmt = outfmt.c_str(), *p_outfmt_end = p_outfmt + outfmt.size();
|
104
106
|
for (int i=0; i < 7; i++) {
|
105
107
|
tm tm_value;
|
106
108
|
tm_value.tm_wday = i;
|
@@ -108,8 +110,8 @@ gather_weekday_strings(const std::locale& locale, bool short_strings=true)
|
|
108
110
|
ostream_iter_type oitr(ss);
|
109
111
|
std::use_facet<time_put_facet_type>(locale).put(oitr, ss, ss.fill(),
|
110
112
|
&tm_value,
|
111
|
-
|
112
|
-
|
113
|
+
p_outfmt,
|
114
|
+
p_outfmt_end);
|
113
115
|
|
114
116
|
weekdays.push_back(ss.str());
|
115
117
|
}
|
@@ -6,16 +6,17 @@
|
|
6
6
|
* Boost Software License, Version 1.0. (See accompanying
|
7
7
|
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
|
8
8
|
* Author: Jeff Garland, Bart Garst
|
9
|
-
* $Date: 2008-
|
9
|
+
* $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $
|
10
10
|
*/
|
11
11
|
|
12
12
|
|
13
13
|
/*! @file time.hpp
|
14
14
|
This file contains the interface for the time associated classes.
|
15
15
|
*/
|
16
|
-
#include "boost/date_time/time_defs.hpp"
|
17
|
-
#include "boost/operators.hpp"
|
18
16
|
#include <string>
|
17
|
+
#include <boost/operators.hpp>
|
18
|
+
#include <boost/date_time/time_defs.hpp>
|
19
|
+
#include <boost/date_time/special_defs.hpp>
|
19
20
|
|
20
21
|
namespace boost {
|
21
22
|
namespace date_time {
|
@@ -77,21 +78,21 @@ namespace date_time {
|
|
77
78
|
/*! Optional bool parameter will return time zone as an offset
|
78
79
|
* (ie "+07:00"). Empty string is returned for classes that do
|
79
80
|
* not use a time_zone */
|
80
|
-
std::string zone_name(bool as_offset
|
81
|
+
std::string zone_name(bool /*as_offset*/=false) const
|
81
82
|
{
|
82
83
|
return time_system::zone_name(time_);
|
83
84
|
}
|
84
85
|
/*! Optional bool parameter will return time zone as an offset
|
85
86
|
* (ie "+07:00"). Empty string is returned for classes that do
|
86
87
|
* not use a time_zone */
|
87
|
-
std::string zone_abbrev(bool as_offset
|
88
|
+
std::string zone_abbrev(bool /*as_offset*/=false) const
|
88
89
|
{
|
89
90
|
return time_system::zone_name(time_);
|
90
91
|
}
|
91
92
|
//! An empty string is returned for classes that do not use a time_zone
|
92
93
|
std::string zone_as_posix_string() const
|
93
94
|
{
|
94
|
-
return std::string(
|
95
|
+
return std::string();
|
95
96
|
}
|
96
97
|
|
97
98
|
//! check to see if date is not a value
|
@@ -6,7 +6,7 @@
|
|
6
6
|
* Boost Software License, Version 1.0. (See accompanying
|
7
7
|
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
|
8
8
|
* Author: Jeff Garland
|
9
|
-
* $Date: 2008-
|
9
|
+
* $Date: 2008-11-12 14:37:53 -0500 (Wed, 12 Nov 2008) $
|
10
10
|
*/
|
11
11
|
|
12
12
|
|
@@ -20,7 +20,17 @@ namespace boost {
|
|
20
20
|
namespace date_time {
|
21
21
|
|
22
22
|
//!Defines some nice types for handling time level resolutions
|
23
|
-
enum time_resolutions {
|
23
|
+
enum time_resolutions {
|
24
|
+
sec,
|
25
|
+
tenth,
|
26
|
+
hundreth, // deprecated misspelled version of hundredth
|
27
|
+
hundredth = hundreth,
|
28
|
+
milli,
|
29
|
+
ten_thousandth,
|
30
|
+
micro,
|
31
|
+
nano,
|
32
|
+
NumResolutions
|
33
|
+
};
|
24
34
|
|
25
35
|
//! Flags for daylight savings or summer time
|
26
36
|
enum dst_flags {not_dst, is_dst, calculate};
|
@@ -6,18 +6,19 @@
|
|
6
6
|
* Boost Software License, Version 1.0. (See accompanying
|
7
7
|
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
|
8
8
|
* Author: Jeff Garland, Bart Garst
|
9
|
-
* $Date:
|
9
|
+
* $Date: 2009-06-04 04:24:49 -0400 (Thu, 04 Jun 2009) $
|
10
10
|
*/
|
11
11
|
|
12
|
-
#include
|
13
|
-
#include
|
14
|
-
#include
|
15
|
-
#include
|
12
|
+
#include <boost/cstdint.hpp>
|
13
|
+
#include <boost/operators.hpp>
|
14
|
+
#include <boost/date_time/time_defs.hpp>
|
15
|
+
#include <boost/date_time/special_defs.hpp>
|
16
|
+
#include <boost/date_time/compiler_config.hpp>
|
16
17
|
|
17
18
|
namespace boost {
|
18
19
|
namespace date_time {
|
19
20
|
|
20
|
-
|
21
|
+
|
21
22
|
//! Represents some amount of elapsed time measure to a given resolution
|
22
23
|
/*! This class represents a standard set of capabilities for all
|
23
24
|
counted time durations. Time duration implementations should derive
|
@@ -30,13 +31,13 @@ namespace date_time {
|
|
30
31
|
*/
|
31
32
|
template<class T, typename rep_type>
|
32
33
|
class time_duration : private
|
33
|
-
boost::less_than_comparable<T
|
34
|
+
boost::less_than_comparable<T
|
34
35
|
, boost::equality_comparable<T
|
35
36
|
> >
|
36
37
|
/* dividable, addable, and subtractable operator templates
|
37
|
-
* won't work with this class (MSVC++ 6.0). return type
|
38
|
-
* from '+=' is different than expected return type
|
39
|
-
* from '+'. multipliable probably wont work
|
38
|
+
* won't work with this class (MSVC++ 6.0). return type
|
39
|
+
* from '+=' is different than expected return type
|
40
|
+
* from '+'. multipliable probably wont work
|
40
41
|
* either (haven't tried) */
|
41
42
|
{
|
42
43
|
public:
|
@@ -50,12 +51,12 @@ namespace date_time {
|
|
50
51
|
typedef typename rep_type::tick_type tick_type;
|
51
52
|
typedef typename rep_type::impl_type impl_type;
|
52
53
|
|
53
|
-
time_duration() : ticks_(0) {}
|
54
|
-
time_duration(hour_type hours_in,
|
55
|
-
min_type minutes_in,
|
54
|
+
time_duration() : ticks_(0) {}
|
55
|
+
time_duration(hour_type hours_in,
|
56
|
+
min_type minutes_in,
|
56
57
|
sec_type seconds_in=0,
|
57
58
|
fractional_seconds_type frac_sec_in = 0) :
|
58
|
-
ticks_(rep_type::to_tick_count(hours_in,minutes_in,seconds_in,frac_sec_in))
|
59
|
+
ticks_(rep_type::to_tick_count(hours_in,minutes_in,seconds_in,frac_sec_in))
|
59
60
|
{}
|
60
61
|
// copy constructor required for dividable<>
|
61
62
|
//! Construct from another time_duration (Copy constructor)
|
@@ -136,17 +137,17 @@ namespace date_time {
|
|
136
137
|
}
|
137
138
|
duration_type invert_sign() const
|
138
139
|
{
|
139
|
-
return duration_type(ticks_ * (-1));
|
140
|
-
}
|
140
|
+
return duration_type(ticks_ * (-1));
|
141
|
+
}
|
141
142
|
bool is_negative() const
|
142
143
|
{
|
143
144
|
return ticks_ < 0;
|
144
|
-
}
|
145
|
-
bool operator<(const time_duration& rhs) const
|
145
|
+
}
|
146
|
+
bool operator<(const time_duration& rhs) const
|
146
147
|
{
|
147
148
|
return ticks_ < rhs.ticks_;
|
148
149
|
}
|
149
|
-
bool operator==(const time_duration& rhs) const
|
150
|
+
bool operator==(const time_duration& rhs) const
|
150
151
|
{
|
151
152
|
return ticks_ == rhs.ticks_;
|
152
153
|
}
|
@@ -188,13 +189,13 @@ namespace date_time {
|
|
188
189
|
{
|
189
190
|
return duration_type(ticks_ * rhs);
|
190
191
|
}
|
191
|
-
duration_type operator*=(int divisor)
|
192
|
+
duration_type operator*=(int divisor)
|
192
193
|
{
|
193
194
|
ticks_ = ticks_ * divisor;
|
194
195
|
return duration_type(ticks_);
|
195
196
|
}
|
196
|
-
tick_type ticks() const
|
197
|
-
{
|
197
|
+
tick_type ticks() const
|
198
|
+
{
|
198
199
|
return traits_type::as_number(ticks_);
|
199
200
|
}
|
200
201
|
|
@@ -258,9 +259,9 @@ namespace date_time {
|
|
258
259
|
|
259
260
|
//! Template for instantiating derived adjusting durations
|
260
261
|
/* These templates are designed to work with multiples of
|
261
|
-
* 10 for frac_of_second and resoultion adjustment
|
262
|
+
* 10 for frac_of_second and resoultion adjustment
|
262
263
|
*/
|
263
|
-
|
264
|
+
template<class base_duration, boost::int64_t frac_of_second>
|
264
265
|
class subsecond_duration : public base_duration
|
265
266
|
{
|
266
267
|
public:
|
@@ -270,8 +271,8 @@ namespace date_time {
|
|
270
271
|
{}
|
271
272
|
};
|
272
273
|
|
273
|
-
|
274
|
-
|
274
|
+
|
275
|
+
|
275
276
|
} } //namespace date_time
|
276
277
|
|
277
278
|
|
@@ -3,19 +3,31 @@
|
|
3
3
|
#define _DATE_TIME_FACET__HPP__
|
4
4
|
|
5
5
|
/* Copyright (c) 2004-2005 CrystalClear Software, Inc.
|
6
|
-
* Use, modification and distribution is subject to the
|
6
|
+
* Use, modification and distribution is subject to the
|
7
7
|
* Boost Software License, Version 1.0. (See accompanying
|
8
8
|
* file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
|
9
9
|
* Author: Martin Andrian, Jeff Garland, Bart Garst
|
10
|
-
* $Date:
|
10
|
+
* $Date: 2010-01-10 14:17:23 -0500 (Sun, 10 Jan 2010) $
|
11
11
|
*/
|
12
12
|
|
13
|
-
#include
|
14
|
-
#include
|
15
|
-
#include
|
13
|
+
#include <cctype>
|
14
|
+
#include <locale>
|
15
|
+
#include <limits>
|
16
|
+
#include <string>
|
16
17
|
#include <sstream>
|
17
18
|
#include <iomanip>
|
19
|
+
#include <iterator> // i/ostreambuf_iterator
|
18
20
|
#include <exception>
|
21
|
+
#include <boost/assert.hpp>
|
22
|
+
#include <boost/lexical_cast.hpp>
|
23
|
+
#include <boost/throw_exception.hpp>
|
24
|
+
#include <boost/algorithm/string/erase.hpp>
|
25
|
+
#include <boost/algorithm/string/replace.hpp>
|
26
|
+
#include <boost/date_time/compiler_config.hpp>
|
27
|
+
#include <boost/date_time/date_facet.hpp>
|
28
|
+
#include <boost/date_time/string_convert.hpp>
|
29
|
+
#include <boost/date_time/special_defs.hpp>
|
30
|
+
#include <boost/date_time/time_resolution_traits.hpp> // absolute_value
|
19
31
|
|
20
32
|
namespace boost {
|
21
33
|
namespace date_time {
|
@@ -28,6 +40,8 @@ namespace date_time {
|
|
28
40
|
static const char_type fractional_seconds_or_none_format[3]; // F
|
29
41
|
static const char_type seconds_with_fractional_seconds_format[3]; // s
|
30
42
|
static const char_type seconds_format[3]; // S
|
43
|
+
static const char_type hours_format[3]; // H
|
44
|
+
static const char_type unrestricted_hours_format[3]; // O
|
31
45
|
static const char_type standard_format[9]; // x X
|
32
46
|
static const char_type zone_abbrev_format[3]; // z
|
33
47
|
static const char_type zone_name_format[3]; // Z
|
@@ -42,121 +56,129 @@ namespace date_time {
|
|
42
56
|
static const char_type iso_time_format_specifier[18];
|
43
57
|
static const char_type iso_time_format_extended_specifier[22];
|
44
58
|
//default ptime format is YYYY-Mon-DD HH:MM:SS[.fff...][ zzz]
|
45
|
-
static const char_type default_time_format[23];
|
59
|
+
static const char_type default_time_format[23];
|
46
60
|
// default_time_input_format uses a posix_time_zone_string instead of a time zone abbrev
|
47
|
-
static const char_type default_time_input_format[24];
|
61
|
+
static const char_type default_time_input_format[24];
|
48
62
|
//default time_duration format is HH:MM:SS[.fff...]
|
49
63
|
static const char_type default_time_duration_format[11];
|
50
64
|
};
|
51
65
|
|
52
|
-
template <class CharT>
|
53
|
-
const typename time_formats<CharT>::char_type
|
66
|
+
template <class CharT>
|
67
|
+
const typename time_formats<CharT>::char_type
|
54
68
|
time_formats<CharT>::fractional_seconds_format[3] = {'%','f'};
|
55
69
|
|
56
|
-
template <class CharT>
|
57
|
-
const typename time_formats<CharT>::char_type
|
70
|
+
template <class CharT>
|
71
|
+
const typename time_formats<CharT>::char_type
|
58
72
|
time_formats<CharT>::fractional_seconds_or_none_format[3] = {'%','F'};
|
59
73
|
|
60
|
-
template <class CharT>
|
61
|
-
const typename time_formats<CharT>::char_type
|
62
|
-
time_formats<CharT>::seconds_with_fractional_seconds_format[3] =
|
74
|
+
template <class CharT>
|
75
|
+
const typename time_formats<CharT>::char_type
|
76
|
+
time_formats<CharT>::seconds_with_fractional_seconds_format[3] =
|
63
77
|
{'%','s'};
|
64
78
|
|
65
|
-
template <class CharT>
|
66
|
-
const typename time_formats<CharT>::char_type
|
79
|
+
template <class CharT>
|
80
|
+
const typename time_formats<CharT>::char_type
|
67
81
|
time_formats<CharT>::seconds_format[3] = {'%','S'};
|
68
82
|
|
69
|
-
template <class CharT>
|
70
|
-
const typename time_formats<CharT>::char_type
|
83
|
+
template <class CharT>
|
84
|
+
const typename time_formats<CharT>::char_type
|
85
|
+
time_formats<CharT>::hours_format[3] = {'%','H'};
|
86
|
+
|
87
|
+
template <class CharT>
|
88
|
+
const typename time_formats<CharT>::char_type
|
89
|
+
time_formats<CharT>::unrestricted_hours_format[3] = {'%','O'};
|
90
|
+
|
91
|
+
template <class CharT>
|
92
|
+
const typename time_formats<CharT>::char_type
|
71
93
|
//time_formats<CharT>::standard_format[5] = {'%','c',' ','%','z'};
|
72
94
|
time_formats<CharT>::standard_format[9] = {'%','x',' ','%','X',' ','%','z'};
|
73
95
|
|
74
|
-
template <class CharT>
|
75
|
-
const typename time_formats<CharT>::char_type
|
96
|
+
template <class CharT>
|
97
|
+
const typename time_formats<CharT>::char_type
|
76
98
|
time_formats<CharT>::zone_abbrev_format[3] = {'%','z'};
|
77
99
|
|
78
|
-
template <class CharT>
|
79
|
-
const typename time_formats<CharT>::char_type
|
100
|
+
template <class CharT>
|
101
|
+
const typename time_formats<CharT>::char_type
|
80
102
|
time_formats<CharT>::zone_name_format[3] = {'%','Z'};
|
81
103
|
|
82
|
-
template <class CharT>
|
83
|
-
const typename time_formats<CharT>::char_type
|
104
|
+
template <class CharT>
|
105
|
+
const typename time_formats<CharT>::char_type
|
84
106
|
time_formats<CharT>::zone_iso_format[3] = {'%','q'};
|
85
107
|
|
86
|
-
template <class CharT>
|
87
|
-
const typename time_formats<CharT>::char_type
|
108
|
+
template <class CharT>
|
109
|
+
const typename time_formats<CharT>::char_type
|
88
110
|
time_formats<CharT>::zone_iso_extended_format[3] ={'%','Q'};
|
89
111
|
|
90
|
-
template <class CharT>
|
91
|
-
const typename time_formats<CharT>::char_type
|
112
|
+
template <class CharT>
|
113
|
+
const typename time_formats<CharT>::char_type
|
92
114
|
time_formats<CharT>::posix_zone_string_format[4] ={'%','Z','P'};
|
93
115
|
|
94
|
-
template <class CharT>
|
95
|
-
const typename time_formats<CharT>::char_type
|
116
|
+
template <class CharT>
|
117
|
+
const typename time_formats<CharT>::char_type
|
96
118
|
time_formats<CharT>::duration_seperator[2] = {':'};
|
97
119
|
|
98
|
-
template <class CharT>
|
99
|
-
const typename time_formats<CharT>::char_type
|
120
|
+
template <class CharT>
|
121
|
+
const typename time_formats<CharT>::char_type
|
100
122
|
time_formats<CharT>::negative_sign[2] = {'-'};
|
101
123
|
|
102
|
-
template <class CharT>
|
103
|
-
const typename time_formats<CharT>::char_type
|
124
|
+
template <class CharT>
|
125
|
+
const typename time_formats<CharT>::char_type
|
104
126
|
time_formats<CharT>::positive_sign[2] = {'+'};
|
105
127
|
|
106
|
-
template <class CharT>
|
107
|
-
const typename time_formats<CharT>::char_type
|
128
|
+
template <class CharT>
|
129
|
+
const typename time_formats<CharT>::char_type
|
108
130
|
time_formats<CharT>::duration_sign_negative_only[3] ={'%','-'};
|
109
131
|
|
110
|
-
template <class CharT>
|
111
|
-
const typename time_formats<CharT>::char_type
|
132
|
+
template <class CharT>
|
133
|
+
const typename time_formats<CharT>::char_type
|
112
134
|
time_formats<CharT>::duration_sign_always[3] ={'%','+'};
|
113
135
|
|
114
|
-
template <class CharT>
|
115
|
-
const typename time_formats<CharT>::char_type
|
116
|
-
time_formats<CharT>::iso_time_format_specifier[18] =
|
117
|
-
{'%', 'Y', '%', 'm', '%', 'd', 'T',
|
136
|
+
template <class CharT>
|
137
|
+
const typename time_formats<CharT>::char_type
|
138
|
+
time_formats<CharT>::iso_time_format_specifier[18] =
|
139
|
+
{'%', 'Y', '%', 'm', '%', 'd', 'T',
|
118
140
|
'%', 'H', '%', 'M', '%', 'S', '%', 'F', '%','q' };
|
119
141
|
|
120
|
-
template <class CharT>
|
121
|
-
const typename time_formats<CharT>::char_type
|
122
|
-
time_formats<CharT>::iso_time_format_extended_specifier[22] =
|
123
|
-
{'%', 'Y', '-', '%', 'm', '-', '%', 'd', ' ',
|
142
|
+
template <class CharT>
|
143
|
+
const typename time_formats<CharT>::char_type
|
144
|
+
time_formats<CharT>::iso_time_format_extended_specifier[22] =
|
145
|
+
{'%', 'Y', '-', '%', 'm', '-', '%', 'd', ' ',
|
124
146
|
'%', 'H', ':', '%', 'M', ':', '%', 'S', '%', 'F','%','Q'};
|
125
147
|
|
126
|
-
template <class CharT>
|
127
|
-
const typename time_formats<CharT>::char_type
|
128
|
-
time_formats<CharT>::default_time_format[23] =
|
148
|
+
template <class CharT>
|
149
|
+
const typename time_formats<CharT>::char_type
|
150
|
+
time_formats<CharT>::default_time_format[23] =
|
129
151
|
{'%','Y','-','%','b','-','%','d',' ',
|
130
152
|
'%','H',':','%','M',':','%','S','%','F',' ','%','z'};
|
131
153
|
|
132
|
-
template <class CharT>
|
133
|
-
const typename time_formats<CharT>::char_type
|
134
|
-
time_formats<CharT>::default_time_input_format[24] =
|
154
|
+
template <class CharT>
|
155
|
+
const typename time_formats<CharT>::char_type
|
156
|
+
time_formats<CharT>::default_time_input_format[24] =
|
135
157
|
{'%','Y','-','%','b','-','%','d',' ',
|
136
158
|
'%','H',':','%','M',':','%','S','%','F',' ','%','Z','P'};
|
137
159
|
|
138
|
-
template <class CharT>
|
139
|
-
const typename time_formats<CharT>::char_type
|
140
|
-
time_formats<CharT>::default_time_duration_format[11] =
|
141
|
-
{'%','
|
160
|
+
template <class CharT>
|
161
|
+
const typename time_formats<CharT>::char_type
|
162
|
+
time_formats<CharT>::default_time_duration_format[11] =
|
163
|
+
{'%','O',':','%','M',':','%','S','%','F'};
|
142
164
|
|
143
165
|
|
144
166
|
|
145
|
-
/*! Facet used for format-based output of time types
|
167
|
+
/*! Facet used for format-based output of time types
|
146
168
|
* This class provides for the use of format strings to output times. In addition
|
147
169
|
* to the flags for formatting date elements, the following are the allowed format flags:
|
148
170
|
* - %x %X => default format - enables addition of more flags to default (ie. "%x %X %z")
|
149
171
|
* - %f => fractional seconds ".123456"
|
150
172
|
* - %F => fractional seconds or none: like frac sec but empty if frac sec == 0
|
151
|
-
* - %s => seconds w/ fractional sec "02.123" (this is the same as "%S%f)
|
173
|
+
* - %s => seconds w/ fractional sec "02.123" (this is the same as "%S%f)
|
152
174
|
* - %S => seconds "02"
|
153
175
|
* - %z => abbreviated time zone "EDT"
|
154
176
|
* - %Z => full time zone name "Eastern Daylight Time"
|
155
177
|
*/
|
156
178
|
template <class time_type,
|
157
|
-
class CharT,
|
179
|
+
class CharT,
|
158
180
|
class OutItrT = std::ostreambuf_iterator<CharT, std::char_traits<CharT> > >
|
159
|
-
class time_facet :
|
181
|
+
class time_facet :
|
160
182
|
public boost::date_time::date_facet<typename time_type::date_type , CharT, OutItrT> {
|
161
183
|
public:
|
162
184
|
typedef typename time_type::date_type date_type;
|
@@ -172,6 +194,8 @@ namespace date_time {
|
|
172
194
|
static const char_type* fractional_seconds_or_none_format; // %F
|
173
195
|
static const char_type* seconds_with_fractional_seconds_format; // %s
|
174
196
|
static const char_type* seconds_format; // %S
|
197
|
+
static const char_type* hours_format; // %H
|
198
|
+
static const char_type* unrestricted_hours_format; // %O
|
175
199
|
static const char_type* standard_format; // %x X
|
176
200
|
static const char_type* zone_abbrev_format; // %z
|
177
201
|
static const char_type* zone_name_format; // %Z
|
@@ -187,7 +211,7 @@ namespace date_time {
|
|
187
211
|
static const char_type* iso_time_format_extended_specifier;
|
188
212
|
|
189
213
|
//default ptime format is YYYY-Mon-DD HH:MM:SS[.fff...][ zzz]
|
190
|
-
static const char_type* default_time_format;
|
214
|
+
static const char_type* default_time_format;
|
191
215
|
//default time_duration format is HH:MM:SS[.fff...]
|
192
216
|
static const char_type* default_time_duration_format;
|
193
217
|
static std::locale::id id;
|
@@ -197,28 +221,27 @@ namespace date_time {
|
|
197
221
|
#endif
|
198
222
|
|
199
223
|
//! sets default formats for ptime, local_date_time, and time_duration
|
200
|
-
explicit time_facet(::size_t
|
201
|
-
|
202
|
-
: base_type(default_time_format),
|
224
|
+
explicit time_facet(::size_t a_ref = 0)
|
225
|
+
: base_type(default_time_format, period_formatter_type(), special_values_formatter_type(), date_gen_formatter_type(), a_ref),
|
203
226
|
m_time_duration_format(string_type(duration_sign_negative_only) + default_time_duration_format)
|
204
227
|
{}
|
205
228
|
|
206
229
|
//! Construct the facet with an explicitly specified format
|
207
230
|
explicit time_facet(const char_type* a_format,
|
208
|
-
period_formatter_type period_formatter = period_formatter_type(),
|
209
|
-
const special_values_formatter_type& special_value_formatter = special_values_formatter_type(),
|
231
|
+
period_formatter_type period_formatter = period_formatter_type(),
|
232
|
+
const special_values_formatter_type& special_value_formatter = special_values_formatter_type(),
|
210
233
|
date_gen_formatter_type dg_formatter = date_gen_formatter_type(),
|
211
|
-
::size_t a_ref = 0)
|
212
|
-
: base_type(a_format,
|
234
|
+
::size_t a_ref = 0)
|
235
|
+
: base_type(a_format,
|
213
236
|
period_formatter,
|
214
|
-
special_value_formatter,
|
215
|
-
dg_formatter,
|
237
|
+
special_value_formatter,
|
238
|
+
dg_formatter,
|
216
239
|
a_ref),
|
217
240
|
m_time_duration_format(string_type(duration_sign_negative_only) + default_time_duration_format)
|
218
241
|
{}
|
219
242
|
|
220
243
|
//! Changes format for time_duration
|
221
|
-
void time_duration_format(const char_type* const format)
|
244
|
+
void time_duration_format(const char_type* const format)
|
222
245
|
{
|
223
246
|
m_time_duration_format = format;
|
224
247
|
}
|
@@ -232,40 +255,39 @@ namespace date_time {
|
|
232
255
|
this->m_format = iso_time_format_extended_specifier;
|
233
256
|
}
|
234
257
|
|
235
|
-
OutItrT put(OutItrT a_next,
|
236
|
-
std::ios_base& a_ios,
|
237
|
-
char_type a_fill,
|
238
|
-
const time_type& a_time) const
|
258
|
+
OutItrT put(OutItrT a_next,
|
259
|
+
std::ios_base& a_ios,
|
260
|
+
char_type a_fill,
|
261
|
+
const time_type& a_time) const
|
239
262
|
{
|
240
|
-
if (a_time.is_special()) {
|
241
|
-
return this->do_put_special(a_next, a_ios, a_fill,
|
263
|
+
if (a_time.is_special()) {
|
264
|
+
return this->do_put_special(a_next, a_ios, a_fill,
|
242
265
|
a_time.date().as_special());
|
243
266
|
}
|
244
267
|
string_type format(this->m_format);
|
268
|
+
|
245
269
|
string_type frac_str;
|
246
270
|
if (format.find(seconds_with_fractional_seconds_format) != string_type::npos) {
|
247
|
-
// replace %s with %S.nnn
|
248
|
-
frac_str =
|
271
|
+
// replace %s with %S.nnn
|
272
|
+
frac_str =
|
249
273
|
fractional_seconds_as_string(a_time.time_of_day(), false);
|
250
274
|
char_type sep = std::use_facet<std::numpunct<char_type> >(a_ios.getloc()).decimal_point();
|
251
|
-
|
275
|
+
|
252
276
|
string_type replace_string(seconds_format);
|
253
277
|
replace_string += sep;
|
254
278
|
replace_string += frac_str;
|
255
|
-
boost::algorithm::replace_all(format,
|
256
|
-
seconds_with_fractional_seconds_format,
|
279
|
+
boost::algorithm::replace_all(format,
|
280
|
+
seconds_with_fractional_seconds_format,
|
257
281
|
replace_string);
|
258
282
|
}
|
259
283
|
/* NOTE: replacing posix_zone_string_format must be done BEFORE
|
260
|
-
* zone_name_format: "%ZP" & "%Z", if Z is checked first it will
|
284
|
+
* zone_name_format: "%ZP" & "%Z", if Z is checked first it will
|
261
285
|
* incorrectly replace a zone_name where a posix_string should go */
|
262
286
|
if (format.find(posix_zone_string_format) != string_type::npos) {
|
263
287
|
if(a_time.zone_abbrev().empty()) {
|
264
288
|
// if zone_abbrev() returns an empty string, we want to
|
265
289
|
// erase posix_zone_string_format from format
|
266
|
-
boost::algorithm::
|
267
|
-
posix_zone_string_format,
|
268
|
-
"");
|
290
|
+
boost::algorithm::erase_all(format, posix_zone_string_format);
|
269
291
|
}
|
270
292
|
else{
|
271
293
|
boost::algorithm::replace_all(format,
|
@@ -275,17 +297,15 @@ namespace date_time {
|
|
275
297
|
}
|
276
298
|
if (format.find(zone_name_format) != string_type::npos) {
|
277
299
|
if(a_time.zone_name().empty()) {
|
278
|
-
/* TODO: this'll probably create problems if a user places
|
279
|
-
* the zone_*_format flag in the format with a ptime. This
|
300
|
+
/* TODO: this'll probably create problems if a user places
|
301
|
+
* the zone_*_format flag in the format with a ptime. This
|
280
302
|
* code removes the flag from the default formats */
|
281
303
|
|
282
304
|
// if zone_name() returns an empty string, we want to
|
283
305
|
// erase zone_name_format & one preceeding space
|
284
306
|
std::basic_ostringstream<char_type> ss;
|
285
307
|
ss << ' ' << zone_name_format;
|
286
|
-
boost::algorithm::
|
287
|
-
ss.str(),
|
288
|
-
"");
|
308
|
+
boost::algorithm::erase_all(format, ss.str());
|
289
309
|
}
|
290
310
|
else{
|
291
311
|
boost::algorithm::replace_all(format,
|
@@ -295,17 +315,15 @@ namespace date_time {
|
|
295
315
|
}
|
296
316
|
if (format.find(zone_abbrev_format) != string_type::npos) {
|
297
317
|
if(a_time.zone_abbrev(false).empty()) {
|
298
|
-
/* TODO: this'll probably create problems if a user places
|
299
|
-
* the zone_*_format flag in the format with a ptime. This
|
318
|
+
/* TODO: this'll probably create problems if a user places
|
319
|
+
* the zone_*_format flag in the format with a ptime. This
|
300
320
|
* code removes the flag from the default formats */
|
301
321
|
|
302
322
|
// if zone_abbrev() returns an empty string, we want to
|
303
323
|
// erase zone_abbrev_format & one preceeding space
|
304
324
|
std::basic_ostringstream<char_type> ss;
|
305
325
|
ss << ' ' << zone_abbrev_format;
|
306
|
-
boost::algorithm::
|
307
|
-
ss.str(),
|
308
|
-
"");
|
326
|
+
boost::algorithm::erase_all(format, ss.str());
|
309
327
|
}
|
310
328
|
else{
|
311
329
|
boost::algorithm::replace_all(format,
|
@@ -315,15 +333,13 @@ namespace date_time {
|
|
315
333
|
}
|
316
334
|
if (format.find(zone_iso_extended_format) != string_type::npos) {
|
317
335
|
if(a_time.zone_name(true).empty()) {
|
318
|
-
/* TODO: this'll probably create problems if a user places
|
319
|
-
* the zone_*_format flag in the format with a ptime. This
|
336
|
+
/* TODO: this'll probably create problems if a user places
|
337
|
+
* the zone_*_format flag in the format with a ptime. This
|
320
338
|
* code removes the flag from the default formats */
|
321
339
|
|
322
340
|
// if zone_name() returns an empty string, we want to
|
323
341
|
// erase zone_iso_extended_format from format
|
324
|
-
boost::algorithm::
|
325
|
-
zone_iso_extended_format,
|
326
|
-
"");
|
342
|
+
boost::algorithm::erase_all(format, zone_iso_extended_format);
|
327
343
|
}
|
328
344
|
else{
|
329
345
|
boost::algorithm::replace_all(format,
|
@@ -334,15 +350,13 @@ namespace date_time {
|
|
334
350
|
|
335
351
|
if (format.find(zone_iso_format) != string_type::npos) {
|
336
352
|
if(a_time.zone_abbrev(true).empty()) {
|
337
|
-
/* TODO: this'll probably create problems if a user places
|
338
|
-
* the zone_*_format flag in the format with a ptime. This
|
353
|
+
/* TODO: this'll probably create problems if a user places
|
354
|
+
* the zone_*_format flag in the format with a ptime. This
|
339
355
|
* code removes the flag from the default formats */
|
340
356
|
|
341
357
|
// if zone_abbrev() returns an empty string, we want to
|
342
358
|
// erase zone_iso_format from format
|
343
|
-
boost::algorithm::
|
344
|
-
zone_iso_format,
|
345
|
-
"");
|
359
|
+
boost::algorithm::erase_all(format, zone_iso_format);
|
346
360
|
}
|
347
361
|
else{
|
348
362
|
boost::algorithm::replace_all(format,
|
@@ -356,13 +370,13 @@ namespace date_time {
|
|
356
370
|
frac_str = fractional_seconds_as_string(a_time.time_of_day(), false);
|
357
371
|
}
|
358
372
|
boost::algorithm::replace_all(format,
|
359
|
-
fractional_seconds_format,
|
373
|
+
fractional_seconds_format,
|
360
374
|
frac_str);
|
361
375
|
}
|
362
376
|
|
363
377
|
if (format.find(fractional_seconds_or_none_format) != string_type::npos) {
|
364
378
|
// replace %F with nnnnnnn or nothing if fs == 0
|
365
|
-
frac_str =
|
379
|
+
frac_str =
|
366
380
|
fractional_seconds_as_string(a_time.time_of_day(), true);
|
367
381
|
if (frac_str.size()) {
|
368
382
|
char_type sep = std::use_facet<std::numpunct<char_type> >(a_ios.getloc()).decimal_point();
|
@@ -370,7 +384,7 @@ namespace date_time {
|
|
370
384
|
replace_string += sep;
|
371
385
|
replace_string += frac_str;
|
372
386
|
boost::algorithm::replace_all(format,
|
373
|
-
fractional_seconds_or_none_format,
|
387
|
+
fractional_seconds_or_none_format,
|
374
388
|
replace_string);
|
375
389
|
}
|
376
390
|
else {
|
@@ -379,55 +393,76 @@ namespace date_time {
|
|
379
393
|
}
|
380
394
|
}
|
381
395
|
|
382
|
-
return this->do_put_tm(a_next, a_ios, a_fill,
|
396
|
+
return this->do_put_tm(a_next, a_ios, a_fill,
|
383
397
|
to_tm(a_time), format);
|
384
398
|
}
|
385
399
|
|
386
400
|
//! put function for time_duration
|
387
|
-
OutItrT put(OutItrT a_next,
|
388
|
-
std::ios_base& a_ios,
|
389
|
-
char_type a_fill,
|
390
|
-
const time_duration_type& a_time_dur) const
|
401
|
+
OutItrT put(OutItrT a_next,
|
402
|
+
std::ios_base& a_ios,
|
403
|
+
char_type a_fill,
|
404
|
+
const time_duration_type& a_time_dur) const
|
391
405
|
{
|
392
|
-
if (a_time_dur.is_special()) {
|
393
|
-
return this->do_put_special(a_next, a_ios, a_fill,
|
406
|
+
if (a_time_dur.is_special()) {
|
407
|
+
return this->do_put_special(a_next, a_ios, a_fill,
|
394
408
|
a_time_dur.get_rep().as_special());
|
395
409
|
}
|
396
410
|
|
397
411
|
string_type format(m_time_duration_format);
|
398
412
|
if (a_time_dur.is_negative()) {
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
413
|
+
// replace %- with minus sign. Should we use the numpunct facet?
|
414
|
+
boost::algorithm::replace_all(format,
|
415
|
+
duration_sign_negative_only,
|
416
|
+
negative_sign);
|
403
417
|
// remove all the %+ in the string with '-'
|
404
|
-
|
405
|
-
|
406
|
-
|
418
|
+
boost::algorithm::replace_all(format,
|
419
|
+
duration_sign_always,
|
420
|
+
negative_sign);
|
407
421
|
}
|
408
422
|
else { //duration is positive
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
423
|
+
// remove all the %- combos from the string
|
424
|
+
boost::algorithm::erase_all(format, duration_sign_negative_only);
|
425
|
+
// remove all the %+ in the string with '+'
|
426
|
+
boost::algorithm::replace_all(format,
|
427
|
+
duration_sign_always,
|
428
|
+
positive_sign);
|
429
|
+
}
|
430
|
+
|
431
|
+
/*
|
432
|
+
* It is possible for a time duration to span more then 24 hours.
|
433
|
+
* Standard time_put::put is obliged to behave the same as strftime
|
434
|
+
* (See ISO 14882-2003 22.2.5.3.1 par. 1) and strftime's behavior is
|
435
|
+
* unspecified for the case when tm_hour field is outside 0-23 range
|
436
|
+
* (See ISO 9899-1999 7.23.3.5 par. 3). So we must output %H and %O
|
437
|
+
* here ourself.
|
438
|
+
*/
|
439
|
+
string_type hours_str;
|
440
|
+
if (format.find(unrestricted_hours_format) != string_type::npos) {
|
441
|
+
hours_str = hours_as_string(a_time_dur);
|
442
|
+
boost::algorithm::replace_all(format, unrestricted_hours_format, hours_str);
|
443
|
+
}
|
444
|
+
// We still have to process restricted hours format specifier. In order to
|
445
|
+
// support parseability of durations in ISO format (%H%M%S), we'll have to
|
446
|
+
// restrict the stringified hours length to 2 characters.
|
447
|
+
if (format.find(hours_format) != string_type::npos) {
|
448
|
+
if (hours_str.empty())
|
449
|
+
hours_str = hours_as_string(a_time_dur);
|
450
|
+
BOOST_ASSERT(hours_str.length() <= 2);
|
451
|
+
boost::algorithm::replace_all(format, hours_format, hours_str);
|
417
452
|
}
|
418
453
|
|
419
454
|
string_type frac_str;
|
420
455
|
if (format.find(seconds_with_fractional_seconds_format) != string_type::npos) {
|
421
|
-
// replace %s with %S.nnn
|
422
|
-
frac_str =
|
456
|
+
// replace %s with %S.nnn
|
457
|
+
frac_str =
|
423
458
|
fractional_seconds_as_string(a_time_dur, false);
|
424
459
|
char_type sep = std::use_facet<std::numpunct<char_type> >(a_ios.getloc()).decimal_point();
|
425
|
-
|
460
|
+
|
426
461
|
string_type replace_string(seconds_format);
|
427
462
|
replace_string += sep;
|
428
463
|
replace_string += frac_str;
|
429
|
-
boost::algorithm::replace_all(format,
|
430
|
-
seconds_with_fractional_seconds_format,
|
464
|
+
boost::algorithm::replace_all(format,
|
465
|
+
seconds_with_fractional_seconds_format,
|
431
466
|
replace_string);
|
432
467
|
}
|
433
468
|
if (format.find(fractional_seconds_format) != string_type::npos) {
|
@@ -436,13 +471,13 @@ namespace date_time {
|
|
436
471
|
frac_str = fractional_seconds_as_string(a_time_dur, false);
|
437
472
|
}
|
438
473
|
boost::algorithm::replace_all(format,
|
439
|
-
fractional_seconds_format,
|
474
|
+
fractional_seconds_format,
|
440
475
|
frac_str);
|
441
476
|
}
|
442
477
|
|
443
478
|
if (format.find(fractional_seconds_or_none_format) != string_type::npos) {
|
444
479
|
// replace %F with nnnnnnn or nothing if fs == 0
|
445
|
-
frac_str =
|
480
|
+
frac_str =
|
446
481
|
fractional_seconds_as_string(a_time_dur, true);
|
447
482
|
if (frac_str.size()) {
|
448
483
|
char_type sep = std::use_facet<std::numpunct<char_type> >(a_ios.getloc()).decimal_point();
|
@@ -450,7 +485,7 @@ namespace date_time {
|
|
450
485
|
replace_string += sep;
|
451
486
|
replace_string += frac_str;
|
452
487
|
boost::algorithm::replace_all(format,
|
453
|
-
fractional_seconds_or_none_format,
|
488
|
+
fractional_seconds_or_none_format,
|
454
489
|
replace_string);
|
455
490
|
}
|
456
491
|
else {
|
@@ -459,12 +494,12 @@ namespace date_time {
|
|
459
494
|
}
|
460
495
|
}
|
461
496
|
|
462
|
-
return this->do_put_tm(a_next, a_ios, a_fill,
|
497
|
+
return this->do_put_tm(a_next, a_ios, a_fill,
|
463
498
|
to_tm(a_time_dur), format);
|
464
499
|
}
|
465
|
-
|
466
|
-
OutItrT put(OutItrT next, std::ios_base& a_ios,
|
467
|
-
char_type fill, const period_type& p) const
|
500
|
+
|
501
|
+
OutItrT put(OutItrT next, std::ios_base& a_ios,
|
502
|
+
char_type fill, const period_type& p) const
|
468
503
|
{
|
469
504
|
return this->m_period_formatter.put_period(next, a_ios, fill,p,*this);
|
470
505
|
}
|
@@ -472,12 +507,12 @@ namespace date_time {
|
|
472
507
|
|
473
508
|
protected:
|
474
509
|
|
475
|
-
static
|
476
|
-
string_type
|
510
|
+
static
|
511
|
+
string_type
|
477
512
|
fractional_seconds_as_string(const time_duration_type& a_time,
|
478
|
-
bool null_when_zero)
|
513
|
+
bool null_when_zero)
|
479
514
|
{
|
480
|
-
typename time_duration_type::fractional_seconds_type frac_sec =
|
515
|
+
typename time_duration_type::fractional_seconds_type frac_sec =
|
481
516
|
a_time.fractional_seconds();
|
482
517
|
|
483
518
|
if (null_when_zero && (frac_sec == 0)) {
|
@@ -485,17 +520,33 @@ namespace date_time {
|
|
485
520
|
}
|
486
521
|
|
487
522
|
//make sure there is no sign
|
488
|
-
|
523
|
+
return integral_as_string(
|
524
|
+
date_time::absolute_value(frac_sec),
|
525
|
+
time_duration_type::num_fractional_digits());
|
526
|
+
}
|
527
|
+
|
528
|
+
static
|
529
|
+
string_type
|
530
|
+
hours_as_string(const time_duration_type& a_time, int width = 2)
|
531
|
+
{
|
532
|
+
return integral_as_string(date_time::absolute_value(a_time.hours()), width);
|
533
|
+
}
|
534
|
+
|
535
|
+
template< typename IntT >
|
536
|
+
static
|
537
|
+
string_type
|
538
|
+
integral_as_string(IntT val, int width = 2)
|
539
|
+
{
|
489
540
|
std::basic_ostringstream<char_type> ss;
|
490
541
|
ss.imbue(std::locale::classic()); // don't want any formatting
|
491
|
-
ss << std::setw(
|
492
|
-
|
542
|
+
ss << std::setw(width)
|
543
|
+
<< std::setfill(static_cast<char_type>('0'));
|
493
544
|
#if (defined(BOOST_MSVC) && (_MSC_VER < 1300))
|
494
545
|
// JDG [7/6/02 VC++ compatibility]
|
495
546
|
char_type buff[34];
|
496
|
-
ss << _i64toa(static_cast<boost::int64_t>(
|
547
|
+
ss << _i64toa(static_cast<boost::int64_t>(val), buff, 10);
|
497
548
|
#else
|
498
|
-
ss <<
|
549
|
+
ss << val;
|
499
550
|
#endif
|
500
551
|
return ss.str();
|
501
552
|
}
|
@@ -504,98 +555,106 @@ namespace date_time {
|
|
504
555
|
string_type m_time_duration_format;
|
505
556
|
|
506
557
|
};
|
507
|
-
|
508
|
-
template <class time_type, class CharT, class OutItrT>
|
558
|
+
|
559
|
+
template <class time_type, class CharT, class OutItrT>
|
509
560
|
std::locale::id time_facet<time_type, CharT, OutItrT>::id;
|
510
561
|
|
511
|
-
template <class time_type, class CharT, class OutItrT>
|
512
|
-
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
562
|
+
template <class time_type, class CharT, class OutItrT>
|
563
|
+
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
513
564
|
time_facet<time_type, CharT, OutItrT>::fractional_seconds_format = time_formats<CharT>::fractional_seconds_format;
|
514
565
|
|
515
|
-
template <class time_type, class CharT, class OutItrT>
|
516
|
-
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
566
|
+
template <class time_type, class CharT, class OutItrT>
|
567
|
+
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
517
568
|
time_facet<time_type, CharT, OutItrT>::fractional_seconds_or_none_format = time_formats<CharT>::fractional_seconds_or_none_format;
|
518
569
|
|
519
|
-
template <class time_type, class CharT, class OutItrT>
|
520
|
-
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
521
|
-
time_facet<time_type, CharT, OutItrT>::seconds_with_fractional_seconds_format =
|
570
|
+
template <class time_type, class CharT, class OutItrT>
|
571
|
+
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
572
|
+
time_facet<time_type, CharT, OutItrT>::seconds_with_fractional_seconds_format =
|
522
573
|
time_formats<CharT>::seconds_with_fractional_seconds_format;
|
523
574
|
|
524
575
|
|
525
|
-
template <class time_type, class CharT, class OutItrT>
|
576
|
+
template <class time_type, class CharT, class OutItrT>
|
526
577
|
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
527
578
|
time_facet<time_type, CharT, OutItrT>::zone_name_format = time_formats<CharT>::zone_name_format;
|
528
579
|
|
529
|
-
template <class time_type, class CharT, class OutItrT>
|
580
|
+
template <class time_type, class CharT, class OutItrT>
|
530
581
|
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
531
582
|
time_facet<time_type, CharT, OutItrT>::zone_abbrev_format = time_formats<CharT>::zone_abbrev_format;
|
532
583
|
|
533
|
-
template <class time_type, class CharT, class OutItrT>
|
584
|
+
template <class time_type, class CharT, class OutItrT>
|
534
585
|
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
535
586
|
time_facet<time_type, CharT, OutItrT>::zone_iso_extended_format =time_formats<CharT>::zone_iso_extended_format;
|
536
587
|
|
537
|
-
template <class time_type, class CharT, class OutItrT>
|
588
|
+
template <class time_type, class CharT, class OutItrT>
|
538
589
|
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
539
590
|
time_facet<time_type, CharT, OutItrT>::posix_zone_string_format =time_formats<CharT>::posix_zone_string_format;
|
540
591
|
|
541
|
-
template <class time_type, class CharT, class OutItrT>
|
592
|
+
template <class time_type, class CharT, class OutItrT>
|
542
593
|
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
543
594
|
time_facet<time_type, CharT, OutItrT>::zone_iso_format = time_formats<CharT>::zone_iso_format;
|
544
595
|
|
545
|
-
template <class time_type, class CharT, class OutItrT>
|
596
|
+
template <class time_type, class CharT, class OutItrT>
|
546
597
|
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
547
598
|
time_facet<time_type, CharT, OutItrT>::seconds_format = time_formats<CharT>::seconds_format;
|
548
599
|
|
549
|
-
template <class time_type, class CharT, class OutItrT>
|
600
|
+
template <class time_type, class CharT, class OutItrT>
|
601
|
+
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
602
|
+
time_facet<time_type, CharT, OutItrT>::hours_format = time_formats<CharT>::hours_format;
|
603
|
+
|
604
|
+
template <class time_type, class CharT, class OutItrT>
|
605
|
+
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
606
|
+
time_facet<time_type, CharT, OutItrT>::unrestricted_hours_format = time_formats<CharT>::unrestricted_hours_format;
|
607
|
+
|
608
|
+
template <class time_type, class CharT, class OutItrT>
|
550
609
|
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
551
610
|
time_facet<time_type, CharT, OutItrT>::standard_format = time_formats<CharT>::standard_format;
|
552
611
|
|
553
|
-
template <class time_type, class CharT, class OutItrT>
|
612
|
+
template <class time_type, class CharT, class OutItrT>
|
554
613
|
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
555
614
|
time_facet<time_type, CharT, OutItrT>::duration_seperator = time_formats<CharT>::duration_seperator;
|
556
615
|
|
557
|
-
template <class time_type, class CharT, class OutItrT>
|
616
|
+
template <class time_type, class CharT, class OutItrT>
|
558
617
|
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
559
618
|
time_facet<time_type, CharT, OutItrT>::negative_sign = time_formats<CharT>::negative_sign;
|
560
619
|
|
561
|
-
template <class time_type, class CharT, class OutItrT>
|
620
|
+
template <class time_type, class CharT, class OutItrT>
|
562
621
|
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
563
622
|
time_facet<time_type, CharT, OutItrT>::positive_sign = time_formats<CharT>::positive_sign;
|
564
623
|
|
565
|
-
template <class time_type, class CharT, class OutItrT>
|
624
|
+
template <class time_type, class CharT, class OutItrT>
|
566
625
|
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
567
626
|
time_facet<time_type, CharT, OutItrT>::duration_sign_negative_only = time_formats<CharT>::duration_sign_negative_only;
|
568
627
|
|
569
|
-
template <class time_type, class CharT, class OutItrT>
|
628
|
+
template <class time_type, class CharT, class OutItrT>
|
570
629
|
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
571
630
|
time_facet<time_type, CharT, OutItrT>::duration_sign_always = time_formats<CharT>::duration_sign_always;
|
572
631
|
|
573
|
-
template <class time_type, class CharT, class OutItrT>
|
632
|
+
template <class time_type, class CharT, class OutItrT>
|
574
633
|
const typename time_facet<time_type,CharT, OutItrT>::char_type*
|
575
634
|
time_facet<time_type,CharT, OutItrT>::iso_time_format_specifier = time_formats<CharT>::iso_time_format_specifier;
|
576
635
|
|
577
|
-
template <class time_type, class CharT, class OutItrT>
|
636
|
+
template <class time_type, class CharT, class OutItrT>
|
578
637
|
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
579
638
|
time_facet<time_type, CharT, OutItrT>::iso_time_format_extended_specifier = time_formats<CharT>::iso_time_format_extended_specifier;
|
580
639
|
|
581
|
-
template <class time_type, class CharT, class OutItrT>
|
640
|
+
template <class time_type, class CharT, class OutItrT>
|
582
641
|
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
583
|
-
time_facet<time_type, CharT, OutItrT>::default_time_format =
|
642
|
+
time_facet<time_type, CharT, OutItrT>::default_time_format =
|
584
643
|
time_formats<CharT>::default_time_format;
|
585
644
|
|
586
|
-
template <class time_type, class CharT, class OutItrT>
|
587
|
-
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
588
|
-
time_facet<time_type, CharT, OutItrT>::default_time_duration_format =
|
645
|
+
template <class time_type, class CharT, class OutItrT>
|
646
|
+
const typename time_facet<time_type, CharT, OutItrT>::char_type*
|
647
|
+
time_facet<time_type, CharT, OutItrT>::default_time_duration_format =
|
589
648
|
time_formats<CharT>::default_time_duration_format;
|
590
649
|
|
591
650
|
|
592
|
-
//! Facet for format-based input.
|
651
|
+
//! Facet for format-based input.
|
593
652
|
/*!
|
594
653
|
*/
|
595
654
|
template <class time_type,
|
596
|
-
class CharT,
|
655
|
+
class CharT,
|
597
656
|
class InItrT = std::istreambuf_iterator<CharT, std::char_traits<CharT> > >
|
598
|
-
class time_input_facet :
|
657
|
+
class time_input_facet :
|
599
658
|
public boost::date_time::date_input_facet<typename time_type::date_type , CharT, InItrT> {
|
600
659
|
public:
|
601
660
|
typedef typename time_type::date_type date_type;
|
@@ -628,13 +687,13 @@ namespace date_time {
|
|
628
687
|
static const char_type* duration_seperator;
|
629
688
|
static const char_type* iso_time_format_specifier;
|
630
689
|
static const char_type* iso_time_format_extended_specifier;
|
631
|
-
static const char_type* default_time_input_format;
|
690
|
+
static const char_type* default_time_input_format;
|
632
691
|
static const char_type* default_time_duration_format;
|
633
692
|
static std::locale::id id;
|
634
693
|
|
635
694
|
//! Constructor that takes a format string for a ptime
|
636
|
-
explicit time_input_facet(const string_type& format, ::size_t a_ref = 0)
|
637
|
-
: base_type(format, a_ref),
|
695
|
+
explicit time_input_facet(const string_type& format, ::size_t a_ref = 0)
|
696
|
+
: base_type(format, a_ref),
|
638
697
|
m_time_duration_format(default_time_duration_format)
|
639
698
|
{ }
|
640
699
|
|
@@ -649,16 +708,16 @@ namespace date_time {
|
|
649
708
|
sv_parser,
|
650
709
|
per_parser,
|
651
710
|
date_gen_parser,
|
652
|
-
a_ref),
|
711
|
+
a_ref),
|
653
712
|
m_time_duration_format(default_time_duration_format)
|
654
713
|
{}
|
655
714
|
|
656
715
|
//! sets default formats for ptime, local_date_time, and time_duration
|
657
|
-
explicit time_input_facet(::size_t a_ref = 0)
|
658
|
-
: base_type(default_time_input_format, a_ref),
|
716
|
+
explicit time_input_facet(::size_t a_ref = 0)
|
717
|
+
: base_type(default_time_input_format, a_ref),
|
659
718
|
m_time_duration_format(default_time_duration_format)
|
660
719
|
{ }
|
661
|
-
|
720
|
+
|
662
721
|
//! Set the format for time_duration
|
663
722
|
void time_duration_format(const char_type* const format) {
|
664
723
|
m_time_duration_format = format;
|
@@ -671,94 +730,102 @@ namespace date_time {
|
|
671
730
|
{
|
672
731
|
this->m_format = iso_time_format_extended_specifier;
|
673
732
|
}
|
674
|
-
|
733
|
+
|
675
734
|
InItrT get(InItrT& sitr,
|
676
735
|
InItrT& stream_end,
|
677
736
|
std::ios_base& a_ios,
|
678
737
|
period_type& p) const
|
679
738
|
{
|
680
|
-
p = this->m_period_parser.get_period(sitr,
|
681
|
-
stream_end,
|
682
|
-
a_ios,
|
683
|
-
p,
|
684
|
-
time_duration_type::unit(),
|
739
|
+
p = this->m_period_parser.get_period(sitr,
|
740
|
+
stream_end,
|
741
|
+
a_ios,
|
742
|
+
p,
|
743
|
+
time_duration_type::unit(),
|
685
744
|
*this);
|
686
745
|
return sitr;
|
687
746
|
}
|
688
|
-
|
747
|
+
|
689
748
|
//default ptime format is YYYY-Mon-DD HH:MM:SS[.fff...][ zzz]
|
690
749
|
//default time_duration format is %H:%M:%S%F HH:MM:SS[.fff...]
|
691
750
|
|
692
|
-
InItrT get(InItrT& sitr,
|
693
|
-
InItrT& stream_end,
|
694
|
-
std::ios_base& a_ios,
|
751
|
+
InItrT get(InItrT& sitr,
|
752
|
+
InItrT& stream_end,
|
753
|
+
std::ios_base& a_ios,
|
695
754
|
time_duration_type& td) const
|
696
755
|
{
|
697
756
|
// skip leading whitespace
|
698
757
|
while((sitr != stream_end) && std::isspace(*sitr)) { ++sitr; }
|
699
|
-
|
758
|
+
|
700
759
|
bool use_current_char = false;
|
701
|
-
|
760
|
+
|
702
761
|
// num_get will consume the +/-, we may need a copy if special_value
|
703
762
|
char_type c = '\0';
|
704
763
|
if((sitr != stream_end) && (*sitr == '-' || *sitr == '+')) {
|
705
764
|
c = *sitr;
|
706
765
|
}
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
766
|
+
|
767
|
+
typedef typename time_duration_type::hour_type hour_type;
|
768
|
+
typedef typename time_duration_type::min_type min_type;
|
769
|
+
typedef typename time_duration_type::sec_type sec_type;
|
770
|
+
|
771
|
+
hour_type hour = 0;
|
772
|
+
min_type min = 0;
|
773
|
+
sec_type sec = 0;
|
711
774
|
typename time_duration_type::fractional_seconds_type frac(0);
|
712
|
-
|
775
|
+
|
713
776
|
typedef std::num_get<CharT, InItrT> num_get;
|
714
777
|
if(!std::has_facet<num_get>(a_ios.getloc())) {
|
715
778
|
num_get* ng = new num_get();
|
716
779
|
std::locale loc = std::locale(a_ios.getloc(), ng);
|
717
780
|
a_ios.imbue(loc);
|
718
781
|
}
|
719
|
-
|
782
|
+
|
720
783
|
const_itr itr(m_time_duration_format.begin());
|
721
784
|
while (itr != m_time_duration_format.end() && (sitr != stream_end)) {
|
722
785
|
if (*itr == '%') {
|
723
|
-
itr
|
786
|
+
++itr;
|
724
787
|
if (*itr != '%') {
|
725
788
|
switch(*itr) {
|
726
|
-
case '
|
789
|
+
case 'O':
|
727
790
|
{
|
728
|
-
|
729
|
-
|
791
|
+
// A period may span more than 24 hours. In that case the format
|
792
|
+
// string should be composed with the unrestricted hours specifier.
|
793
|
+
hour = var_string_to_int<hour_type, CharT>(sitr, stream_end,
|
794
|
+
std::numeric_limits<hour_type>::digits10 + 1);
|
730
795
|
if(hour == -1){
|
731
796
|
return check_special_value(sitr, stream_end, td, c);
|
732
797
|
}
|
733
798
|
break;
|
734
799
|
}
|
735
|
-
case '
|
800
|
+
case 'H':
|
736
801
|
{
|
737
802
|
match_results mr;
|
738
|
-
|
739
|
-
if(
|
803
|
+
hour = fixed_string_to_int<hour_type, CharT>(sitr, stream_end, mr, 2);
|
804
|
+
if(hour == -1){
|
740
805
|
return check_special_value(sitr, stream_end, td, c);
|
741
806
|
}
|
742
807
|
break;
|
743
808
|
}
|
744
|
-
case '
|
809
|
+
case 'M':
|
745
810
|
{
|
746
811
|
match_results mr;
|
747
|
-
|
748
|
-
if(
|
812
|
+
min = fixed_string_to_int<min_type, CharT>(sitr, stream_end, mr, 2);
|
813
|
+
if(min == -1){
|
749
814
|
return check_special_value(sitr, stream_end, td, c);
|
750
815
|
}
|
751
816
|
break;
|
752
817
|
}
|
753
818
|
case 's':
|
819
|
+
case 'S':
|
754
820
|
{
|
755
821
|
match_results mr;
|
756
|
-
sec = fixed_string_to_int<
|
822
|
+
sec = fixed_string_to_int<sec_type, CharT>(sitr, stream_end, mr, 2);
|
757
823
|
if(sec == -1){
|
758
824
|
return check_special_value(sitr, stream_end, td, c);
|
759
825
|
}
|
826
|
+
if (*itr == 'S')
|
827
|
+
break;
|
760
828
|
// %s is the same as %S%f so we drop through into %f
|
761
|
-
//break;
|
762
829
|
}
|
763
830
|
case 'f':
|
764
831
|
{
|
@@ -766,7 +833,7 @@ namespace date_time {
|
|
766
833
|
if(*sitr == '.') {
|
767
834
|
++sitr;
|
768
835
|
parse_frac_type(sitr, stream_end, frac);
|
769
|
-
// sitr will point to next expected char after this parsing
|
836
|
+
// sitr will point to next expected char after this parsing
|
770
837
|
// is complete so no need to advance it
|
771
838
|
use_current_char = true;
|
772
839
|
}
|
@@ -775,13 +842,13 @@ namespace date_time {
|
|
775
842
|
}
|
776
843
|
break;
|
777
844
|
}
|
778
|
-
case 'F':
|
845
|
+
case 'F':
|
779
846
|
{
|
780
847
|
// check for decimal, skip if missing
|
781
848
|
if(*sitr == '.') {
|
782
849
|
++sitr;
|
783
850
|
parse_frac_type(sitr, stream_end, frac);
|
784
|
-
// sitr will point to next expected char after this parsing
|
851
|
+
// sitr will point to next expected char after this parsing
|
785
852
|
// is complete so no need to advance it
|
786
853
|
use_current_char = true;
|
787
854
|
}
|
@@ -796,20 +863,20 @@ namespace date_time {
|
|
796
863
|
}// switch
|
797
864
|
}
|
798
865
|
else { // itr == '%', second consecutive
|
799
|
-
sitr
|
866
|
+
++sitr;
|
800
867
|
}
|
801
|
-
|
802
|
-
itr
|
868
|
+
|
869
|
+
++itr; //advance past format specifier
|
803
870
|
}
|
804
871
|
else { //skip past chars in format and in buffer
|
805
|
-
itr
|
806
|
-
// set use_current_char when sitr is already
|
872
|
+
++itr;
|
873
|
+
// set use_current_char when sitr is already
|
807
874
|
// pointing at the next character to process
|
808
875
|
if (use_current_char) {
|
809
876
|
use_current_char = false;
|
810
877
|
}
|
811
878
|
else {
|
812
|
-
sitr
|
879
|
+
++sitr;
|
813
880
|
}
|
814
881
|
}
|
815
882
|
}
|
@@ -817,21 +884,21 @@ namespace date_time {
|
|
817
884
|
td = time_duration_type(hour, min, sec, frac);
|
818
885
|
return sitr;
|
819
886
|
}
|
820
|
-
|
887
|
+
|
821
888
|
|
822
889
|
//! Parses a time object from the input stream
|
823
|
-
InItrT get(InItrT& sitr,
|
824
|
-
InItrT& stream_end,
|
825
|
-
std::ios_base& a_ios,
|
890
|
+
InItrT get(InItrT& sitr,
|
891
|
+
InItrT& stream_end,
|
892
|
+
std::ios_base& a_ios,
|
826
893
|
time_type& t) const
|
827
894
|
{
|
828
895
|
string_type tz_str;
|
829
896
|
return get(sitr, stream_end, a_ios, t, tz_str, false);
|
830
897
|
}
|
831
898
|
//! Expects a time_zone in the input stream
|
832
|
-
InItrT get_local_time(InItrT& sitr,
|
833
|
-
InItrT& stream_end,
|
834
|
-
std::ios_base& a_ios,
|
899
|
+
InItrT get_local_time(InItrT& sitr,
|
900
|
+
InItrT& stream_end,
|
901
|
+
std::ios_base& a_ios,
|
835
902
|
time_type& t,
|
836
903
|
string_type& tz_str) const
|
837
904
|
{
|
@@ -840,51 +907,55 @@ namespace date_time {
|
|
840
907
|
|
841
908
|
protected:
|
842
909
|
|
843
|
-
InItrT get(InItrT& sitr,
|
844
|
-
InItrT& stream_end,
|
845
|
-
std::ios_base& a_ios,
|
910
|
+
InItrT get(InItrT& sitr,
|
911
|
+
InItrT& stream_end,
|
912
|
+
std::ios_base& a_ios,
|
846
913
|
time_type& t,
|
847
914
|
string_type& tz_str,
|
848
915
|
bool time_is_local) const
|
849
916
|
{
|
850
917
|
// skip leading whitespace
|
851
918
|
while((sitr != stream_end) && std::isspace(*sitr)) { ++sitr; }
|
852
|
-
|
919
|
+
|
853
920
|
bool use_current_char = false;
|
854
921
|
bool use_current_format_char = false; // used whith two character flags
|
855
|
-
|
922
|
+
|
856
923
|
// num_get will consume the +/-, we may need a copy if special_value
|
857
924
|
char_type c = '\0';
|
858
925
|
if((sitr != stream_end) && (*sitr == '-' || *sitr == '+')) {
|
859
926
|
c = *sitr;
|
860
927
|
}
|
861
|
-
|
928
|
+
|
929
|
+
typedef typename time_duration_type::hour_type hour_type;
|
930
|
+
typedef typename time_duration_type::min_type min_type;
|
931
|
+
typedef typename time_duration_type::sec_type sec_type;
|
932
|
+
|
862
933
|
// time elements
|
863
|
-
|
864
|
-
|
865
|
-
|
934
|
+
hour_type hour = 0;
|
935
|
+
min_type min = 0;
|
936
|
+
sec_type sec = 0;
|
866
937
|
typename time_duration_type::fractional_seconds_type frac(0);
|
867
938
|
// date elements
|
868
939
|
short day_of_year(0);
|
869
|
-
/* Initialized the following to their minimum values. These intermediate
|
870
|
-
* objects are used so we get specific exceptions when part of the input
|
871
|
-
* is unparsable.
|
940
|
+
/* Initialized the following to their minimum values. These intermediate
|
941
|
+
* objects are used so we get specific exceptions when part of the input
|
942
|
+
* is unparsable.
|
872
943
|
* Ex: "205-Jan-15" will throw a bad_year, "2005-Jsn-15"- bad_month, etc.*/
|
873
944
|
year_type t_year(1400);
|
874
945
|
month_type t_month(1);
|
875
946
|
day_type t_day(1);
|
876
|
-
|
947
|
+
|
877
948
|
typedef std::num_get<CharT, InItrT> num_get;
|
878
949
|
if(!std::has_facet<num_get>(a_ios.getloc())) {
|
879
950
|
num_get* ng = new num_get();
|
880
951
|
std::locale loc = std::locale(a_ios.getloc(), ng);
|
881
952
|
a_ios.imbue(loc);
|
882
953
|
}
|
883
|
-
|
954
|
+
|
884
955
|
const_itr itr(this->m_format.begin());
|
885
956
|
while (itr != this->m_format.end() && (sitr != stream_end)) {
|
886
957
|
if (*itr == '%') {
|
887
|
-
itr
|
958
|
+
++itr;
|
888
959
|
if (*itr != '%') {
|
889
960
|
// the cases are grouped by date & time flags - not alphabetical order
|
890
961
|
switch(*itr) {
|
@@ -898,7 +969,7 @@ namespace date_time {
|
|
898
969
|
try {
|
899
970
|
t_year = this->m_parser.parse_year(sitr, stream_end, s, mr);
|
900
971
|
}
|
901
|
-
catch(std::out_of_range
|
972
|
+
catch(std::out_of_range&) { // base class for bad_year exception
|
902
973
|
if(this->m_sv_parser.match(sitr, stream_end, mr)) {
|
903
974
|
t = time_type(static_cast<special_values>(mr.current_match));
|
904
975
|
return sitr;
|
@@ -919,13 +990,13 @@ namespace date_time {
|
|
919
990
|
try {
|
920
991
|
t_month = this->m_parser.parse_month(sitr, stream_end, s, mr);
|
921
992
|
}
|
922
|
-
catch(std::out_of_range
|
993
|
+
catch(std::out_of_range&) { // base class for bad_month exception
|
923
994
|
if(this->m_sv_parser.match(sitr, stream_end, mr)) {
|
924
995
|
t = time_type(static_cast<special_values>(mr.current_match));
|
925
996
|
return sitr;
|
926
997
|
}
|
927
998
|
else {
|
928
|
-
throw; // rethrow
|
999
|
+
throw; // rethrow bad_month
|
929
1000
|
}
|
930
1001
|
}
|
931
1002
|
// did m_parser already advance sitr to next char?
|
@@ -946,7 +1017,7 @@ namespace date_time {
|
|
946
1017
|
try {
|
947
1018
|
wd = this->m_parser.parse_weekday(sitr, stream_end, s, mr);
|
948
1019
|
}
|
949
|
-
catch(std::out_of_range
|
1020
|
+
catch(std::out_of_range&) { // base class for bad_weekday exception
|
950
1021
|
if(this->m_sv_parser.match(sitr, stream_end, mr)) {
|
951
1022
|
t = time_type(static_cast<special_values>(mr.current_match));
|
952
1023
|
return sitr;
|
@@ -982,55 +1053,48 @@ namespace date_time {
|
|
982
1053
|
try {
|
983
1054
|
t_day = this->m_parser.parse_day_of_month(sitr, stream_end);
|
984
1055
|
}
|
985
|
-
catch(std::out_of_range
|
1056
|
+
catch(std::out_of_range&) { // base class for exception bad_day_of_month
|
986
1057
|
match_results mr;
|
987
1058
|
if(this->m_sv_parser.match(sitr, stream_end, mr)) {
|
988
1059
|
t = time_type(static_cast<special_values>(mr.current_match));
|
989
1060
|
return sitr;
|
990
1061
|
}
|
991
1062
|
else {
|
992
|
-
throw; // rethrow
|
1063
|
+
throw; // rethrow bad_day_of_month
|
993
1064
|
}
|
994
1065
|
}
|
995
1066
|
break;
|
996
1067
|
}
|
997
1068
|
// time flags
|
998
|
-
case 'H':
|
1069
|
+
case 'H':
|
999
1070
|
{
|
1000
1071
|
match_results mr;
|
1001
|
-
hour = fixed_string_to_int<
|
1072
|
+
hour = fixed_string_to_int<hour_type, CharT>(sitr, stream_end, mr, 2);
|
1002
1073
|
if(hour == -1){
|
1003
1074
|
return check_special_value(sitr, stream_end, t, c);
|
1004
1075
|
}
|
1005
1076
|
break;
|
1006
1077
|
}
|
1007
|
-
case 'M':
|
1078
|
+
case 'M':
|
1008
1079
|
{
|
1009
1080
|
match_results mr;
|
1010
|
-
min = fixed_string_to_int<
|
1081
|
+
min = fixed_string_to_int<min_type, CharT>(sitr, stream_end, mr, 2);
|
1011
1082
|
if(min == -1){
|
1012
1083
|
return check_special_value(sitr, stream_end, t, c);
|
1013
1084
|
}
|
1014
1085
|
break;
|
1015
1086
|
}
|
1016
|
-
case 'S':
|
1017
|
-
{
|
1018
|
-
match_results mr;
|
1019
|
-
sec = fixed_string_to_int<short, CharT>(sitr, stream_end, mr, 2);
|
1020
|
-
if(sec == -1){
|
1021
|
-
return check_special_value(sitr, stream_end, t, c);
|
1022
|
-
}
|
1023
|
-
break;
|
1024
|
-
}
|
1025
1087
|
case 's':
|
1088
|
+
case 'S':
|
1026
1089
|
{
|
1027
1090
|
match_results mr;
|
1028
|
-
sec = fixed_string_to_int<
|
1091
|
+
sec = fixed_string_to_int<sec_type, CharT>(sitr, stream_end, mr, 2);
|
1029
1092
|
if(sec == -1){
|
1030
1093
|
return check_special_value(sitr, stream_end, t, c);
|
1031
1094
|
}
|
1095
|
+
if (*itr == 'S')
|
1096
|
+
break;
|
1032
1097
|
// %s is the same as %S%f so we drop through into %f
|
1033
|
-
//break;
|
1034
1098
|
}
|
1035
1099
|
case 'f':
|
1036
1100
|
{
|
@@ -1038,7 +1102,7 @@ namespace date_time {
|
|
1038
1102
|
if(*sitr == '.') {
|
1039
1103
|
++sitr;
|
1040
1104
|
parse_frac_type(sitr, stream_end, frac);
|
1041
|
-
// sitr will point to next expected char after this parsing
|
1105
|
+
// sitr will point to next expected char after this parsing
|
1042
1106
|
// is complete so no need to advance it
|
1043
1107
|
use_current_char = true;
|
1044
1108
|
}
|
@@ -1047,13 +1111,13 @@ namespace date_time {
|
|
1047
1111
|
}
|
1048
1112
|
break;
|
1049
1113
|
}
|
1050
|
-
case 'F':
|
1114
|
+
case 'F':
|
1051
1115
|
{
|
1052
1116
|
// check for decimal, skip if missing
|
1053
1117
|
if(*sitr == '.') {
|
1054
1118
|
++sitr;
|
1055
1119
|
parse_frac_type(sitr, stream_end, frac);
|
1056
|
-
// sitr will point to next expected char after this parsing
|
1120
|
+
// sitr will point to next expected char after this parsing
|
1057
1121
|
// is complete so no need to advance it
|
1058
1122
|
use_current_char = true;
|
1059
1123
|
}
|
@@ -1083,44 +1147,44 @@ namespace date_time {
|
|
1083
1147
|
else {
|
1084
1148
|
use_current_format_char = true;
|
1085
1149
|
}
|
1086
|
-
|
1150
|
+
|
1087
1151
|
}
|
1088
1152
|
else {
|
1089
1153
|
// nothing was parsed so we don't want to advance sitr
|
1090
1154
|
use_current_char = true;
|
1091
1155
|
}
|
1092
|
-
|
1156
|
+
|
1093
1157
|
break;
|
1094
1158
|
}
|
1095
1159
|
default:
|
1096
1160
|
{} // ignore what we don't understand?
|
1097
1161
|
}// switch
|
1098
|
-
}
|
1162
|
+
}
|
1099
1163
|
else { // itr == '%', second consecutive
|
1100
|
-
sitr
|
1164
|
+
++sitr;
|
1101
1165
|
}
|
1102
|
-
|
1166
|
+
|
1103
1167
|
if(use_current_format_char) {
|
1104
1168
|
use_current_format_char = false;
|
1105
1169
|
}
|
1106
1170
|
else {
|
1107
|
-
itr
|
1171
|
+
++itr; //advance past format specifier
|
1108
1172
|
}
|
1109
|
-
|
1173
|
+
|
1110
1174
|
}
|
1111
1175
|
else { //skip past chars in format and in buffer
|
1112
|
-
itr
|
1113
|
-
// set use_current_char when sitr is already
|
1176
|
+
++itr;
|
1177
|
+
// set use_current_char when sitr is already
|
1114
1178
|
// pointing at the next character to process
|
1115
1179
|
if (use_current_char) {
|
1116
1180
|
use_current_char = false;
|
1117
1181
|
}
|
1118
1182
|
else {
|
1119
|
-
sitr
|
1183
|
+
++sitr;
|
1120
1184
|
}
|
1121
1185
|
}
|
1122
1186
|
}
|
1123
|
-
|
1187
|
+
|
1124
1188
|
date_type d(not_a_date_time);
|
1125
1189
|
if (day_of_year > 0) {
|
1126
1190
|
d = date_type(static_cast<unsigned short>(t_year-1),12,31) + date_duration_type(day_of_year);
|
@@ -1135,8 +1199,8 @@ namespace date_time {
|
|
1135
1199
|
}
|
1136
1200
|
|
1137
1201
|
//! Helper function to check for special_value
|
1138
|
-
/*! First character may have been consumed during original parse
|
1139
|
-
* attempt. Parameter 'c' should be a copy of that character.
|
1202
|
+
/*! First character may have been consumed during original parse
|
1203
|
+
* attempt. Parameter 'c' should be a copy of that character.
|
1140
1204
|
* Throws ios_base::failure if parse fails. */
|
1141
1205
|
template<class temporal_type>
|
1142
1206
|
inline
|
@@ -1149,15 +1213,16 @@ namespace date_time {
|
|
1149
1213
|
this->m_sv_parser.match(sitr, stream_end, mr);
|
1150
1214
|
if(mr.current_match == match_results::PARSE_ERROR) {
|
1151
1215
|
std::string tmp = convert_string_type<char_type, char>(mr.cache);
|
1152
|
-
|
1216
|
+
boost::throw_exception(std::ios_base::failure("Parse failed. No match found for '" + tmp + "'"));
|
1217
|
+
BOOST_DATE_TIME_UNREACHABLE_EXPRESSION(return sitr); // should never reach
|
1153
1218
|
}
|
1154
|
-
tt = temporal_type(static_cast<special_values>(mr.current_match));
|
1219
|
+
tt = temporal_type(static_cast<special_values>(mr.current_match));
|
1155
1220
|
return sitr;
|
1156
1221
|
}
|
1157
1222
|
|
1158
1223
|
//! Helper function for parsing a fractional second type from the stream
|
1159
|
-
void parse_frac_type(InItrT& sitr,
|
1160
|
-
InItrT& stream_end,
|
1224
|
+
void parse_frac_type(InItrT& sitr,
|
1225
|
+
InItrT& stream_end,
|
1161
1226
|
fracional_seconds_type& frac) const
|
1162
1227
|
{
|
1163
1228
|
string_type cache;
|
@@ -1178,7 +1243,7 @@ namespace date_time {
|
|
1178
1243
|
}
|
1179
1244
|
}
|
1180
1245
|
}
|
1181
|
-
|
1246
|
+
|
1182
1247
|
private:
|
1183
1248
|
string_type m_time_duration_format;
|
1184
1249
|
|
@@ -1199,60 +1264,60 @@ namespace date_time {
|
|
1199
1264
|
template <class time_type, class CharT, class InItrT>
|
1200
1265
|
std::locale::id time_input_facet<time_type, CharT, InItrT>::id;
|
1201
1266
|
|
1202
|
-
template <class time_type, class CharT, class InItrT>
|
1203
|
-
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1267
|
+
template <class time_type, class CharT, class InItrT>
|
1268
|
+
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1204
1269
|
time_input_facet<time_type, CharT, InItrT>::fractional_seconds_format = time_formats<CharT>::fractional_seconds_format;
|
1205
1270
|
|
1206
|
-
template <class time_type, class CharT, class InItrT>
|
1207
|
-
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1271
|
+
template <class time_type, class CharT, class InItrT>
|
1272
|
+
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1208
1273
|
time_input_facet<time_type, CharT, InItrT>::fractional_seconds_or_none_format = time_formats<CharT>::fractional_seconds_or_none_format;
|
1209
1274
|
|
1210
|
-
template <class time_type, class CharT, class InItrT>
|
1211
|
-
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1275
|
+
template <class time_type, class CharT, class InItrT>
|
1276
|
+
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1212
1277
|
time_input_facet<time_type, CharT, InItrT>::seconds_with_fractional_seconds_format = time_formats<CharT>::seconds_with_fractional_seconds_format;
|
1213
1278
|
|
1214
|
-
template <class time_type, class CharT, class InItrT>
|
1215
|
-
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1279
|
+
template <class time_type, class CharT, class InItrT>
|
1280
|
+
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1216
1281
|
time_input_facet<time_type, CharT, InItrT>::seconds_format = time_formats<CharT>::seconds_format;
|
1217
1282
|
|
1218
|
-
template <class time_type, class CharT, class InItrT>
|
1219
|
-
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1283
|
+
template <class time_type, class CharT, class InItrT>
|
1284
|
+
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1220
1285
|
time_input_facet<time_type, CharT, InItrT>::standard_format = time_formats<CharT>::standard_format;
|
1221
1286
|
|
1222
|
-
template <class time_type, class CharT, class InItrT>
|
1223
|
-
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1287
|
+
template <class time_type, class CharT, class InItrT>
|
1288
|
+
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1224
1289
|
time_input_facet<time_type, CharT, InItrT>::zone_abbrev_format = time_formats<CharT>::zone_abbrev_format;
|
1225
1290
|
|
1226
|
-
template <class time_type, class CharT, class InItrT>
|
1227
|
-
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1291
|
+
template <class time_type, class CharT, class InItrT>
|
1292
|
+
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1228
1293
|
time_input_facet<time_type, CharT, InItrT>::zone_name_format = time_formats<CharT>::zone_name_format;
|
1229
1294
|
|
1230
|
-
template <class time_type, class CharT, class InItrT>
|
1231
|
-
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1295
|
+
template <class time_type, class CharT, class InItrT>
|
1296
|
+
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1232
1297
|
time_input_facet<time_type, CharT, InItrT>::zone_iso_format = time_formats<CharT>::zone_iso_format;
|
1233
1298
|
|
1234
|
-
template <class time_type, class CharT, class InItrT>
|
1235
|
-
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1299
|
+
template <class time_type, class CharT, class InItrT>
|
1300
|
+
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1236
1301
|
time_input_facet<time_type, CharT, InItrT>::zone_iso_extended_format = time_formats<CharT>::zone_iso_extended_format;
|
1237
1302
|
|
1238
|
-
template <class time_type, class CharT, class InItrT>
|
1239
|
-
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1303
|
+
template <class time_type, class CharT, class InItrT>
|
1304
|
+
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1240
1305
|
time_input_facet<time_type, CharT, InItrT>::duration_seperator = time_formats<CharT>::duration_seperator;
|
1241
1306
|
|
1242
|
-
template <class time_type, class CharT, class InItrT>
|
1243
|
-
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1307
|
+
template <class time_type, class CharT, class InItrT>
|
1308
|
+
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1244
1309
|
time_input_facet<time_type, CharT, InItrT>::iso_time_format_specifier = time_formats<CharT>::iso_time_format_specifier;
|
1245
1310
|
|
1246
|
-
template <class time_type, class CharT, class InItrT>
|
1247
|
-
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1311
|
+
template <class time_type, class CharT, class InItrT>
|
1312
|
+
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1248
1313
|
time_input_facet<time_type, CharT, InItrT>::iso_time_format_extended_specifier = time_formats<CharT>::iso_time_format_extended_specifier;
|
1249
1314
|
|
1250
|
-
template <class time_type, class CharT, class InItrT>
|
1251
|
-
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1315
|
+
template <class time_type, class CharT, class InItrT>
|
1316
|
+
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1252
1317
|
time_input_facet<time_type, CharT, InItrT>::default_time_input_format = time_formats<CharT>::default_time_input_format;
|
1253
1318
|
|
1254
|
-
template <class time_type, class CharT, class InItrT>
|
1255
|
-
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1319
|
+
template <class time_type, class CharT, class InItrT>
|
1320
|
+
const typename time_input_facet<time_type, CharT, InItrT>::char_type*
|
1256
1321
|
time_input_facet<time_type, CharT, InItrT>::default_time_duration_format = time_formats<CharT>::default_time_duration_format;
|
1257
1322
|
|
1258
1323
|
|