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.

Files changed (1338) hide show
  1. data/DEVELOPERS.TXT +21 -12
  2. data/LICENSE +1 -1
  3. data/NEWS +8 -1
  4. data/PACKAGING.TXT +25 -0
  5. data/Rakefile +28 -891
  6. data/bin/passenger +32 -0
  7. data/bin/passenger-config +5 -5
  8. data/bin/passenger-install-apache2-module +37 -24
  9. data/bin/passenger-install-nginx-module +48 -46
  10. data/bin/passenger-make-enterprisey +8 -9
  11. data/bin/passenger-memory-stats +20 -150
  12. data/bin/passenger-status +130 -44
  13. data/bin/passenger-stress-test +5 -4
  14. data/build/agents.rb +73 -0
  15. data/build/apache2.rb +165 -0
  16. data/build/basics.rb +81 -0
  17. data/build/common_library.rb +198 -0
  18. data/build/config.rb +35 -0
  19. data/{misc/rake/cplusplus.rb → build/cplusplus_support.rb} +1 -1
  20. data/build/cxx_tests.rb +205 -0
  21. data/build/documentation.rb +77 -0
  22. data/{misc/rake → build}/gempackagetask.rb +1 -1
  23. data/build/integration_tests.rb +57 -0
  24. data/build/misc.rb +146 -0
  25. data/build/nginx.rb +64 -0
  26. data/build/oxt_tests.rb +52 -0
  27. data/{misc/rake → build}/packagetask.rb +0 -0
  28. data/build/packaging.rb +189 -0
  29. data/{misc/rake/extensions.rb → build/rake_extensions.rb} +1 -1
  30. data/{misc/rake → build}/rdoctask.rb +0 -0
  31. data/build/ruby_extension.rb +46 -0
  32. data/build/ruby_tests.rb +42 -0
  33. data/build/test_basics.rb +31 -0
  34. data/doc/ApplicationPool algorithm.txt +447 -234
  35. data/doc/Architectural overview.html +47 -56
  36. data/doc/Doxyfile +1 -1
  37. data/doc/Security of user switching support.html +46 -57
  38. data/doc/Users guide Apache.html +1033 -306
  39. data/doc/Users guide Apache.txt +419 -99
  40. data/doc/Users guide Nginx.html +1252 -253
  41. data/doc/Users guide Nginx.txt +711 -87
  42. data/doc/Users guide Standalone.html +603 -0
  43. data/doc/Users guide Standalone.txt +40 -0
  44. data/doc/cxxapi/AbstractSpawnManager_8h_source.html +141 -0
  45. data/doc/cxxapi/Account_8h_source.html +206 -0
  46. data/doc/cxxapi/AccountsDatabase_8h_source.html +161 -0
  47. data/doc/cxxapi/AgentBase_8h_source.html +70 -0
  48. data/doc/cxxapi/AgentsStarter_8h_source.html +112 -0
  49. data/doc/cxxapi/BCrypt_8h_source.html +104 -0
  50. data/doc/cxxapi/Blowfish_8h_source.html +134 -0
  51. data/doc/cxxapi/Bucket_8h_source.html +4 -3
  52. data/doc/cxxapi/Constants_8h_source.html +79 -0
  53. data/doc/cxxapi/ContentHandler_8h_source.html +95 -0
  54. data/doc/cxxapi/DirectoryMapper_8h_source.html +9 -8
  55. data/doc/cxxapi/EventedClient_8h_source.html +629 -0
  56. data/doc/cxxapi/EventedMessageServer_8h_source.html +358 -0
  57. data/doc/cxxapi/EventedServer_8h_source.html +326 -0
  58. data/doc/cxxapi/Exceptions_8h_source.html +366 -0
  59. data/doc/cxxapi/FileDescriptor_8h_source.html +260 -0
  60. data/doc/cxxapi/Hooks_8h_source.html +2 -1
  61. data/doc/cxxapi/HttpStatusExtractor_8h_source.html +382 -0
  62. data/doc/cxxapi/Logging_8h_source.html +726 -0
  63. data/doc/cxxapi/MessageChannel_8h_source.html +852 -0
  64. data/doc/cxxapi/MessageClient_8h_source.html +328 -0
  65. data/doc/cxxapi/MessageReadersWriters_8h_source.html +539 -0
  66. data/doc/cxxapi/MessageServer_8h_source.html +606 -0
  67. data/doc/cxxapi/PoolOptions_8h_source.html +548 -0
  68. data/doc/cxxapi/Process_8h_source.html +286 -0
  69. data/doc/cxxapi/RandomGenerator_8h_source.html +191 -0
  70. data/doc/cxxapi/ResourceLocator_8h_source.html +115 -0
  71. data/doc/cxxapi/ScgiRequestParser_8h_source.html +406 -0
  72. data/doc/cxxapi/ServerInstanceDir_8h_source.html +374 -0
  73. data/doc/cxxapi/Session_8h_source.html +501 -0
  74. data/doc/cxxapi/SpawnManager_8h_source.html +647 -0
  75. data/doc/cxxapi/StaticContentHandler_8h_source.html +68 -0
  76. data/doc/cxxapi/StaticString_8h_source.html +254 -0
  77. data/doc/cxxapi/StringListCreator_8h_source.html +114 -0
  78. data/doc/cxxapi/Utils_8h_source.html +442 -0
  79. data/doc/cxxapi/annotated.html +46 -0
  80. data/doc/cxxapi/apache2_2Configuration_8h_source.html +82 -0
  81. data/doc/cxxapi/classAgentWatcher-members.html +30 -26
  82. data/doc/cxxapi/classAgentWatcher.html +168 -194
  83. data/doc/cxxapi/classClient-members.html +14 -11
  84. data/doc/cxxapi/classClient.html +35 -35
  85. data/doc/cxxapi/classHooks-members.html +2 -0
  86. data/doc/cxxapi/classHooks.html +2 -0
  87. data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager-members.html +16 -13
  88. data/doc/cxxapi/classPassenger_1_1AbstractSpawnManager.html +78 -82
  89. data/doc/cxxapi/classPassenger_1_1ArgumentException-members.html +12 -9
  90. data/doc/cxxapi/classPassenger_1_1ArgumentException.html +26 -22
  91. data/doc/cxxapi/classPassenger_1_1ArrayMessage-members.html +37 -0
  92. data/doc/cxxapi/classPassenger_1_1ArrayMessage.html +113 -0
  93. data/doc/cxxapi/classPassenger_1_1BufferedUpload-members.html +14 -11
  94. data/doc/cxxapi/classPassenger_1_1BufferedUpload.html +41 -42
  95. data/doc/cxxapi/classPassenger_1_1BusyException-members.html +12 -9
  96. data/doc/cxxapi/classPassenger_1_1BusyException.html +24 -20
  97. data/doc/cxxapi/classPassenger_1_1ConfigurationException-members.html +12 -9
  98. data/doc/cxxapi/classPassenger_1_1ConfigurationException.html +23 -19
  99. data/doc/cxxapi/classPassenger_1_1DirectoryMapper-members.html +2 -0
  100. data/doc/cxxapi/classPassenger_1_1DirectoryMapper.html +8 -6
  101. data/doc/cxxapi/classPassenger_1_1EOFException-members.html +12 -9
  102. data/doc/cxxapi/classPassenger_1_1EOFException.html +27 -23
  103. data/doc/cxxapi/classPassenger_1_1EventFd-members.html +12 -9
  104. data/doc/cxxapi/classPassenger_1_1EventFd.html +24 -21
  105. data/doc/cxxapi/classPassenger_1_1EventedClient-members.html +54 -0
  106. data/doc/cxxapi/classPassenger_1_1EventedClient.html +436 -0
  107. data/doc/cxxapi/classPassenger_1_1EventedMessageServer-members.html +37 -0
  108. data/doc/cxxapi/classPassenger_1_1EventedMessageServer.html +59 -0
  109. data/doc/cxxapi/classPassenger_1_1EventedMessageServer__inherit__graph.map +3 -0
  110. data/doc/cxxapi/classPassenger_1_1EventedMessageServer__inherit__graph.md5 +1 -0
  111. data/doc/cxxapi/classPassenger_1_1EventedMessageServer__inherit__graph.png +0 -0
  112. data/doc/cxxapi/classPassenger_1_1EventedServer-members.html +37 -0
  113. data/doc/cxxapi/classPassenger_1_1EventedServer.html +93 -0
  114. data/doc/cxxapi/classPassenger_1_1EventedServer__inherit__graph.map +3 -0
  115. data/doc/cxxapi/classPassenger_1_1EventedServer__inherit__graph.md5 +1 -0
  116. data/doc/cxxapi/classPassenger_1_1EventedServer__inherit__graph.png +0 -0
  117. data/doc/cxxapi/classPassenger_1_1FileDescriptor-members.html +16 -13
  118. data/doc/cxxapi/classPassenger_1_1FileDescriptor.html +63 -70
  119. data/doc/cxxapi/classPassenger_1_1FileNotFoundException-members.html +12 -9
  120. data/doc/cxxapi/classPassenger_1_1FileNotFoundException.html +26 -22
  121. data/doc/cxxapi/classPassenger_1_1FileSystemException-members.html +17 -14
  122. data/doc/cxxapi/classPassenger_1_1FileSystemException.html +32 -30
  123. data/doc/cxxapi/classPassenger_1_1HttpStatusExtractor-members.html +15 -12
  124. data/doc/cxxapi/classPassenger_1_1HttpStatusExtractor.html +59 -59
  125. data/doc/cxxapi/classPassenger_1_1IOException-members.html +12 -9
  126. data/doc/cxxapi/classPassenger_1_1IOException.html +27 -23
  127. data/doc/cxxapi/classPassenger_1_1MessageChannel-members.html +36 -33
  128. data/doc/cxxapi/classPassenger_1_1MessageChannel.html +326 -344
  129. data/doc/cxxapi/classPassenger_1_1MessageServer-members.html +25 -22
  130. data/doc/cxxapi/classPassenger_1_1MessageServer.html +160 -191
  131. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext-members.html +12 -9
  132. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext.html +29 -27
  133. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.map +3 -1
  134. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.md5 +1 -1
  135. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1ClientContext__inherit__graph.png +0 -0
  136. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext-members.html +17 -14
  137. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext.html +69 -79
  138. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.map +3 -1
  139. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.md5 +1 -1
  140. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1CommonClientContext__inherit__graph.png +0 -0
  141. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler-members.html +15 -12
  142. data/doc/cxxapi/classPassenger_1_1MessageServer_1_1Handler.html +60 -63
  143. data/doc/cxxapi/classPassenger_1_1Process-members.html +20 -17
  144. data/doc/cxxapi/classPassenger_1_1Process.html +88 -95
  145. data/doc/cxxapi/classPassenger_1_1RandomGenerator-members.html +13 -10
  146. data/doc/cxxapi/classPassenger_1_1RandomGenerator.html +36 -35
  147. data/doc/cxxapi/classPassenger_1_1RuntimeException-members.html +12 -9
  148. data/doc/cxxapi/classPassenger_1_1RuntimeException.html +24 -20
  149. data/doc/cxxapi/classPassenger_1_1ScalarMessage-members.html +37 -0
  150. data/doc/cxxapi/classPassenger_1_1ScalarMessage.html +76 -0
  151. data/doc/cxxapi/classPassenger_1_1ScgiRequestParser-members.html +26 -23
  152. data/doc/cxxapi/classPassenger_1_1ScgiRequestParser.html +121 -138
  153. data/doc/cxxapi/classPassenger_1_1SecurityException-members.html +12 -9
  154. data/doc/cxxapi/classPassenger_1_1SecurityException.html +26 -22
  155. data/doc/cxxapi/classPassenger_1_1Session-members.html +29 -26
  156. data/doc/cxxapi/classPassenger_1_1Session.html +219 -240
  157. data/doc/cxxapi/classPassenger_1_1SpawnException-members.html +14 -11
  158. data/doc/cxxapi/classPassenger_1_1SpawnException.html +36 -37
  159. data/doc/cxxapi/classPassenger_1_1SpawnManager-members.html +18 -15
  160. data/doc/cxxapi/classPassenger_1_1SpawnManager.html +115 -110
  161. data/doc/cxxapi/classPassenger_1_1StandardSession-members.html +30 -27
  162. data/doc/cxxapi/classPassenger_1_1StandardSession.html +163 -184
  163. data/doc/cxxapi/classPassenger_1_1StaticString-members.html +12 -9
  164. data/doc/cxxapi/classPassenger_1_1StaticString.html +27 -25
  165. data/doc/cxxapi/classPassenger_1_1SystemException-members.html +16 -13
  166. data/doc/cxxapi/classPassenger_1_1SystemException.html +65 -67
  167. data/doc/cxxapi/classPassenger_1_1TimeRetrievalException-members.html +16 -13
  168. data/doc/cxxapi/classPassenger_1_1TimeRetrievalException.html +27 -23
  169. data/doc/cxxapi/classPassenger_1_1TimeoutException-members.html +12 -9
  170. data/doc/cxxapi/classPassenger_1_1TimeoutException.html +24 -20
  171. data/doc/cxxapi/classPassenger_1_1Uint16Message-members.html +36 -0
  172. data/doc/cxxapi/classPassenger_1_1Uint16Message.html +51 -0
  173. data/doc/cxxapi/classPassenger_1_1Uint32Message-members.html +36 -0
  174. data/doc/cxxapi/classPassenger_1_1Uint32Message.html +51 -0
  175. data/doc/cxxapi/classServer-members.html +12 -9
  176. data/doc/cxxapi/classServer.html +23 -20
  177. data/doc/cxxapi/classServerInstanceDirToucher-members.html +12 -9
  178. data/doc/cxxapi/classServerInstanceDirToucher.html +21 -17
  179. data/doc/cxxapi/classes.html +18 -4
  180. data/doc/cxxapi/definitions_8h_source.html +1 -0
  181. data/doc/cxxapi/files.html +36 -1
  182. data/doc/cxxapi/functions.html +53 -21
  183. data/doc/cxxapi/functions_0x62.html +82 -0
  184. data/doc/cxxapi/functions_0x63.html +99 -0
  185. data/doc/cxxapi/functions_0x64.html +95 -0
  186. data/doc/cxxapi/functions_0x65.html +88 -0
  187. data/doc/cxxapi/functions_0x66.html +100 -0
  188. data/doc/cxxapi/functions_0x67.html +170 -0
  189. data/doc/cxxapi/functions_0x68.html +88 -0
  190. data/doc/cxxapi/functions_0x69.html +93 -0
  191. data/doc/cxxapi/functions_0x6b.html +80 -0
  192. data/doc/cxxapi/functions_0x6c.html +88 -0
  193. data/doc/cxxapi/functions_0x6d.html +88 -0
  194. data/doc/cxxapi/functions_0x6e.html +86 -0
  195. data/doc/cxxapi/functions_0x6f.html +94 -0
  196. data/doc/cxxapi/functions_0x70.html +94 -0
  197. data/doc/cxxapi/functions_0x72.html +110 -0
  198. data/doc/cxxapi/functions_0x73.html +171 -0
  199. data/doc/cxxapi/functions_0x74.html +85 -0
  200. data/doc/cxxapi/functions_0x75.html +85 -0
  201. data/doc/cxxapi/functions_0x77.html +92 -0
  202. data/doc/cxxapi/functions_0x7e.html +79 -0
  203. data/doc/cxxapi/functions_enum.html +14 -12
  204. data/doc/cxxapi/functions_eval.html +22 -16
  205. data/doc/cxxapi/functions_func.html +460 -1
  206. data/doc/cxxapi/functions_vars.html +163 -63
  207. data/doc/cxxapi/graph_legend.html +1 -0
  208. data/doc/cxxapi/graph_legend.png +0 -0
  209. data/doc/cxxapi/group__Core.html +2 -2
  210. data/doc/cxxapi/group__Core.map +1 -2
  211. data/doc/cxxapi/group__Core.png +0 -0
  212. data/doc/cxxapi/group__Exceptions.html +32 -40
  213. data/doc/cxxapi/group__Hooks.html +2 -1
  214. data/doc/cxxapi/group__Hooks.map +1 -1
  215. data/doc/cxxapi/group__Hooks.png +0 -0
  216. data/doc/cxxapi/group__Support.html +509 -0
  217. data/doc/cxxapi/hierarchy.html +66 -62
  218. data/doc/cxxapi/inherit__graph__10.map +3 -1
  219. data/doc/cxxapi/inherit__graph__10.md5 +1 -1
  220. data/doc/cxxapi/inherit__graph__10.png +0 -0
  221. data/doc/cxxapi/inherit__graph__11.map +4 -1
  222. data/doc/cxxapi/inherit__graph__11.md5 +1 -1
  223. data/doc/cxxapi/inherit__graph__11.png +0 -0
  224. data/doc/cxxapi/inherit__graph__12.map +3 -1
  225. data/doc/cxxapi/inherit__graph__12.md5 +1 -1
  226. data/doc/cxxapi/inherit__graph__12.png +0 -0
  227. data/doc/cxxapi/inherit__graph__13.map +3 -1
  228. data/doc/cxxapi/inherit__graph__13.md5 +1 -1
  229. data/doc/cxxapi/inherit__graph__13.png +0 -0
  230. data/doc/cxxapi/inherit__graph__14.map +3 -1
  231. data/doc/cxxapi/inherit__graph__14.md5 +1 -1
  232. data/doc/cxxapi/inherit__graph__14.png +0 -0
  233. data/doc/cxxapi/inherit__graph__15.map +5 -1
  234. data/doc/cxxapi/inherit__graph__15.md5 +1 -1
  235. data/doc/cxxapi/inherit__graph__15.png +0 -0
  236. data/doc/cxxapi/inherit__graph__16.map +3 -3
  237. data/doc/cxxapi/inherit__graph__16.md5 +1 -1
  238. data/doc/cxxapi/inherit__graph__16.png +0 -0
  239. data/doc/cxxapi/inherit__graph__17.map +3 -1
  240. data/doc/cxxapi/inherit__graph__17.md5 +1 -1
  241. data/doc/cxxapi/inherit__graph__17.png +0 -0
  242. data/doc/cxxapi/inherit__graph__18.map +4 -1
  243. data/doc/cxxapi/inherit__graph__18.md5 +1 -1
  244. data/doc/cxxapi/inherit__graph__18.png +0 -0
  245. data/doc/cxxapi/inherit__graph__19.map +3 -1
  246. data/doc/cxxapi/inherit__graph__19.md5 +1 -1
  247. data/doc/cxxapi/inherit__graph__19.png +0 -0
  248. data/doc/cxxapi/inherit__graph__20.map +3 -2
  249. data/doc/cxxapi/inherit__graph__20.md5 +1 -1
  250. data/doc/cxxapi/inherit__graph__20.png +0 -0
  251. data/doc/cxxapi/inherit__graph__21.map +3 -1
  252. data/doc/cxxapi/inherit__graph__21.md5 +1 -1
  253. data/doc/cxxapi/inherit__graph__21.png +0 -0
  254. data/doc/cxxapi/inherit__graph__22.map +3 -1
  255. data/doc/cxxapi/inherit__graph__22.md5 +1 -1
  256. data/doc/cxxapi/inherit__graph__22.png +0 -0
  257. data/doc/cxxapi/inherit__graph__23.map +3 -1
  258. data/doc/cxxapi/inherit__graph__23.md5 +1 -1
  259. data/doc/cxxapi/inherit__graph__23.png +0 -0
  260. data/doc/cxxapi/inherit__graph__24.map +3 -1
  261. data/doc/cxxapi/inherit__graph__24.md5 +1 -1
  262. data/doc/cxxapi/inherit__graph__24.png +0 -0
  263. data/doc/cxxapi/inherit__graph__25.map +3 -1
  264. data/doc/cxxapi/inherit__graph__25.md5 +1 -1
  265. data/doc/cxxapi/inherit__graph__25.png +0 -0
  266. data/doc/cxxapi/inherit__graph__26.map +3 -1
  267. data/doc/cxxapi/inherit__graph__26.md5 +1 -1
  268. data/doc/cxxapi/inherit__graph__26.png +0 -0
  269. data/doc/cxxapi/inherit__graph__27.map +3 -1
  270. data/doc/cxxapi/inherit__graph__27.md5 +1 -1
  271. data/doc/cxxapi/inherit__graph__27.png +0 -0
  272. data/doc/cxxapi/inherit__graph__28.map +4 -1
  273. data/doc/cxxapi/inherit__graph__28.md5 +1 -1
  274. data/doc/cxxapi/inherit__graph__28.png +0 -0
  275. data/doc/cxxapi/inherit__graph__29.map +3 -1
  276. data/doc/cxxapi/inherit__graph__29.md5 +1 -1
  277. data/doc/cxxapi/inherit__graph__29.png +0 -0
  278. data/doc/cxxapi/inherit__graph__30.map +3 -2
  279. data/doc/cxxapi/inherit__graph__30.md5 +1 -1
  280. data/doc/cxxapi/inherit__graph__30.png +0 -0
  281. data/doc/cxxapi/inherit__graph__31.map +3 -1
  282. data/doc/cxxapi/inherit__graph__31.md5 +1 -1
  283. data/doc/cxxapi/inherit__graph__31.png +0 -0
  284. data/doc/cxxapi/inherit__graph__32.map +5 -1
  285. data/doc/cxxapi/inherit__graph__32.md5 +1 -1
  286. data/doc/cxxapi/inherit__graph__32.png +0 -0
  287. data/doc/cxxapi/inherit__graph__33.map +3 -1
  288. data/doc/cxxapi/inherit__graph__33.md5 +1 -1
  289. data/doc/cxxapi/inherit__graph__33.png +0 -0
  290. data/doc/cxxapi/inherit__graph__34.map +3 -3
  291. data/doc/cxxapi/inherit__graph__34.md5 +1 -1
  292. data/doc/cxxapi/inherit__graph__34.png +0 -0
  293. data/doc/cxxapi/inherit__graph__35.map +3 -1
  294. data/doc/cxxapi/inherit__graph__35.md5 +1 -1
  295. data/doc/cxxapi/inherit__graph__35.png +0 -0
  296. data/doc/cxxapi/inherit__graph__36.map +3 -1
  297. data/doc/cxxapi/inherit__graph__36.md5 +1 -1
  298. data/doc/cxxapi/inherit__graph__36.png +0 -0
  299. data/doc/cxxapi/inherit__graph__37.map +3 -1
  300. data/doc/cxxapi/inherit__graph__37.md5 +1 -1
  301. data/doc/cxxapi/inherit__graph__37.png +0 -0
  302. data/doc/cxxapi/inherit__graph__4.map +3 -1
  303. data/doc/cxxapi/inherit__graph__4.md5 +1 -1
  304. data/doc/cxxapi/inherit__graph__4.png +0 -0
  305. data/doc/cxxapi/inherit__graph__5.map +3 -1
  306. data/doc/cxxapi/inherit__graph__5.md5 +1 -1
  307. data/doc/cxxapi/inherit__graph__5.png +0 -0
  308. data/doc/cxxapi/inherit__graph__6.map +3 -1
  309. data/doc/cxxapi/inherit__graph__6.md5 +1 -1
  310. data/doc/cxxapi/inherit__graph__6.png +0 -0
  311. data/doc/cxxapi/inherit__graph__7.map +3 -1
  312. data/doc/cxxapi/inherit__graph__7.md5 +1 -1
  313. data/doc/cxxapi/inherit__graph__7.png +0 -0
  314. data/doc/cxxapi/inherit__graph__8.map +3 -1
  315. data/doc/cxxapi/inherit__graph__8.md5 +1 -1
  316. data/doc/cxxapi/inherit__graph__8.png +0 -0
  317. data/doc/cxxapi/inherit__graph__9.map +3 -1
  318. data/doc/cxxapi/inherit__graph__9.md5 +1 -1
  319. data/doc/cxxapi/inherit__graph__9.png +0 -0
  320. data/doc/cxxapi/inherits.html +123 -126
  321. data/doc/cxxapi/main.html +1 -0
  322. data/doc/cxxapi/modules.html +2 -1
  323. data/doc/cxxapi/namespacePassenger.html +263 -492
  324. data/doc/cxxapi/namespacemembers.html +68 -96
  325. data/doc/cxxapi/namespacemembers_enum.html +14 -12
  326. data/doc/cxxapi/namespacemembers_eval.html +20 -15
  327. data/doc/cxxapi/namespacemembers_func.html +52 -88
  328. data/doc/cxxapi/namespacemembers_type.html +18 -14
  329. data/doc/cxxapi/namespaces.html +12 -9
  330. data/doc/cxxapi/nginx_2Configuration_8h_source.html +125 -0
  331. data/doc/cxxapi/ngx__http__passenger__module_8h_source.html +94 -0
  332. data/doc/cxxapi/structPassenger_1_1MessageServer_1_1DisconnectEventBroadcastGuard-members.html +12 -9
  333. data/doc/cxxapi/structPassenger_1_1MessageServer_1_1DisconnectEventBroadcastGuard.html +24 -22
  334. data/doc/cxxapi/structPassenger_1_1PoolOptions-members.html +43 -38
  335. data/doc/cxxapi/structPassenger_1_1PoolOptions.html +275 -325
  336. data/doc/cxxapi/structPassenger_1_1StaticString_1_1Hash-members.html +12 -9
  337. data/doc/cxxapi/structPassenger_1_1StaticString_1_1Hash.html +24 -22
  338. data/doc/cxxapi/tree.html +152 -7
  339. data/doc/users_guide_snippets/{analysis_and_system_maintenance_tools.txt → analysis_and_system_maintenance.txt} +58 -1
  340. data/doc/users_guide_snippets/appendix_c_spawning_methods.txt +1 -2
  341. data/doc/users_guide_snippets/global_queueing_explained.txt +1 -5
  342. data/doc/users_guide_snippets/{rails_spawn_method.txt → passenger_spawn_method.txt} +9 -8
  343. data/doc/users_guide_snippets/tips.txt +12 -6
  344. data/doc/users_guide_snippets/under_the_hood/page_caching_support.txt +22 -0
  345. data/ext/apache2/Bucket.cpp +4 -4
  346. data/ext/apache2/Bucket.h +3 -3
  347. data/ext/apache2/Configuration.cpp +278 -381
  348. data/ext/apache2/Configuration.h +3 -357
  349. data/ext/apache2/Configuration.hpp +461 -0
  350. data/ext/apache2/DirectoryMapper.h +3 -3
  351. data/ext/apache2/HelperAgent.cpp +359 -0
  352. data/ext/apache2/Hooks.cpp +339 -226
  353. data/ext/apache2/Hooks.h +1 -1
  354. data/ext/apache2/mod_passenger.c +10 -4
  355. data/ext/boost/algorithm/string/case_conv.hpp +4 -4
  356. data/ext/boost/algorithm/string/concept.hpp +2 -2
  357. data/ext/boost/algorithm/string/detail/case_conv.hpp +18 -9
  358. data/ext/boost/algorithm/string/detail/find_format.hpp +44 -43
  359. data/ext/boost/algorithm/string/detail/find_format_all.hpp +56 -56
  360. data/ext/boost/algorithm/string/detail/find_format_store.hpp +7 -0
  361. data/ext/boost/algorithm/string/detail/finder.hpp +14 -14
  362. data/ext/boost/algorithm/string/detail/formatter.hpp +2 -2
  363. data/ext/boost/algorithm/string/detail/replace_storage.hpp +3 -3
  364. data/ext/boost/algorithm/string/detail/sequence.hpp +3 -3
  365. data/ext/boost/algorithm/string/erase.hpp +98 -98
  366. data/ext/boost/algorithm/string/find_format.hpp +56 -38
  367. data/ext/boost/algorithm/string/finder.hpp +6 -6
  368. data/ext/boost/algorithm/string/formatter.hpp +1 -1
  369. data/ext/boost/algorithm/string/replace.hpp +99 -99
  370. data/ext/boost/bind.hpp +5 -1670
  371. data/ext/boost/bind/bind.hpp +1751 -0
  372. data/ext/boost/bind/bind_mf2_cc.hpp +228 -0
  373. data/ext/boost/bind/mem_fn.hpp +389 -0
  374. data/ext/boost/bind/mem_fn_template.hpp +54 -27
  375. data/ext/boost/bind/placeholders.hpp +3 -2
  376. data/ext/boost/concept_check.hpp +10 -0
  377. data/ext/boost/config/abi/msvc_prefix.hpp +15 -1
  378. data/ext/boost/config/abi_prefix.hpp +1 -1
  379. data/ext/boost/config/abi_suffix.hpp +3 -2
  380. data/ext/boost/config/auto_link.hpp +6 -1
  381. data/ext/boost/config/compiler/borland.hpp +75 -17
  382. data/ext/boost/config/compiler/codegear.hpp +163 -0
  383. data/ext/boost/config/compiler/common_edg.hpp +35 -0
  384. data/ext/boost/config/compiler/digitalmars.hpp +26 -0
  385. data/ext/boost/config/compiler/gcc.hpp +69 -14
  386. data/ext/boost/config/compiler/hp_acc.hpp +32 -0
  387. data/ext/boost/config/compiler/intel.hpp +13 -2
  388. data/ext/boost/config/compiler/kai.hpp +0 -2
  389. data/ext/boost/config/compiler/metrowerks.hpp +29 -1
  390. data/ext/boost/config/compiler/mpw.hpp +30 -0
  391. data/ext/boost/config/compiler/pgi.hpp +37 -0
  392. data/ext/boost/config/compiler/sgi_mipspro.hpp +1 -0
  393. data/ext/boost/config/compiler/sunpro_cc.hpp +39 -7
  394. data/ext/boost/config/compiler/vacpp.hpp +31 -3
  395. data/ext/boost/config/compiler/visualc.hpp +72 -5
  396. data/ext/boost/config/no_tr1/cmath.hpp +28 -0
  397. data/ext/boost/config/platform/bsd.hpp +16 -3
  398. data/ext/boost/config/platform/hpux.hpp +3 -0
  399. data/ext/boost/config/platform/macos.hpp +8 -0
  400. data/ext/boost/config/platform/solaris.hpp +7 -0
  401. data/ext/boost/config/platform/vxworks.hpp +31 -0
  402. data/ext/boost/config/select_compiler_config.hpp +4 -0
  403. data/ext/boost/config/select_platform_config.hpp +6 -2
  404. data/ext/boost/config/select_stdlib_config.hpp +17 -8
  405. data/ext/boost/config/stdlib/dinkumware.hpp +34 -2
  406. data/ext/boost/config/stdlib/libcomo.hpp +25 -0
  407. data/ext/boost/config/stdlib/libstdcpp3.hpp +56 -2
  408. data/ext/boost/config/stdlib/modena.hpp +25 -0
  409. data/ext/boost/config/stdlib/msl.hpp +24 -0
  410. data/ext/boost/config/stdlib/roguewave.hpp +26 -0
  411. data/ext/boost/config/stdlib/sgi.hpp +25 -0
  412. data/ext/boost/config/stdlib/stlport.hpp +36 -1
  413. data/ext/boost/config/stdlib/vacpp.hpp +25 -0
  414. data/ext/boost/config/suffix.hpp +67 -32
  415. data/ext/boost/config/warning_disable.hpp +47 -0
  416. data/ext/boost/cstdint.hpp +62 -36
  417. data/ext/boost/date_time/c_time.hpp +28 -12
  418. data/ext/boost/date_time/compiler_config.hpp +27 -5
  419. data/ext/boost/date_time/constrained_value.hpp +36 -13
  420. data/ext/boost/date_time/date.hpp +44 -33
  421. data/ext/boost/date_time/date_duration.hpp +13 -14
  422. data/ext/boost/date_time/date_facet.hpp +215 -226
  423. data/ext/boost/date_time/date_generator_formatter.hpp +22 -20
  424. data/ext/boost/date_time/date_generator_parser.hpp +52 -51
  425. data/ext/boost/date_time/date_generators.hpp +16 -16
  426. data/ext/boost/date_time/date_parsing.hpp +115 -98
  427. data/ext/boost/date_time/filetime_functions.hpp +133 -41
  428. data/ext/boost/date_time/format_date_parser.hpp +22 -10
  429. data/ext/boost/date_time/gregorian/conversion.hpp +32 -39
  430. data/ext/boost/date_time/gregorian/greg_calendar.hpp +15 -14
  431. data/ext/boost/date_time/gregorian/greg_date.hpp +19 -18
  432. data/ext/boost/date_time/gregorian/greg_duration.hpp +106 -10
  433. data/ext/boost/date_time/gregorian/greg_duration_types.hpp +16 -7
  434. data/ext/boost/date_time/gregorian/greg_weekday.hpp +2 -2
  435. data/ext/boost/date_time/gregorian/gregorian_io.hpp +11 -4
  436. data/ext/boost/date_time/gregorian_calendar.hpp +8 -8
  437. data/ext/boost/date_time/gregorian_calendar.ipp +30 -30
  438. data/ext/boost/date_time/int_adapter.hpp +4 -2
  439. data/ext/boost/date_time/microsec_time_clock.hpp +39 -117
  440. data/ext/boost/date_time/period_parser.hpp +17 -15
  441. data/ext/boost/date_time/posix_time/conversion.hpp +28 -29
  442. data/ext/boost/date_time/posix_time/posix_time_config.hpp +19 -19
  443. data/ext/boost/date_time/posix_time/posix_time_io.hpp +31 -38
  444. data/ext/boost/date_time/posix_time/time_formatters.hpp +32 -32
  445. data/ext/boost/date_time/string_parse_tree.hpp +46 -46
  446. data/ext/boost/date_time/strings_from_facet.hpp +7 -5
  447. data/ext/boost/date_time/time.hpp +7 -6
  448. data/ext/boost/date_time/time_defs.hpp +12 -2
  449. data/ext/boost/date_time/time_duration.hpp +27 -26
  450. data/ext/boost/date_time/time_facet.hpp +386 -321
  451. data/ext/boost/date_time/time_formatting_streams.hpp +8 -5
  452. data/ext/boost/date_time/time_resolution_traits.hpp +29 -25
  453. data/ext/boost/date_time/time_system_split.hpp +7 -13
  454. data/ext/boost/date_time/wrapping_int.hpp +21 -15
  455. data/ext/boost/detail/call_traits.hpp +1 -1
  456. data/ext/boost/detail/endian.hpp +4 -4
  457. data/ext/boost/detail/no_exceptions_support.hpp +87 -0
  458. data/ext/boost/detail/sp_typeinfo.hpp +50 -4
  459. data/ext/boost/detail/workaround.hpp +63 -3
  460. data/ext/boost/enable_shared_from_this.hpp +4 -59
  461. data/ext/boost/exception/current_exception_cast.hpp +43 -0
  462. data/ext/boost/exception/detail/attribute_noreturn.hpp +17 -0
  463. data/ext/boost/exception/detail/error_info_impl.hpp +75 -0
  464. data/ext/boost/exception/detail/exception_ptr.hpp +490 -0
  465. data/ext/boost/exception/detail/is_output_streamable.hpp +47 -0
  466. data/ext/boost/exception/detail/object_hex_dump.hpp +50 -0
  467. data/ext/boost/exception/detail/type_info.hpp +79 -0
  468. data/ext/boost/exception/diagnostic_information.hpp +182 -0
  469. data/ext/boost/exception/exception.hpp +422 -0
  470. data/ext/boost/exception/get_error_info.hpp +130 -0
  471. data/ext/boost/exception/info.hpp +167 -0
  472. data/ext/boost/exception/to_string.hpp +83 -0
  473. data/ext/boost/exception/to_string_stub.hpp +109 -0
  474. data/ext/boost/exception_ptr.hpp +11 -0
  475. data/ext/boost/function/detail/prologue.hpp +2 -1
  476. data/ext/boost/function/function_base.hpp +270 -128
  477. data/ext/boost/function/function_fwd.hpp +70 -0
  478. data/ext/boost/function/function_template.hpp +319 -130
  479. data/ext/boost/get_pointer.hpp +5 -1
  480. data/ext/boost/integer.hpp +253 -0
  481. data/ext/boost/integer_fwd.hpp +174 -0
  482. data/ext/boost/integer_traits.hpp +26 -1
  483. data/ext/boost/io/ios_state.hpp +8 -0
  484. data/ext/boost/iterator/detail/config_def.hpp +4 -2
  485. data/ext/boost/iterator/iterator_adaptor.hpp +7 -2
  486. data/ext/boost/iterator/iterator_facade.hpp +1 -2
  487. data/ext/boost/lexical_cast.hpp +113 -105
  488. data/ext/boost/limits.hpp +1 -1
  489. data/ext/boost/mem_fn.hpp +5 -370
  490. data/ext/boost/memory_order.hpp +53 -0
  491. data/ext/boost/mpl/always.hpp +3 -3
  492. data/ext/boost/mpl/and.hpp +3 -3
  493. data/ext/boost/mpl/apply.hpp +3 -3
  494. data/ext/boost/mpl/apply_fwd.hpp +3 -3
  495. data/ext/boost/mpl/apply_wrap.hpp +37 -6
  496. data/ext/boost/mpl/arg.hpp +3 -3
  497. data/ext/boost/mpl/arg_fwd.hpp +3 -3
  498. data/ext/boost/mpl/assert.hpp +6 -6
  499. data/ext/boost/mpl/aux_/adl_barrier.hpp +3 -3
  500. data/ext/boost/mpl/aux_/arg_typedef.hpp +3 -3
  501. data/ext/boost/mpl/aux_/arity.hpp +3 -3
  502. data/ext/boost/mpl/aux_/arity_spec.hpp +3 -3
  503. data/ext/boost/mpl/aux_/common_name_wknd.hpp +3 -3
  504. data/ext/boost/mpl/aux_/config/adl.hpp +4 -4
  505. data/ext/boost/mpl/aux_/config/arrays.hpp +4 -4
  506. data/ext/boost/mpl/aux_/config/bcc.hpp +28 -0
  507. data/ext/boost/mpl/aux_/config/bind.hpp +4 -4
  508. data/ext/boost/mpl/aux_/config/compiler.hpp +8 -6
  509. data/ext/boost/mpl/aux_/config/ctps.hpp +3 -3
  510. data/ext/boost/mpl/aux_/config/dtp.hpp +5 -5
  511. data/ext/boost/mpl/aux_/config/eti.hpp +3 -3
  512. data/ext/boost/mpl/aux_/config/gcc.hpp +3 -3
  513. data/ext/boost/mpl/aux_/config/has_apply.hpp +3 -3
  514. data/ext/boost/mpl/aux_/config/has_xxx.hpp +3 -3
  515. data/ext/boost/mpl/aux_/config/integral.hpp +4 -4
  516. data/ext/boost/mpl/aux_/config/intel.hpp +3 -3
  517. data/ext/boost/mpl/aux_/config/lambda.hpp +3 -3
  518. data/ext/boost/mpl/aux_/config/msvc.hpp +3 -3
  519. data/ext/boost/mpl/aux_/config/msvc_typename.hpp +3 -3
  520. data/ext/boost/mpl/aux_/config/nttp.hpp +3 -3
  521. data/ext/boost/mpl/aux_/config/overload_resolution.hpp +3 -3
  522. data/ext/boost/mpl/aux_/config/pp_counter.hpp +3 -3
  523. data/ext/boost/mpl/aux_/config/preprocessor.hpp +4 -4
  524. data/ext/boost/mpl/aux_/config/static_constant.hpp +3 -3
  525. data/ext/boost/mpl/aux_/config/ttp.hpp +4 -4
  526. data/ext/boost/mpl/aux_/config/use_preprocessed.hpp +3 -3
  527. data/ext/boost/mpl/aux_/config/workaround.hpp +3 -3
  528. data/ext/boost/mpl/aux_/full_lambda.hpp +3 -3
  529. data/ext/boost/mpl/aux_/has_apply.hpp +3 -3
  530. data/ext/boost/mpl/aux_/has_type.hpp +3 -3
  531. data/ext/boost/mpl/aux_/include_preprocessed.hpp +3 -3
  532. data/ext/boost/mpl/aux_/integral_wrapper.hpp +3 -3
  533. data/ext/boost/mpl/aux_/lambda_arity_param.hpp +3 -3
  534. data/ext/boost/mpl/aux_/lambda_support.hpp +4 -4
  535. data/ext/boost/mpl/aux_/msvc_never_true.hpp +3 -3
  536. data/ext/boost/mpl/aux_/na.hpp +3 -3
  537. data/ext/boost/mpl/aux_/na_assert.hpp +3 -3
  538. data/ext/boost/mpl/aux_/na_fwd.hpp +3 -3
  539. data/ext/boost/mpl/aux_/na_spec.hpp +3 -3
  540. data/ext/boost/mpl/aux_/nested_type_wknd.hpp +3 -3
  541. data/ext/boost/mpl/aux_/nttp_decl.hpp +3 -3
  542. data/ext/boost/mpl/aux_/preprocessor/def_params_tail.hpp +3 -3
  543. data/ext/boost/mpl/aux_/preprocessor/enum.hpp +3 -3
  544. data/ext/boost/mpl/aux_/preprocessor/filter_params.hpp +3 -3
  545. data/ext/boost/mpl/aux_/preprocessor/params.hpp +3 -3
  546. data/ext/boost/mpl/aux_/preprocessor/sub.hpp +3 -3
  547. data/ext/boost/mpl/aux_/static_cast.hpp +3 -3
  548. data/ext/boost/mpl/aux_/template_arity.hpp +3 -3
  549. data/ext/boost/mpl/aux_/template_arity_fwd.hpp +3 -3
  550. data/ext/boost/mpl/aux_/type_wrapper.hpp +3 -3
  551. data/ext/boost/mpl/aux_/value_wknd.hpp +3 -3
  552. data/ext/boost/mpl/aux_/yes_no.hpp +3 -3
  553. data/ext/boost/mpl/bind.hpp +3 -3
  554. data/ext/boost/mpl/bind_fwd.hpp +3 -3
  555. data/ext/boost/mpl/bool.hpp +3 -3
  556. data/ext/boost/mpl/bool_fwd.hpp +3 -3
  557. data/ext/boost/mpl/eval_if.hpp +3 -3
  558. data/ext/boost/mpl/has_xxx.hpp +10 -8
  559. data/ext/boost/mpl/identity.hpp +3 -3
  560. data/ext/boost/mpl/if.hpp +3 -3
  561. data/ext/boost/mpl/int.hpp +3 -3
  562. data/ext/boost/mpl/int_fwd.hpp +3 -3
  563. data/ext/boost/mpl/integral_c.hpp +3 -3
  564. data/ext/boost/mpl/integral_c_fwd.hpp +3 -3
  565. data/ext/boost/mpl/integral_c_tag.hpp +3 -3
  566. data/ext/boost/mpl/lambda.hpp +3 -3
  567. data/ext/boost/mpl/lambda_fwd.hpp +3 -3
  568. data/ext/boost/mpl/limits/arity.hpp +3 -3
  569. data/ext/boost/mpl/logical.hpp +3 -3
  570. data/ext/boost/mpl/next.hpp +3 -3
  571. data/ext/boost/mpl/next_prior.hpp +3 -3
  572. data/ext/boost/mpl/not.hpp +3 -3
  573. data/ext/boost/mpl/or.hpp +3 -3
  574. data/ext/boost/mpl/placeholders.hpp +3 -3
  575. data/ext/boost/mpl/protect.hpp +3 -3
  576. data/ext/boost/mpl/quote.hpp +18 -7
  577. data/ext/boost/mpl/size_t.hpp +3 -3
  578. data/ext/boost/mpl/size_t_fwd.hpp +3 -3
  579. data/ext/boost/mpl/void.hpp +3 -3
  580. data/ext/boost/mpl/void_fwd.hpp +3 -3
  581. data/ext/boost/non_type.hpp +27 -27
  582. data/ext/boost/operators.hpp +51 -18
  583. data/ext/boost/preprocessor/arithmetic/detail/div_base.hpp +61 -0
  584. data/ext/boost/preprocessor/arithmetic/mod.hpp +39 -0
  585. data/ext/boost/preprocessor/comparison/less_equal.hpp +39 -0
  586. data/ext/boost/preprocessor/control/deduce_d.hpp +22 -0
  587. data/ext/boost/preprocessor/logical/not.hpp +30 -0
  588. data/ext/boost/preprocessor/seq/cat.hpp +48 -0
  589. data/ext/boost/preprocessor/seq/fold_left.hpp +1070 -0
  590. data/ext/boost/preprocessor/seq/transform.hpp +48 -0
  591. data/ext/boost/range/as_literal.hpp +10 -14
  592. data/ext/boost/range/begin.hpp +4 -4
  593. data/ext/boost/range/detail/implementation_help.hpp +4 -0
  594. data/ext/boost/range/end.hpp +4 -4
  595. data/ext/boost/range/iterator_range.hpp +31 -15
  596. data/ext/boost/ref.hpp +12 -1
  597. data/ext/boost/scoped_array.hpp +16 -0
  598. data/ext/boost/scoped_ptr.hpp +16 -0
  599. data/ext/boost/shared_ptr.hpp +2 -602
  600. data/ext/boost/{detail → smart_ptr}/bad_weak_ptr.hpp +4 -4
  601. data/ext/boost/{detail → smart_ptr/detail}/atomic_count.hpp +14 -19
  602. data/ext/boost/{detail → smart_ptr/detail}/atomic_count_gcc.hpp +13 -9
  603. data/ext/boost/{detail → smart_ptr/detail}/atomic_count_gcc_x86.hpp +5 -12
  604. data/ext/boost/{detail → smart_ptr/detail}/atomic_count_pthreads.hpp +5 -5
  605. data/ext/boost/{detail → smart_ptr/detail}/atomic_count_solaris.hpp +3 -3
  606. data/ext/boost/{detail → smart_ptr/detail}/atomic_count_sync.hpp +9 -5
  607. data/ext/boost/{detail → smart_ptr/detail}/atomic_count_win32.hpp +3 -3
  608. data/ext/boost/smart_ptr/detail/operator_bool.hpp +56 -0
  609. data/ext/boost/{detail → smart_ptr/detail}/shared_count.hpp +86 -17
  610. data/ext/boost/smart_ptr/detail/sp_convertible.hpp +76 -0
  611. data/ext/boost/smart_ptr/detail/sp_counted_base.hpp +70 -0
  612. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_acc_ia64.hpp +4 -4
  613. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_cw_ppc.hpp +4 -4
  614. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_cw_x86.hpp +4 -4
  615. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_gcc_ia64.hpp +4 -4
  616. data/ext/boost/smart_ptr/detail/sp_counted_base_gcc_mips.hpp +172 -0
  617. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_gcc_ppc.hpp +4 -4
  618. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_gcc_sparc.hpp +7 -7
  619. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_gcc_x86.hpp +4 -4
  620. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_nt.hpp +4 -4
  621. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_pt.hpp +4 -4
  622. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_solaris.hpp +4 -4
  623. data/ext/boost/smart_ptr/detail/sp_counted_base_spin.hpp +131 -0
  624. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_sync.hpp +8 -4
  625. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_base_w32.hpp +4 -4
  626. data/ext/boost/{detail → smart_ptr/detail}/sp_counted_impl.hpp +5 -5
  627. data/ext/boost/smart_ptr/detail/sp_has_sync.hpp +49 -0
  628. data/ext/boost/smart_ptr/detail/spinlock.hpp +53 -0
  629. data/ext/boost/smart_ptr/detail/spinlock_gcc_arm.hpp +85 -0
  630. data/ext/boost/smart_ptr/detail/spinlock_nt.hpp +89 -0
  631. data/ext/boost/smart_ptr/detail/spinlock_pool.hpp +87 -0
  632. data/ext/boost/smart_ptr/detail/spinlock_pt.hpp +79 -0
  633. data/ext/boost/smart_ptr/detail/spinlock_sync.hpp +87 -0
  634. data/ext/boost/smart_ptr/detail/yield_k.hpp +149 -0
  635. data/ext/boost/smart_ptr/enable_shared_from_this.hpp +79 -0
  636. data/ext/boost/smart_ptr/scoped_array.hpp +107 -0
  637. data/ext/boost/smart_ptr/scoped_ptr.hpp +131 -0
  638. data/ext/boost/smart_ptr/shared_ptr.hpp +701 -0
  639. data/ext/boost/smart_ptr/weak_ptr.hpp +230 -0
  640. data/ext/boost/src/pthread/thread.cpp +115 -203
  641. data/ext/boost/src/tss_null.cpp +1 -1
  642. data/ext/boost/static_assert.hpp +14 -4
  643. data/ext/boost/thread.hpp +7 -2
  644. data/ext/boost/thread/barrier.hpp +63 -0
  645. data/ext/boost/thread/detail/force_cast.hpp +39 -0
  646. data/ext/boost/thread/detail/move.hpp +29 -2
  647. data/ext/boost/thread/detail/platform.hpp +3 -3
  648. data/ext/boost/thread/detail/singleton.hpp +59 -0
  649. data/ext/boost/thread/detail/thread.hpp +496 -0
  650. data/ext/boost/thread/detail/thread_group.hpp +105 -0
  651. data/ext/boost/thread/detail/thread_heap_alloc.hpp +23 -0
  652. data/ext/boost/thread/detail/thread_interruption.hpp +35 -0
  653. data/ext/boost/thread/detail/tss_hooks.hpp +82 -0
  654. data/ext/boost/thread/exceptions.hpp +174 -60
  655. data/ext/boost/thread/future.hpp +1364 -0
  656. data/ext/boost/thread/locks.hpp +899 -32
  657. data/ext/boost/thread/once.hpp +4 -0
  658. data/ext/boost/thread/pthread/condition_variable.hpp +16 -21
  659. data/ext/boost/thread/pthread/condition_variable_fwd.hpp +37 -3
  660. data/ext/boost/thread/pthread/mutex.hpp +20 -7
  661. data/ext/boost/thread/pthread/once.hpp +7 -2
  662. data/ext/boost/thread/pthread/pthread_mutex_scoped_lock.hpp +5 -1
  663. data/ext/boost/thread/pthread/recursive_mutex.hpp +22 -5
  664. data/ext/boost/thread/pthread/shared_mutex.hpp +303 -0
  665. data/ext/boost/thread/pthread/thread_data.hpp +37 -10
  666. data/ext/boost/thread/pthread/thread_heap_alloc.hpp +242 -0
  667. data/ext/boost/thread/pthread/timespec.hpp +11 -3
  668. data/ext/boost/thread/shared_mutex.hpp +21 -0
  669. data/ext/boost/thread/thread.hpp +8 -3
  670. data/ext/boost/thread/thread_time.hpp +4 -0
  671. data/ext/boost/thread/tss.hpp +106 -13
  672. data/ext/boost/thread/xtime.hpp +6 -2
  673. data/ext/boost/throw_exception.hpp +36 -7
  674. data/ext/boost/token_functions.hpp +1 -1
  675. data/ext/boost/tokenizer.hpp +1 -1
  676. data/ext/boost/type_traits/add_pointer.hpp +1 -1
  677. data/ext/boost/type_traits/add_volatile.hpp +47 -0
  678. data/ext/boost/type_traits/alignment_of.hpp +29 -1
  679. data/ext/boost/type_traits/config.hpp +1 -1
  680. data/ext/boost/type_traits/conversion_traits.hpp +1 -1
  681. data/ext/boost/type_traits/has_trivial_destructor.hpp +42 -0
  682. data/ext/boost/type_traits/intrinsics.hpp +88 -1
  683. data/ext/boost/type_traits/is_abstract.hpp +14 -5
  684. data/ext/boost/type_traits/is_arithmetic.hpp +8 -0
  685. data/ext/boost/type_traits/is_array.hpp +3 -2
  686. data/ext/boost/type_traits/is_base_and_derived.hpp +254 -0
  687. data/ext/boost/type_traits/is_base_of.hpp +51 -0
  688. data/ext/boost/type_traits/is_class.hpp +12 -0
  689. data/ext/boost/type_traits/is_const.hpp +6 -2
  690. data/ext/boost/type_traits/is_convertible.hpp +14 -2
  691. data/ext/boost/type_traits/is_enum.hpp +10 -1
  692. data/ext/boost/type_traits/is_function.hpp +11 -3
  693. data/ext/boost/type_traits/is_fundamental.hpp +45 -0
  694. data/ext/boost/type_traits/is_integral.hpp +5 -0
  695. data/ext/boost/type_traits/is_member_function_pointer.hpp +5 -3
  696. data/ext/boost/type_traits/is_member_pointer.hpp +4 -2
  697. data/ext/boost/type_traits/is_pointer.hpp +3 -1
  698. data/ext/boost/type_traits/is_reference.hpp +4 -2
  699. data/ext/boost/type_traits/is_signed.hpp +135 -0
  700. data/ext/boost/type_traits/is_unsigned.hpp +130 -0
  701. data/ext/boost/type_traits/is_void.hpp +5 -0
  702. data/ext/boost/type_traits/is_volatile.hpp +4 -2
  703. data/ext/boost/type_traits/make_unsigned.hpp +137 -0
  704. data/ext/boost/type_traits/remove_reference.hpp +1 -1
  705. data/ext/boost/type_traits/type_with_alignment.hpp +106 -1
  706. data/ext/boost/utility.hpp +2 -1
  707. data/ext/boost/utility/addressof.hpp +61 -17
  708. data/ext/boost/utility/binary.hpp +708 -0
  709. data/ext/boost/utility/enable_if.hpp +2 -2
  710. data/ext/boost/weak_ptr.hpp +4 -174
  711. data/ext/common/AbstractSpawnManager.h +110 -0
  712. data/ext/common/Account.h +175 -0
  713. data/ext/common/AccountsDatabase.cpp +81 -0
  714. data/ext/common/AccountsDatabase.h +130 -0
  715. data/ext/common/AgentBase.cpp +323 -0
  716. data/ext/common/{Version.h → AgentBase.h} +14 -6
  717. data/ext/common/AgentsStarter.cpp +154 -0
  718. data/ext/common/AgentsStarter.h +81 -0
  719. data/ext/common/AgentsStarter.hpp +619 -0
  720. data/ext/common/ApplicationPool/Client.h +796 -0
  721. data/ext/common/{ApplicationPool.h → ApplicationPool/Interface.h} +108 -18
  722. data/ext/common/ApplicationPool/Pool.h +1315 -0
  723. data/ext/common/ApplicationPool/Server.h +475 -0
  724. data/ext/common/BCrypt.cpp +343 -0
  725. data/ext/common/BCrypt.h +73 -0
  726. data/ext/common/Blowfish.c +685 -0
  727. data/ext/common/Blowfish.h +103 -0
  728. data/ext/common/Constants.h +48 -0
  729. data/ext/common/EventedClient.h +598 -0
  730. data/ext/common/EventedMessageServer.h +327 -0
  731. data/ext/common/EventedServer.h +295 -0
  732. data/ext/common/Exceptions.h +78 -1
  733. data/ext/common/FileDescriptor.h +229 -0
  734. data/ext/common/HelperAgent/BacktracesServer.h +59 -0
  735. data/ext/common/Logging.cpp +8 -9
  736. data/ext/common/Logging.h +593 -21
  737. data/ext/common/LoggingAgent/ChangeNotifier.h +63 -0
  738. data/ext/common/LoggingAgent/DataStoreId.h +177 -0
  739. data/ext/common/LoggingAgent/LoggingServer.h +1343 -0
  740. data/ext/common/LoggingAgent/Main.cpp +278 -0
  741. data/ext/common/LoggingAgent/RemoteSender.h +457 -0
  742. data/ext/common/MessageChannel.h +196 -34
  743. data/ext/common/MessageClient.h +297 -0
  744. data/ext/common/MessageReadersWriters.h +508 -0
  745. data/ext/common/MessageServer.h +575 -0
  746. data/ext/common/PoolOptions.h +279 -117
  747. data/ext/common/Process.h +255 -0
  748. data/ext/common/RandomGenerator.h +160 -0
  749. data/ext/common/ResourceLocator.h +84 -0
  750. data/ext/common/ServerInstanceDir.h +343 -0
  751. data/ext/common/Session.h +470 -0
  752. data/ext/common/SpawnManager.h +256 -201
  753. data/ext/common/StaticString.h +79 -4
  754. data/ext/common/StringListCreator.h +2 -2
  755. data/ext/common/Utils.cpp +385 -397
  756. data/ext/common/Utils.h +79 -165
  757. data/ext/common/{Base64.cpp → Utils/Base64.cpp} +0 -0
  758. data/ext/common/{Base64.h → Utils/Base64.h} +27 -1
  759. data/ext/common/Utils/BlockingQueue.h +136 -0
  760. data/ext/common/Utils/BlockingScalar.h +50 -0
  761. data/ext/common/{CachedFileStat.cpp → Utils/CachedFileStat.cpp} +1 -1
  762. data/ext/common/{CachedFileStat.h → Utils/CachedFileStat.h} +1 -1
  763. data/ext/common/{CachedFileStat.hpp → Utils/CachedFileStat.hpp} +1 -1
  764. data/ext/common/{FileChangeChecker.h → Utils/FileChangeChecker.h} +1 -1
  765. data/ext/common/Utils/FileHandleGuard.h +81 -0
  766. data/ext/common/Utils/IOUtils.cpp +754 -0
  767. data/ext/common/Utils/IOUtils.h +253 -0
  768. data/ext/common/Utils/MD5.cpp +406 -0
  769. data/ext/common/Utils/MD5.h +98 -0
  770. data/ext/common/Utils/MemZeroGuard.h +103 -0
  771. data/ext/common/Utils/ProcessMetricsCollector.h +462 -0
  772. data/ext/common/Utils/ScopeGuard.h +72 -0
  773. data/ext/common/Utils/StrIntUtils.cpp +329 -0
  774. data/ext/common/Utils/StrIntUtils.h +228 -0
  775. data/ext/common/{SystemTime.cpp → Utils/SystemTime.cpp} +5 -1
  776. data/ext/common/Utils/SystemTime.h +201 -0
  777. data/ext/common/{Timer.h → Utils/Timer.h} +58 -18
  778. data/ext/common/Utils/VariantMap.h +363 -0
  779. data/ext/common/Utils/foo.cpp +10 -0
  780. data/ext/common/Watchdog.cpp +1034 -0
  781. data/ext/google/COPYING +28 -0
  782. data/ext/google/ChangeLog +167 -0
  783. data/ext/google/dense_hash_map +310 -0
  784. data/ext/google/dense_hash_set +287 -0
  785. data/ext/google/sparse_hash_map +294 -0
  786. data/ext/google/sparse_hash_set +275 -0
  787. data/ext/google/sparsehash/densehashtable.h +1062 -0
  788. data/ext/google/sparsehash/sparseconfig.h +55 -0
  789. data/ext/google/sparsehash/sparsehashtable.h +1015 -0
  790. data/ext/google/sparsetable +1468 -0
  791. data/ext/google/type_traits.h +250 -0
  792. data/ext/libev/Changes +302 -0
  793. data/ext/libev/LICENSE +36 -0
  794. data/ext/libev/Makefile.am +18 -0
  795. data/ext/libev/Makefile.in +685 -0
  796. data/ext/libev/README +58 -0
  797. data/ext/libev/aclocal.m4 +7549 -0
  798. data/ext/libev/autogen.sh +6 -0
  799. data/ext/libev/config.guess +1526 -0
  800. data/ext/libev/config.h +122 -0
  801. data/ext/libev/config.h.in +121 -0
  802. data/ext/libev/config.sub +1658 -0
  803. data/ext/libev/configure +22156 -0
  804. data/ext/libev/configure.ac +18 -0
  805. data/ext/libev/ev++.h +800 -0
  806. data/ext/libev/ev.c +3694 -0
  807. data/ext/libev/ev.h +705 -0
  808. data/ext/libev/ev_epoll.c +228 -0
  809. data/ext/libev/ev_kqueue.c +196 -0
  810. data/ext/libev/ev_poll.c +144 -0
  811. data/ext/libev/ev_port.c +165 -0
  812. data/ext/libev/ev_select.c +308 -0
  813. data/ext/libev/ev_vars.h +187 -0
  814. data/ext/libev/ev_win32.c +153 -0
  815. data/ext/libev/ev_wrap.h +178 -0
  816. data/ext/libev/event.c +401 -0
  817. data/ext/libev/event.h +158 -0
  818. data/ext/libev/install-sh +294 -0
  819. data/ext/libev/libev.m4 +38 -0
  820. data/ext/libev/ltmain.sh +6871 -0
  821. data/ext/libev/missing +336 -0
  822. data/ext/libev/mkinstalldirs +111 -0
  823. data/ext/nginx/Configuration.c +532 -182
  824. data/ext/nginx/Configuration.h +33 -10
  825. data/ext/nginx/ContentHandler.c +188 -53
  826. data/ext/nginx/ContentHandler.h +1 -1
  827. data/ext/nginx/{HelperServer.cpp → HelperAgent.cpp} +433 -299
  828. data/ext/nginx/HttpStatusExtractor.h +1 -1
  829. data/ext/nginx/ScgiRequestParser.h +68 -11
  830. data/ext/nginx/StaticContentHandler.c +4 -1
  831. data/ext/nginx/StaticContentHandler.h +1 -1
  832. data/ext/nginx/config +5 -5
  833. data/ext/nginx/ngx_http_passenger_module.c +315 -469
  834. data/ext/nginx/ngx_http_passenger_module.h +8 -17
  835. data/ext/oxt/backtrace.cpp +49 -41
  836. data/ext/oxt/backtrace.hpp +1 -1
  837. data/ext/oxt/detail/backtrace_disabled.hpp +1 -1
  838. data/ext/oxt/detail/backtrace_enabled.hpp +16 -15
  839. data/ext/oxt/detail/spin_lock_darwin.hpp +69 -0
  840. data/ext/oxt/detail/spin_lock_gcc_x86.hpp +3 -4
  841. data/ext/oxt/detail/spin_lock_portable.hpp +1 -1
  842. data/ext/oxt/detail/spin_lock_pthreads.hpp +1 -1
  843. data/ext/oxt/detail/tracable_exception_disabled.hpp +1 -1
  844. data/ext/oxt/detail/tracable_exception_enabled.hpp +1 -1
  845. data/ext/oxt/dynamic_thread_group.hpp +195 -0
  846. data/ext/oxt/macros.hpp +1 -1
  847. data/ext/oxt/spin_lock.hpp +4 -2
  848. data/ext/oxt/system_calls.cpp +129 -13
  849. data/ext/oxt/system_calls.hpp +16 -2
  850. data/ext/oxt/thread.cpp +1 -1
  851. data/ext/oxt/thread.hpp +49 -14
  852. data/ext/oxt/tracable_exception.cpp +5 -5
  853. data/ext/oxt/tracable_exception.hpp +1 -1
  854. data/ext/phusion_passenger/extconf.rb +7 -2
  855. data/ext/phusion_passenger/native_support.c +733 -33
  856. data/{bin → helper-scripts}/passenger-spawn-server +50 -12
  857. data/helper-scripts/prespawn +63 -0
  858. data/lib/phusion_passenger.rb +113 -0
  859. data/lib/phusion_passenger/abstract_installer.rb +50 -12
  860. data/lib/phusion_passenger/abstract_request_handler.rb +432 -171
  861. data/lib/phusion_passenger/abstract_server.rb +125 -122
  862. data/lib/phusion_passenger/abstract_server_collection.rb +51 -22
  863. data/lib/phusion_passenger/admin_tools.rb +1 -1
  864. data/lib/phusion_passenger/admin_tools/memory_stats.rb +299 -0
  865. data/lib/phusion_passenger/admin_tools/server_instance.rb +334 -0
  866. data/lib/phusion_passenger/analytics_logger.rb +342 -0
  867. data/lib/phusion_passenger/{application.rb → app_process.rb} +73 -24
  868. data/lib/phusion_passenger/classic_rails/application_spawner.rb +344 -0
  869. data/lib/phusion_passenger/{railz → classic_rails}/cgi_fixed.rb +2 -2
  870. data/lib/phusion_passenger/{railz → classic_rails}/framework_spawner.rb +75 -98
  871. data/lib/phusion_passenger/{railz → classic_rails}/request_handler.rb +8 -6
  872. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_base_extension.rb +65 -0
  873. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_benchmarking_extension.rb +48 -0
  874. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ac_rescue_extension.rb +59 -0
  875. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/ar_abstract_adapter_extension.rb +54 -0
  876. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/as_cache_extension.rb +130 -0
  877. data/lib/phusion_passenger/classic_rails_extensions/analytics_logging/av_benchmark_helper_extension.rb +47 -0
  878. data/lib/phusion_passenger/classic_rails_extensions/init.rb +123 -0
  879. data/lib/phusion_passenger/console_text_template.rb +1 -1
  880. data/lib/phusion_passenger/constants.rb +9 -5
  881. data/lib/phusion_passenger/debug_logging.rb +104 -0
  882. data/lib/phusion_passenger/dependencies.rb +187 -4
  883. data/lib/phusion_passenger/exceptions.rb +4 -4
  884. data/lib/phusion_passenger/html_template.rb +6 -8
  885. data/lib/phusion_passenger/message_channel.rb +137 -21
  886. data/lib/phusion_passenger/message_client.rb +173 -0
  887. data/lib/phusion_passenger/native_support.rb +108 -0
  888. data/lib/phusion_passenger/packaging.rb +82 -13
  889. data/lib/phusion_passenger/platform_info.rb +84 -475
  890. data/lib/phusion_passenger/platform_info/apache.rb +329 -0
  891. data/lib/phusion_passenger/platform_info/binary_compatibility.rb +187 -0
  892. data/lib/phusion_passenger/platform_info/compiler.rb +154 -0
  893. data/lib/phusion_passenger/{events.rb → platform_info/curl.rb} +26 -23
  894. data/lib/phusion_passenger/platform_info/documentation_tools.rb +35 -0
  895. data/lib/phusion_passenger/platform_info/linux.rb +77 -0
  896. data/lib/phusion_passenger/platform_info/operating_system.rb +51 -0
  897. data/lib/phusion_passenger/platform_info/ruby.rb +198 -0
  898. data/lib/phusion_passenger/platform_info/zlib.rb +38 -0
  899. data/lib/phusion_passenger/plugin.rb +96 -0
  900. data/lib/phusion_passenger/public_api.rb +112 -0
  901. data/lib/phusion_passenger/rack/application_spawner.rb +146 -71
  902. data/lib/phusion_passenger/rack/request_handler.rb +36 -13
  903. data/lib/phusion_passenger/rails3_extensions/init.rb +204 -0
  904. data/lib/phusion_passenger/simple_benchmarking.rb +1 -1
  905. data/lib/phusion_passenger/spawn_manager.rb +137 -141
  906. data/lib/phusion_passenger/standalone/app_finder.rb +153 -0
  907. data/lib/phusion_passenger/standalone/command.rb +237 -0
  908. data/lib/phusion_passenger/standalone/config_file.rb +119 -0
  909. data/lib/phusion_passenger/standalone/help_command.rb +57 -0
  910. data/lib/phusion_passenger/standalone/main.rb +101 -0
  911. data/lib/phusion_passenger/standalone/package_runtime_command.rb +92 -0
  912. data/lib/phusion_passenger/standalone/runtime_installer.rb +466 -0
  913. data/lib/phusion_passenger/standalone/start_command.rb +510 -0
  914. data/lib/phusion_passenger/standalone/status_command.rb +62 -0
  915. data/lib/phusion_passenger/standalone/stop_command.rb +74 -0
  916. data/lib/phusion_passenger/standalone/utils.rb +42 -0
  917. data/lib/phusion_passenger/standalone/version_command.rb +42 -0
  918. data/lib/phusion_passenger/templates/framework_init_error.html.erb +1 -1
  919. data/lib/phusion_passenger/templates/standalone/cannot_write_to_dir.txt.erb +11 -0
  920. data/lib/phusion_passenger/templates/standalone/config.erb +69 -0
  921. data/lib/phusion_passenger/templates/standalone/possible_solutions_for_download_and_extraction_problems.txt.erb +17 -0
  922. data/lib/phusion_passenger/templates/standalone/run_installer_as_root.txt.erb +8 -0
  923. data/lib/phusion_passenger/templates/standalone/welcome.txt.erb +8 -0
  924. data/lib/phusion_passenger/templates/standalone_default_root/index.html +1 -0
  925. data/lib/phusion_passenger/templates/version_not_found.html.erb +2 -2
  926. data/lib/phusion_passenger/utils.rb +476 -125
  927. data/lib/phusion_passenger/utils/file_system_watcher.rb +186 -0
  928. data/lib/phusion_passenger/utils/hosts_file_parser.rb +130 -0
  929. data/lib/phusion_passenger/utils/tmpdir.rb +70 -0
  930. data/lib/phusion_passenger/utils/unseekable_socket.rb +196 -0
  931. data/lib/phusion_passenger/wsgi/application_spawner.rb +24 -20
  932. data/lib/phusion_passenger/wsgi/request_handler.py +1 -1
  933. data/misc/copy_boost_headers.rb +36 -9
  934. data/misc/find_owner_pipe_leaks.rb +1 -1
  935. data/misc/render_error_pages.rb +1 -1
  936. data/misc/union_station_gateway.crt +32 -0
  937. data/test/config.yml.example +24 -13
  938. data/test/cxx/ApplicationPool_PoolTest.cpp +33 -0
  939. data/test/cxx/ApplicationPool_PoolTestCases.cpp +1029 -0
  940. data/test/cxx/ApplicationPool_ServerTest.cpp +308 -0
  941. data/test/cxx/ApplicationPool_Server_PoolTest.cpp +80 -0
  942. data/test/{Base64Test.cpp → cxx/Base64Test.cpp} +4 -2
  943. data/test/{CachedFileStatTest.cpp → cxx/CachedFileStatTest.cpp} +3 -3
  944. data/test/{CxxTestMain.cpp → cxx/CxxTestMain.cpp} +6 -27
  945. data/test/cxx/EventedClientTest.cpp +386 -0
  946. data/test/{FileChangeCheckerTest.cpp → cxx/FileChangeCheckerTest.cpp} +3 -5
  947. data/test/cxx/FileDescriptorTest.cpp +69 -0
  948. data/test/{HttpStatusExtractorTest.cpp → cxx/HttpStatusExtractorTest.cpp} +1 -1
  949. data/test/cxx/IOUtilsTest.cpp +398 -0
  950. data/test/cxx/LoggingTest.cpp +914 -0
  951. data/test/cxx/MessageChannelTest.cpp +672 -0
  952. data/test/cxx/MessageReadersWritersTest.cpp +574 -0
  953. data/test/cxx/MessageServerTest.cpp +383 -0
  954. data/test/{PoolOptionsTest.cpp → cxx/PoolOptionsTest.cpp} +2 -3
  955. data/test/{ScgiRequestParserTest.cpp → cxx/ScgiRequestParserTest.cpp} +53 -1
  956. data/test/cxx/ServerInstanceDirTest.cpp +186 -0
  957. data/test/cxx/SpawnManagerTest.cpp +161 -0
  958. data/test/cxx/StaticStringTest.cpp +86 -0
  959. data/test/{SystemTimeTest.cpp → cxx/SystemTimeTest.cpp} +2 -2
  960. data/test/cxx/TestSupport.cpp +166 -0
  961. data/test/cxx/TestSupport.h +254 -0
  962. data/test/cxx/UtilsTest.cpp +521 -0
  963. data/test/cxx/VariantMapTest.cpp +179 -0
  964. data/test/integration_tests/apache2_tests.rb +198 -127
  965. data/test/integration_tests/cgi_environment_spec.rb +26 -0
  966. data/test/integration_tests/mycook_spec.rb +2 -28
  967. data/test/integration_tests/nginx_tests.rb +125 -16
  968. data/test/integration_tests/spec_helper.rb +19 -0
  969. data/test/oxt/backtrace_test.cpp +19 -59
  970. data/test/oxt/counter.hpp +55 -0
  971. data/test/oxt/dynamic_thread_group_test.cpp +131 -0
  972. data/test/oxt/oxt_test_main.cpp +2 -2
  973. data/test/oxt/spin_lock_test.cpp +59 -0
  974. data/test/oxt/syscall_interruption_test.cpp +1 -1
  975. data/test/ruby/abstract_request_handler_spec.rb +346 -25
  976. data/test/ruby/abstract_server_collection_spec.rb +4 -3
  977. data/test/ruby/abstract_server_spec.rb +37 -27
  978. data/test/ruby/admin_tools_spec.rb +362 -0
  979. data/test/ruby/analytics_logger_spec.rb +253 -0
  980. data/test/ruby/{application_spec.rb → app_process_spec.rb} +14 -14
  981. data/test/ruby/classic_rails/application_spawner_spec.rb +89 -0
  982. data/test/ruby/classic_rails/framework_spawner_spec.rb +92 -0
  983. data/test/ruby/debug_logging_spec.rb +141 -0
  984. data/test/ruby/message_channel_spec.rb +51 -25
  985. data/test/ruby/rack/application_spawner_spec.rb +99 -82
  986. data/test/ruby/shared/abstract_server_spec.rb +23 -0
  987. data/test/ruby/shared/rails/analytics_logging_extensions_spec.rb +375 -0
  988. data/test/ruby/shared/spawners/classic_rails/framework_spawner_spec.rb +38 -0
  989. data/test/ruby/shared/spawners/classic_rails/lack_of_rails_gem_version_spec.rb +19 -0
  990. data/test/ruby/shared/spawners/classic_rails/spawner_spec.rb +15 -0
  991. data/test/ruby/shared/spawners/non_preloading_spawner_spec.rb +27 -0
  992. data/test/ruby/shared/spawners/preloading_spawner_spec.rb +29 -0
  993. data/test/ruby/shared/spawners/reload_all_spec.rb +36 -0
  994. data/test/ruby/shared/spawners/reload_single_spec.rb +52 -0
  995. data/test/ruby/shared/spawners/spawn_server_spec.rb +28 -0
  996. data/test/ruby/shared/spawners/spawner_spec.rb +273 -0
  997. data/test/ruby/shared/utils/pseudo_io_spec.rb +60 -0
  998. data/test/ruby/spawn_manager_spec.rb +104 -175
  999. data/test/ruby/spec_helper.rb +104 -0
  1000. data/test/ruby/utils/file_system_watcher_spec.rb +221 -0
  1001. data/test/ruby/utils/hosts_file_parser.rb +258 -0
  1002. data/test/ruby/utils/unseekable_socket_spec.rb +66 -0
  1003. data/test/ruby/utils_spec.rb +410 -59
  1004. data/test/ruby/wsgi/application_spawner_spec.rb +16 -20
  1005. data/test/stub/apache2/httpd.conf.erb +11 -6
  1006. data/test/stub/message_channel.rb +3 -1
  1007. data/test/stub/message_channel_2.rb +3 -1
  1008. data/test/stub/message_channel_3.rb +5 -3
  1009. data/test/stub/nginx/nginx.conf.erb +3 -2
  1010. data/test/stub/rails_apps/1.2/empty/Rakefile +10 -0
  1011. data/test/stub/rails_apps/1.2/empty/app/controllers/application.rb +7 -0
  1012. data/test/stub/rails_apps/{foobar → 1.2/empty}/app/helpers/application_helper.rb +0 -0
  1013. data/test/stub/rails_apps/{mycook → 1.2/empty}/config/boot.rb +3 -3
  1014. data/test/stub/rails_apps/1.2/empty/config/database.yml +31 -0
  1015. data/test/stub/rails_apps/1.2/empty/config/environment.rb +66 -0
  1016. data/test/stub/rails_apps/1.2/empty/config/environments/development.rb +21 -0
  1017. data/test/stub/rails_apps/{foobar → 1.2/empty}/config/environments/production.rb +0 -0
  1018. data/test/stub/rails_apps/1.2/empty/config/environments/staging.rb +18 -0
  1019. data/test/stub/rails_apps/1.2/empty/config/environments/test.rb +19 -0
  1020. data/test/stub/rails_apps/1.2/empty/config/routes.rb +23 -0
  1021. data/test/stub/rails_apps/1.2/empty/doc/README_FOR_APP +2 -0
  1022. data/test/stub/rails_apps/{mycook → 1.2/empty}/public/404.html +0 -0
  1023. data/test/stub/rails_apps/1.2/empty/public/500.html +30 -0
  1024. data/test/stub/rails_apps/1.2/empty/public/dispatch.cgi +10 -0
  1025. data/test/stub/rails_apps/1.2/empty/public/dispatch.fcgi +24 -0
  1026. data/test/stub/rails_apps/1.2/empty/public/dispatch.rb +10 -0
  1027. data/test/stub/rails_apps/{mycook → 1.2/empty}/public/favicon.ico +0 -0
  1028. data/test/stub/rails_apps/{mycook → 1.2/empty}/public/images/rails.png +0 -0
  1029. data/test/stub/rails_apps/1.2/empty/public/robots.txt +1 -0
  1030. data/test/stub/rails_apps/1.2/empty/script/about +3 -0
  1031. data/test/stub/rails_apps/1.2/empty/script/breakpointer +3 -0
  1032. data/test/stub/rails_apps/1.2/empty/script/console +3 -0
  1033. data/test/stub/rails_apps/1.2/empty/script/destroy +3 -0
  1034. data/test/stub/rails_apps/1.2/empty/script/generate +3 -0
  1035. data/test/stub/rails_apps/1.2/empty/script/performance/benchmarker +3 -0
  1036. data/test/stub/rails_apps/1.2/empty/script/performance/profiler +3 -0
  1037. data/test/stub/rails_apps/1.2/empty/script/plugin +3 -0
  1038. data/test/stub/rails_apps/1.2/empty/script/process/inspector +3 -0
  1039. data/test/stub/rails_apps/1.2/empty/script/process/reaper +3 -0
  1040. data/test/stub/rails_apps/1.2/empty/script/process/spawner +3 -0
  1041. data/test/stub/rails_apps/1.2/empty/script/runner +3 -0
  1042. data/test/stub/rails_apps/1.2/empty/script/server +3 -0
  1043. data/test/stub/rails_apps/1.2/empty/test/test_helper.rb +28 -0
  1044. data/test/stub/rails_apps/2.0/empty/Rakefile +10 -0
  1045. data/test/stub/rails_apps/2.0/empty/app/controllers/application.rb +10 -0
  1046. data/test/stub/rails_apps/{mycook → 2.0/empty}/app/helpers/application_helper.rb +0 -0
  1047. data/test/stub/rails_apps/{foobar → 2.0/empty}/config/boot.rb +3 -3
  1048. data/test/stub/rails_apps/2.0/empty/config/database.yml +31 -0
  1049. data/test/stub/rails_apps/2.0/empty/config/environment.rb +59 -0
  1050. data/test/stub/rails_apps/{mycook → 2.0/empty}/config/environments/development.rb +1 -1
  1051. data/test/stub/rails_apps/2.0/empty/config/environments/production.rb +18 -0
  1052. data/test/stub/rails_apps/2.0/empty/config/environments/staging.rb +18 -0
  1053. data/test/stub/rails_apps/2.0/empty/config/environments/test.rb +22 -0
  1054. data/test/stub/rails_apps/{foobar → 2.0/empty}/config/initializers/inflections.rb +0 -0
  1055. data/test/stub/rails_apps/{foobar → 2.0/empty}/config/initializers/mime_types.rb +0 -0
  1056. data/test/stub/rails_apps/{foobar → 2.0/empty}/config/routes.rb +0 -0
  1057. data/test/stub/rails_apps/2.0/empty/doc/README_FOR_APP +2 -0
  1058. data/test/stub/rails_apps/2.0/empty/public/404.html +30 -0
  1059. data/test/stub/rails_apps/{mycook → 2.0/empty}/public/422.html +0 -0
  1060. data/test/stub/rails_apps/{mycook → 2.0/empty}/public/500.html +0 -0
  1061. data/test/stub/rails_apps/2.0/empty/public/dispatch.cgi +10 -0
  1062. data/test/stub/rails_apps/2.0/empty/public/dispatch.fcgi +24 -0
  1063. data/test/stub/rails_apps/2.0/empty/public/dispatch.rb +10 -0
  1064. data/test/stub/rails_apps/2.0/empty/public/favicon.ico +0 -0
  1065. data/test/stub/rails_apps/2.0/empty/public/images/rails.png +0 -0
  1066. data/test/stub/rails_apps/{mycook → 2.0/empty}/public/robots.txt +0 -0
  1067. data/test/stub/rails_apps/2.0/empty/script/about +3 -0
  1068. data/test/stub/rails_apps/2.0/empty/script/console +3 -0
  1069. data/test/stub/rails_apps/2.0/empty/script/destroy +3 -0
  1070. data/test/stub/rails_apps/2.0/empty/script/generate +3 -0
  1071. data/test/stub/rails_apps/2.0/empty/script/performance/benchmarker +3 -0
  1072. data/test/stub/rails_apps/2.0/empty/script/performance/profiler +3 -0
  1073. data/test/stub/rails_apps/2.0/empty/script/performance/request +3 -0
  1074. data/test/stub/rails_apps/2.0/empty/script/plugin +3 -0
  1075. data/test/stub/rails_apps/2.0/empty/script/process/inspector +3 -0
  1076. data/test/stub/rails_apps/2.0/empty/script/process/reaper +3 -0
  1077. data/test/stub/rails_apps/2.0/empty/script/process/spawner +3 -0
  1078. data/test/stub/rails_apps/2.0/empty/script/runner +3 -0
  1079. data/test/stub/rails_apps/2.0/empty/script/server +3 -0
  1080. data/test/stub/rails_apps/2.0/empty/test/test_helper.rb +38 -0
  1081. data/test/stub/rails_apps/2.2/empty/Rakefile +10 -0
  1082. data/test/stub/rails_apps/2.2/empty/app/controllers/application.rb +15 -0
  1083. data/test/stub/rails_apps/2.2/empty/app/helpers/application_helper.rb +3 -0
  1084. data/test/stub/rails_apps/2.2/empty/config/boot.rb +109 -0
  1085. data/test/stub/rails_apps/2.2/empty/config/database.yml +31 -0
  1086. data/test/stub/rails_apps/2.2/empty/config/environment.rb +75 -0
  1087. data/test/stub/rails_apps/{foobar → 2.2/empty}/config/environments/development.rb +0 -0
  1088. data/test/stub/rails_apps/2.2/empty/config/environments/production.rb +24 -0
  1089. data/test/stub/rails_apps/2.2/empty/config/environments/staging.rb +24 -0
  1090. data/test/stub/rails_apps/2.2/empty/config/environments/test.rb +22 -0
  1091. data/test/stub/rails_apps/2.2/empty/config/initializers/inflections.rb +10 -0
  1092. data/test/stub/rails_apps/{mycook → 2.2/empty}/config/initializers/mime_types.rb +0 -0
  1093. data/test/stub/rails_apps/2.2/empty/config/initializers/new_rails_defaults.rb +17 -0
  1094. data/test/stub/rails_apps/2.2/empty/config/locales/en.yml +5 -0
  1095. data/test/stub/rails_apps/2.2/empty/config/routes.rb +43 -0
  1096. data/test/stub/rails_apps/2.2/empty/doc/README_FOR_APP +5 -0
  1097. data/test/stub/rails_apps/2.2/empty/public/404.html +30 -0
  1098. data/test/stub/rails_apps/2.2/empty/public/422.html +30 -0
  1099. data/test/stub/rails_apps/2.2/empty/public/500.html +33 -0
  1100. data/test/stub/rails_apps/2.2/empty/public/dispatch.cgi +10 -0
  1101. data/test/stub/rails_apps/2.2/empty/public/dispatch.fcgi +24 -0
  1102. data/test/stub/rails_apps/2.2/empty/public/dispatch.rb +10 -0
  1103. data/test/stub/rails_apps/2.2/empty/public/favicon.ico +0 -0
  1104. data/test/stub/rails_apps/2.2/empty/public/images/rails.png +0 -0
  1105. data/test/stub/rails_apps/2.2/empty/public/robots.txt +5 -0
  1106. data/test/stub/rails_apps/2.2/empty/script/about +4 -0
  1107. data/test/stub/rails_apps/2.2/empty/script/console +3 -0
  1108. data/test/stub/rails_apps/2.2/empty/script/dbconsole +3 -0
  1109. data/test/stub/rails_apps/2.2/empty/script/destroy +3 -0
  1110. data/test/stub/rails_apps/2.2/empty/script/generate +3 -0
  1111. data/test/stub/rails_apps/2.2/empty/script/performance/benchmarker +3 -0
  1112. data/test/stub/rails_apps/2.2/empty/script/performance/profiler +3 -0
  1113. data/test/stub/rails_apps/2.2/empty/script/performance/request +3 -0
  1114. data/test/stub/rails_apps/2.2/empty/script/plugin +3 -0
  1115. data/test/stub/rails_apps/2.2/empty/script/process/inspector +3 -0
  1116. data/test/stub/rails_apps/2.2/empty/script/process/reaper +3 -0
  1117. data/test/stub/rails_apps/2.2/empty/script/process/spawner +3 -0
  1118. data/test/stub/rails_apps/2.2/empty/script/runner +3 -0
  1119. data/test/stub/rails_apps/2.2/empty/script/server +3 -0
  1120. data/test/stub/rails_apps/2.2/empty/test/performance/browsing_test.rb +9 -0
  1121. data/test/stub/rails_apps/2.2/empty/test/test_helper.rb +38 -0
  1122. data/test/stub/rails_apps/2.3/empty/Rakefile +10 -0
  1123. data/test/stub/rails_apps/2.3/empty/app/controllers/application_controller.rb +10 -0
  1124. data/test/stub/rails_apps/2.3/empty/app/helpers/application_helper.rb +3 -0
  1125. data/test/stub/rails_apps/2.3/empty/config/boot.rb +110 -0
  1126. data/test/stub/rails_apps/2.3/empty/config/database.yml +31 -0
  1127. data/test/stub/rails_apps/2.3/empty/config/environment.rb +41 -0
  1128. data/test/stub/rails_apps/2.3/empty/config/environments/development.rb +17 -0
  1129. data/test/stub/rails_apps/2.3/empty/config/environments/production.rb +28 -0
  1130. data/test/stub/rails_apps/2.3/empty/config/environments/staging.rb +28 -0
  1131. data/test/stub/rails_apps/2.3/empty/config/environments/test.rb +28 -0
  1132. data/test/stub/rails_apps/2.3/empty/config/initializers/backtrace_silencers.rb +7 -0
  1133. data/test/stub/rails_apps/2.3/empty/config/initializers/inflections.rb +10 -0
  1134. data/test/stub/rails_apps/2.3/empty/config/initializers/mime_types.rb +5 -0
  1135. data/test/stub/rails_apps/2.3/empty/config/initializers/new_rails_defaults.rb +21 -0
  1136. data/test/stub/rails_apps/2.3/empty/config/initializers/session_store.rb +15 -0
  1137. data/test/stub/rails_apps/2.3/empty/config/locales/en.yml +5 -0
  1138. data/test/stub/rails_apps/2.3/empty/config/routes.rb +43 -0
  1139. data/test/stub/rails_apps/2.3/empty/db/seeds.rb +7 -0
  1140. data/test/stub/rails_apps/2.3/empty/doc/README_FOR_APP +2 -0
  1141. data/test/stub/rails_apps/2.3/empty/public/404.html +30 -0
  1142. data/test/stub/rails_apps/2.3/empty/public/422.html +30 -0
  1143. data/test/stub/rails_apps/2.3/empty/public/500.html +30 -0
  1144. data/test/stub/rails_apps/2.3/empty/public/favicon.ico +0 -0
  1145. data/test/stub/rails_apps/2.3/empty/public/images/rails.png +0 -0
  1146. data/test/stub/rails_apps/2.3/empty/public/robots.txt +5 -0
  1147. data/test/stub/rails_apps/2.3/empty/script/about +4 -0
  1148. data/test/stub/rails_apps/2.3/empty/script/console +3 -0
  1149. data/test/stub/rails_apps/2.3/empty/script/dbconsole +3 -0
  1150. data/test/stub/rails_apps/2.3/empty/script/destroy +3 -0
  1151. data/test/stub/rails_apps/2.3/empty/script/generate +3 -0
  1152. data/test/stub/rails_apps/2.3/empty/script/performance/benchmarker +3 -0
  1153. data/test/stub/rails_apps/2.3/empty/script/performance/profiler +3 -0
  1154. data/test/stub/rails_apps/2.3/empty/script/plugin +3 -0
  1155. data/test/stub/rails_apps/2.3/empty/script/runner +3 -0
  1156. data/test/stub/rails_apps/2.3/empty/script/server +3 -0
  1157. data/test/stub/rails_apps/2.3/empty/test/performance/browsing_test.rb +9 -0
  1158. data/test/stub/rails_apps/2.3/empty/test/test_helper.rb +38 -0
  1159. data/test/stub/rails_apps/2.3/foobar/Rakefile +10 -0
  1160. data/test/stub/rails_apps/{foobar/app/controllers/application.rb → 2.3/foobar/app/controllers/application_controller.rb} +0 -0
  1161. data/test/stub/rails_apps/{foobar → 2.3/foobar}/app/controllers/bar_controller_1.rb +0 -0
  1162. data/test/stub/rails_apps/{foobar → 2.3/foobar}/app/controllers/bar_controller_2.rb +0 -0
  1163. data/test/stub/rails_apps/{foobar → 2.3/foobar}/app/controllers/foo_controller.rb +0 -0
  1164. data/test/stub/rails_apps/2.3/foobar/app/helpers/application_helper.rb +3 -0
  1165. data/test/stub/rails_apps/2.3/foobar/config/boot.rb +110 -0
  1166. data/test/stub/rails_apps/{foobar → 2.3/foobar}/config/database.yml +0 -0
  1167. data/test/stub/rails_apps/{foobar → 2.3/foobar}/config/environment.rb +1 -1
  1168. data/test/stub/rails_apps/2.3/foobar/config/environments/development.rb +17 -0
  1169. data/test/stub/rails_apps/2.3/foobar/config/environments/production.rb +18 -0
  1170. data/test/stub/rails_apps/2.3/foobar/config/environments/staging.rb +18 -0
  1171. data/test/stub/rails_apps/{mycook → 2.3/foobar}/config/initializers/inflections.rb +0 -0
  1172. data/test/stub/rails_apps/2.3/foobar/config/initializers/mime_types.rb +5 -0
  1173. data/test/stub/rails_apps/2.3/foobar/config/routes.rb +35 -0
  1174. data/test/stub/rails_apps/2.3/foobar/script/about +3 -0
  1175. data/test/stub/rails_apps/2.3/foobar/script/console +3 -0
  1176. data/test/stub/rails_apps/2.3/foobar/script/dbconsole +3 -0
  1177. data/test/stub/rails_apps/2.3/foobar/script/destroy +3 -0
  1178. data/test/stub/rails_apps/2.3/foobar/script/generate +3 -0
  1179. data/test/stub/rails_apps/2.3/foobar/script/performance/benchmarker +3 -0
  1180. data/test/stub/rails_apps/2.3/foobar/script/performance/profiler +3 -0
  1181. data/test/stub/rails_apps/2.3/foobar/script/performance/request +3 -0
  1182. data/test/stub/rails_apps/2.3/foobar/script/plugin +3 -0
  1183. data/test/stub/rails_apps/2.3/foobar/script/process/inspector +3 -0
  1184. data/test/stub/rails_apps/2.3/foobar/script/process/reaper +3 -0
  1185. data/test/stub/rails_apps/2.3/foobar/script/process/spawner +3 -0
  1186. data/test/stub/rails_apps/2.3/foobar/script/runner +3 -0
  1187. data/test/stub/rails_apps/2.3/foobar/script/server +3 -0
  1188. data/test/stub/rails_apps/2.3/mycook/Rakefile +10 -0
  1189. data/test/stub/rails_apps/{mycook/app/controllers/application.rb → 2.3/mycook/app/controllers/application_controller.rb} +0 -0
  1190. data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/controllers/recipes_controller.rb +0 -0
  1191. data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/controllers/uploads_controller.rb +0 -0
  1192. data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/controllers/welcome_controller.rb +0 -0
  1193. data/test/stub/rails_apps/2.3/mycook/app/helpers/application_helper.rb +3 -0
  1194. data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/layouts/default.rhtml +0 -0
  1195. data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/recipes/create.rhtml +0 -0
  1196. data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/recipes/index.rhtml +0 -0
  1197. data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/recipes/new.rhtml +0 -0
  1198. data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/uploads/index.rhtml +0 -0
  1199. data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/uploads/new.html.erb +0 -0
  1200. data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/welcome/cached.rhtml +0 -0
  1201. data/test/stub/rails_apps/{mycook → 2.3/mycook}/app/views/welcome/index.rhtml +0 -0
  1202. data/test/stub/rails_apps/2.3/mycook/config/boot.rb +110 -0
  1203. data/test/stub/rails_apps/{mycook → 2.3/mycook}/config/database.yml +0 -0
  1204. data/test/stub/rails_apps/{mycook → 2.3/mycook}/config/environment.rb +1 -1
  1205. data/test/stub/rails_apps/2.3/mycook/config/environments/development.rb +18 -0
  1206. data/test/stub/rails_apps/{mycook → 2.3/mycook}/config/environments/production.rb +0 -0
  1207. data/test/stub/rails_apps/2.3/mycook/config/initializers/inflections.rb +10 -0
  1208. data/test/stub/rails_apps/2.3/mycook/config/initializers/mime_types.rb +5 -0
  1209. data/test/stub/rails_apps/{mycook → 2.3/mycook}/config/routes.rb +0 -0
  1210. data/test/stub/rails_apps/{mycook → 2.3/mycook}/log/useless.txt +0 -0
  1211. data/test/stub/rails_apps/2.3/mycook/public/404.html +30 -0
  1212. data/test/stub/rails_apps/2.3/mycook/public/422.html +30 -0
  1213. data/test/stub/rails_apps/2.3/mycook/public/500.html +30 -0
  1214. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/dispatch.cgi +0 -0
  1215. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/dispatch.fcgi +0 -0
  1216. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/dispatch.rb +1 -1
  1217. data/test/stub/rails_apps/2.3/mycook/public/favicon.ico +0 -0
  1218. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/images/angrywizard.gif +0 -0
  1219. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/images/cookbook.gif +0 -0
  1220. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/images/header.png +0 -0
  1221. data/test/stub/rails_apps/2.3/mycook/public/images/rails.png +0 -0
  1222. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/javascripts/application.js +0 -0
  1223. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/javascripts/controls.js +73 -73
  1224. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/javascripts/dragdrop.js +166 -165
  1225. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/javascripts/effects.js +174 -166
  1226. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/javascripts/prototype.js +362 -267
  1227. data/test/stub/rails_apps/2.3/mycook/public/robots.txt +5 -0
  1228. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/uploads.html +0 -0
  1229. data/test/stub/rails_apps/{mycook → 2.3/mycook}/public/welcome/cached.html +0 -0
  1230. data/test/stub/rails_apps/2.3/mycook/script/about +3 -0
  1231. data/test/stub/rails_apps/2.3/mycook/script/console +3 -0
  1232. data/test/stub/rails_apps/2.3/mycook/script/dbconsole +3 -0
  1233. data/test/stub/rails_apps/2.3/mycook/script/destroy +3 -0
  1234. data/test/stub/rails_apps/2.3/mycook/script/generate +3 -0
  1235. data/test/stub/rails_apps/2.3/mycook/script/performance/benchmarker +3 -0
  1236. data/test/stub/rails_apps/2.3/mycook/script/performance/profiler +3 -0
  1237. data/test/stub/rails_apps/2.3/mycook/script/performance/request +3 -0
  1238. data/test/stub/rails_apps/2.3/mycook/script/plugin +3 -0
  1239. data/test/stub/rails_apps/2.3/mycook/script/process/inspector +3 -0
  1240. data/test/stub/rails_apps/2.3/mycook/script/process/reaper +3 -0
  1241. data/test/stub/rails_apps/2.3/mycook/script/process/spawner +3 -0
  1242. data/test/stub/rails_apps/2.3/mycook/script/runner +3 -0
  1243. data/test/stub/rails_apps/2.3/mycook/script/server +3 -0
  1244. data/test/stub/rails_apps/{mycook → 2.3/mycook}/sites/some.site/public/uploads.html +0 -0
  1245. data/test/stub/rails_apps/{mycook → 2.3/mycook}/sites/some.site/public/welcome/cached.html +0 -0
  1246. data/test/stub/rails_apps/{mycook → 2.3/mycook}/tmp/cache/useless.txt +0 -0
  1247. data/test/stub/rails_apps/{mycook → 2.3/mycook}/tmp/pids/useless.txt +0 -0
  1248. data/test/stub/rails_apps/{mycook → 2.3/mycook}/tmp/sessions/useless.txt +0 -0
  1249. data/test/stub/rails_apps/{mycook → 2.3/mycook}/tmp/sockets/useless.txt +0 -0
  1250. data/test/stub/rails_apps/3.0/empty/Gemfile +22 -0
  1251. data/test/stub/rails_apps/3.0/empty/Rakefile +10 -0
  1252. data/test/stub/rails_apps/3.0/empty/app/controllers/application_controller.rb +4 -0
  1253. data/test/stub/rails_apps/3.0/empty/app/helpers/application_helper.rb +2 -0
  1254. data/test/stub/rails_apps/3.0/empty/app/views/layouts/application.html.erb +14 -0
  1255. data/test/stub/rails_apps/3.0/empty/config.ru +4 -0
  1256. data/test/stub/rails_apps/3.0/empty/config/application.rb +48 -0
  1257. data/test/stub/rails_apps/3.0/empty/config/boot.rb +13 -0
  1258. data/test/stub/rails_apps/3.0/empty/config/database.yml +22 -0
  1259. data/test/stub/rails_apps/3.0/empty/config/environment.rb +5 -0
  1260. data/test/stub/rails_apps/3.0/empty/config/environments/development.rb +19 -0
  1261. data/test/stub/rails_apps/3.0/empty/config/environments/production.rb +48 -0
  1262. data/test/stub/rails_apps/3.0/empty/config/environments/test.rb +32 -0
  1263. data/test/stub/rails_apps/3.0/empty/config/initializers/backtrace_silencers.rb +7 -0
  1264. data/test/stub/rails_apps/3.0/empty/config/initializers/inflections.rb +10 -0
  1265. data/test/stub/rails_apps/3.0/empty/config/initializers/mime_types.rb +5 -0
  1266. data/test/stub/rails_apps/3.0/empty/config/initializers/passenger.rb +1 -0
  1267. data/test/stub/rails_apps/3.0/empty/config/initializers/secret_token.rb +7 -0
  1268. data/test/stub/rails_apps/3.0/empty/config/initializers/session_store.rb +8 -0
  1269. data/test/stub/rails_apps/3.0/empty/config/locales/en.yml +5 -0
  1270. data/test/stub/rails_apps/3.0/empty/config/routes.rb +58 -0
  1271. data/test/stub/rails_apps/3.0/empty/db/seeds.rb +7 -0
  1272. data/test/stub/rails_apps/3.0/empty/doc/README_FOR_APP +2 -0
  1273. data/test/stub/rails_apps/3.0/empty/log/development.log +3 -0
  1274. data/test/stub/rails_apps/3.0/empty/public/404.html +26 -0
  1275. data/test/stub/rails_apps/3.0/empty/public/422.html +26 -0
  1276. data/test/stub/rails_apps/3.0/empty/public/500.html +26 -0
  1277. data/test/stub/rails_apps/3.0/empty/public/favicon.ico +0 -0
  1278. data/test/stub/rails_apps/3.0/empty/public/index.html +279 -0
  1279. data/test/stub/rails_apps/3.0/empty/public/robots.txt +5 -0
  1280. data/test/stub/rails_apps/3.0/empty/script/rails +9 -0
  1281. data/test/stub/rails_apps/3.0/empty/test/performance/browsing_test.rb +9 -0
  1282. data/test/stub/rails_apps/3.0/empty/test/test_helper.rb +13 -0
  1283. data/test/stub/spawn_server.rb +4 -2
  1284. data/test/stub/vendor_rails/minimal/actionpack/lib/action_controller.rb +3 -0
  1285. data/test/stub/vendor_rails/minimal/railties/lib/initializer.rb +7 -2
  1286. data/test/support/apache2_controller.rb +10 -2
  1287. data/test/support/nginx_controller.rb +3 -2
  1288. data/test/support/test_helper.rb +282 -46
  1289. data/test/{support → tut}/tut.h +6 -0
  1290. data/test/{support → tut}/tut_reporter.h +0 -0
  1291. metadata +824 -266
  1292. data/benchmark/ApplicationPool.cpp +0 -52
  1293. data/benchmark/accept_vs_socketpair_vs_named_pipes.rb +0 -126
  1294. data/benchmark/dispatcher.rb +0 -42
  1295. data/benchmark/overhead_of_password_checking.rb +0 -81
  1296. data/benchmark/socket_connections_vs_persistent_pipe.rb +0 -99
  1297. data/benchmark/unix_sockets_vs_pipes.rb +0 -83
  1298. data/ext/boost/LICENSE.TXT +0 -23
  1299. data/ext/boost/VERSION.TXT +0 -1
  1300. data/ext/boost/detail/sp_counted_base.hpp +0 -81
  1301. data/ext/boost/src/pthread/exceptions.cpp +0 -146
  1302. data/ext/boost/src/win32/exceptions.cpp +0 -124
  1303. data/ext/boost/src/win32/thread.cpp +0 -629
  1304. data/ext/boost/src/win32/timeconv.inl +0 -130
  1305. data/ext/boost/src/win32/tss_dll.cpp +0 -72
  1306. data/ext/boost/src/win32/tss_pe.cpp +0 -269
  1307. data/ext/boost/thread/pthread/thread.hpp +0 -339
  1308. data/ext/boost/thread/pthread/tss.hpp +0 -103
  1309. data/ext/common/Application.h +0 -511
  1310. data/ext/common/ApplicationPoolServer.h +0 -794
  1311. data/ext/common/ApplicationPoolServerExecutable.cpp +0 -743
  1312. data/ext/common/ApplicationPoolStatusReporter.h +0 -336
  1313. data/ext/common/DummySpawnManager.h +0 -108
  1314. data/ext/common/StandardApplicationPool.h +0 -821
  1315. data/ext/common/SystemTime.h +0 -88
  1316. data/lib/phusion_passenger/admin_tools/control_process.rb +0 -150
  1317. data/lib/phusion_passenger/railz/application_spawner.rb +0 -463
  1318. data/lib/phusion_passenger/templates/invalid_app_root.html.erb +0 -9
  1319. data/test/ApplicationPoolServerTest.cpp +0 -114
  1320. data/test/ApplicationPoolServer_ApplicationPoolTest.cpp +0 -33
  1321. data/test/ApplicationPoolTest.cpp +0 -599
  1322. data/test/MessageChannelTest.cpp +0 -320
  1323. data/test/SpawnManagerTest.cpp +0 -64
  1324. data/test/StandardApplicationPoolTest.cpp +0 -27
  1325. data/test/StaticStringTest.cpp +0 -51
  1326. data/test/UtilsTest.cpp +0 -257
  1327. data/test/ruby/rails/application_spawner_spec.rb +0 -159
  1328. data/test/ruby/rails/framework_spawner_spec.rb +0 -133
  1329. data/test/ruby/rails/minimal_spawner_spec.rb +0 -93
  1330. data/test/ruby/rails/spawner_error_handling_spec.rb +0 -107
  1331. data/test/ruby/rails/spawner_privilege_lowering_spec.rb +0 -97
  1332. data/test/ruby/spawn_server_spec.rb +0 -26
  1333. data/test/stub/MessageServer.dSYM/Contents/Info.plist +0 -25
  1334. data/test/stub/MessageServer.dSYM/Contents/Resources/DWARF/MessageServer +0 -0
  1335. data/test/support/Support.cpp +0 -84
  1336. data/test/support/Support.h +0 -118
  1337. data/test/support/config.rb +0 -38
  1338. data/test/support/run_rspec_tests.rb +0 -10
@@ -0,0 +1,1751 @@
1
+ #ifndef BOOST_BIND_BIND_HPP_INCLUDED
2
+ #define BOOST_BIND_BIND_HPP_INCLUDED
3
+
4
+ // MS compatible compilers support #pragma once
5
+
6
+ #if defined(_MSC_VER) && (_MSC_VER >= 1020)
7
+ # pragma once
8
+ #endif
9
+
10
+ //
11
+ // bind.hpp - binds function objects to arguments
12
+ //
13
+ // Copyright (c) 2001-2004 Peter Dimov and Multi Media Ltd.
14
+ // Copyright (c) 2001 David Abrahams
15
+ // Copyright (c) 2005 Peter Dimov
16
+ //
17
+ // Distributed under the Boost Software License, Version 1.0. (See
18
+ // accompanying file LICENSE_1_0.txt or copy at
19
+ // http://www.boost.org/LICENSE_1_0.txt)
20
+ //
21
+ // See http://www.boost.org/libs/bind/bind.html for documentation.
22
+ //
23
+
24
+ #include <boost/config.hpp>
25
+ #include <boost/ref.hpp>
26
+ #include <boost/mem_fn.hpp>
27
+ #include <boost/type.hpp>
28
+ #include <boost/is_placeholder.hpp>
29
+ #include <boost/bind/arg.hpp>
30
+ #include <boost/detail/workaround.hpp>
31
+ #include <boost/visit_each.hpp>
32
+
33
+ // Borland-specific bug, visit_each() silently fails to produce code
34
+
35
+ #if defined(__BORLANDC__)
36
+ # define BOOST_BIND_VISIT_EACH boost::visit_each
37
+ #else
38
+ # define BOOST_BIND_VISIT_EACH visit_each
39
+ #endif
40
+
41
+ #include <boost/bind/storage.hpp>
42
+
43
+ #ifdef BOOST_MSVC
44
+ # pragma warning(push)
45
+ # pragma warning(disable: 4512) // assignment operator could not be generated
46
+ #endif
47
+
48
+ namespace boost
49
+ {
50
+
51
+ template<class T> class weak_ptr;
52
+
53
+ namespace _bi // implementation details
54
+ {
55
+
56
+ // result_traits
57
+
58
+ template<class R, class F> struct result_traits
59
+ {
60
+ typedef R type;
61
+ };
62
+
63
+ #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
64
+
65
+ struct unspecified {};
66
+
67
+ template<class F> struct result_traits<unspecified, F>
68
+ {
69
+ typedef typename F::result_type type;
70
+ };
71
+
72
+ template<class F> struct result_traits< unspecified, reference_wrapper<F> >
73
+ {
74
+ typedef typename F::result_type type;
75
+ };
76
+
77
+ #endif
78
+
79
+ // ref_compare
80
+
81
+ template<class T> bool ref_compare( T const & a, T const & b, long )
82
+ {
83
+ return a == b;
84
+ }
85
+
86
+ template<int I> bool ref_compare( arg<I> const &, arg<I> const &, int )
87
+ {
88
+ return true;
89
+ }
90
+
91
+ template<int I> bool ref_compare( arg<I> (*) (), arg<I> (*) (), int )
92
+ {
93
+ return true;
94
+ }
95
+
96
+ template<class T> bool ref_compare( reference_wrapper<T> const & a, reference_wrapper<T> const & b, int )
97
+ {
98
+ return a.get_pointer() == b.get_pointer();
99
+ }
100
+
101
+ // bind_t forward declaration for listN
102
+
103
+ template<class R, class F, class L> class bind_t;
104
+
105
+ template<class R, class F, class L> bool ref_compare( bind_t<R, F, L> const & a, bind_t<R, F, L> const & b, int )
106
+ {
107
+ return a.compare( b );
108
+ }
109
+
110
+ // value
111
+
112
+ template<class T> class value
113
+ {
114
+ public:
115
+
116
+ value(T const & t): t_(t) {}
117
+
118
+ T & get() { return t_; }
119
+ T const & get() const { return t_; }
120
+
121
+ bool operator==(value const & rhs) const
122
+ {
123
+ return t_ == rhs.t_;
124
+ }
125
+
126
+ private:
127
+
128
+ T t_;
129
+ };
130
+
131
+ // ref_compare for weak_ptr
132
+
133
+ template<class T> bool ref_compare( value< weak_ptr<T> > const & a, value< weak_ptr<T> > const & b, int )
134
+ {
135
+ return !(a.get() < b.get()) && !(b.get() < a.get());
136
+ }
137
+
138
+ // type
139
+
140
+ template<class T> class type {};
141
+
142
+ // unwrap
143
+
144
+ template<class F> struct unwrapper
145
+ {
146
+ static inline F & unwrap( F & f, long )
147
+ {
148
+ return f;
149
+ }
150
+
151
+ template<class F2> static inline F2 & unwrap( reference_wrapper<F2> rf, int )
152
+ {
153
+ return rf.get();
154
+ }
155
+
156
+ template<class R, class T> static inline _mfi::dm<R, T> unwrap( R T::* pm, int )
157
+ {
158
+ return _mfi::dm<R, T>( pm );
159
+ }
160
+ };
161
+
162
+ // listN
163
+
164
+ class list0
165
+ {
166
+ public:
167
+
168
+ list0() {}
169
+
170
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
171
+
172
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
173
+
174
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
175
+
176
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
177
+
178
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
179
+
180
+ template<class R, class F, class A> R operator()(type<R>, F & f, A &, long)
181
+ {
182
+ return unwrapper<F>::unwrap(f, 0)();
183
+ }
184
+
185
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A &, long) const
186
+ {
187
+ return unwrapper<F const>::unwrap(f, 0)();
188
+ }
189
+
190
+ template<class F, class A> void operator()(type<void>, F & f, A &, int)
191
+ {
192
+ unwrapper<F>::unwrap(f, 0)();
193
+ }
194
+
195
+ template<class F, class A> void operator()(type<void>, F const & f, A &, int) const
196
+ {
197
+ unwrapper<F const>::unwrap(f, 0)();
198
+ }
199
+
200
+ template<class V> void accept(V &) const
201
+ {
202
+ }
203
+
204
+ bool operator==(list0 const &) const
205
+ {
206
+ return true;
207
+ }
208
+ };
209
+
210
+ #ifdef BOOST_MSVC
211
+ // MSVC is bright enough to realise that the parameter rhs
212
+ // in operator==may be unused for some template argument types:
213
+ #pragma warning(push)
214
+ #pragma warning(disable:4100)
215
+ #endif
216
+
217
+ template< class A1 > class list1: private storage1< A1 >
218
+ {
219
+ private:
220
+
221
+ typedef storage1< A1 > base_type;
222
+
223
+ public:
224
+
225
+ explicit list1( A1 a1 ): base_type( a1 ) {}
226
+
227
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
228
+
229
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
230
+
231
+ template<class T> T & operator[] ( _bi::value<T> & v ) const { return v.get(); }
232
+
233
+ template<class T> T const & operator[] ( _bi::value<T> const & v ) const { return v.get(); }
234
+
235
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
236
+
237
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
238
+
239
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
240
+
241
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
242
+ {
243
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_]);
244
+ }
245
+
246
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
247
+ {
248
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_]);
249
+ }
250
+
251
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
252
+ {
253
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_]);
254
+ }
255
+
256
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
257
+ {
258
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_]);
259
+ }
260
+
261
+ template<class V> void accept(V & v) const
262
+ {
263
+ base_type::accept(v);
264
+ }
265
+
266
+ bool operator==(list1 const & rhs) const
267
+ {
268
+ return ref_compare(base_type::a1_, rhs.a1_, 0);
269
+ }
270
+ };
271
+
272
+ struct logical_and;
273
+ struct logical_or;
274
+
275
+ template< class A1, class A2 > class list2: private storage2< A1, A2 >
276
+ {
277
+ private:
278
+
279
+ typedef storage2< A1, A2 > base_type;
280
+
281
+ public:
282
+
283
+ list2( A1 a1, A2 a2 ): base_type( a1, a2 ) {}
284
+
285
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
286
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
287
+
288
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
289
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
290
+
291
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
292
+
293
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
294
+
295
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
296
+
297
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
298
+
299
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
300
+
301
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
302
+ {
303
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
304
+ }
305
+
306
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
307
+ {
308
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
309
+ }
310
+
311
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
312
+ {
313
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
314
+ }
315
+
316
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
317
+ {
318
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_]);
319
+ }
320
+
321
+ template<class A> bool operator()( type<bool>, logical_and & /*f*/, A & a, int )
322
+ {
323
+ return a[ base_type::a1_ ] && a[ base_type::a2_ ];
324
+ }
325
+
326
+ template<class A> bool operator()( type<bool>, logical_and const & /*f*/, A & a, int ) const
327
+ {
328
+ return a[ base_type::a1_ ] && a[ base_type::a2_ ];
329
+ }
330
+
331
+ template<class A> bool operator()( type<bool>, logical_or & /*f*/, A & a, int )
332
+ {
333
+ return a[ base_type::a1_ ] || a[ base_type::a2_ ];
334
+ }
335
+
336
+ template<class A> bool operator()( type<bool>, logical_or const & /*f*/, A & a, int ) const
337
+ {
338
+ return a[ base_type::a1_ ] || a[ base_type::a2_ ];
339
+ }
340
+
341
+ template<class V> void accept(V & v) const
342
+ {
343
+ base_type::accept(v);
344
+ }
345
+
346
+ bool operator==(list2 const & rhs) const
347
+ {
348
+ return ref_compare(base_type::a1_, rhs.a1_, 0) && ref_compare(base_type::a2_, rhs.a2_, 0);
349
+ }
350
+ };
351
+
352
+ template< class A1, class A2, class A3 > class list3: private storage3< A1, A2, A3 >
353
+ {
354
+ private:
355
+
356
+ typedef storage3< A1, A2, A3 > base_type;
357
+
358
+ public:
359
+
360
+ list3( A1 a1, A2 a2, A3 a3 ): base_type( a1, a2, a3 ) {}
361
+
362
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
363
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
364
+ A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
365
+
366
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
367
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
368
+ A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
369
+
370
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
371
+
372
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
373
+
374
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
375
+
376
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
377
+
378
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
379
+
380
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
381
+ {
382
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);
383
+ }
384
+
385
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
386
+ {
387
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);
388
+ }
389
+
390
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
391
+ {
392
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);
393
+ }
394
+
395
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
396
+ {
397
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_]);
398
+ }
399
+
400
+ template<class V> void accept(V & v) const
401
+ {
402
+ base_type::accept(v);
403
+ }
404
+
405
+ bool operator==(list3 const & rhs) const
406
+ {
407
+ return
408
+
409
+ ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
410
+ ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
411
+ ref_compare( base_type::a3_, rhs.a3_, 0 );
412
+ }
413
+ };
414
+
415
+ template< class A1, class A2, class A3, class A4 > class list4: private storage4< A1, A2, A3, A4 >
416
+ {
417
+ private:
418
+
419
+ typedef storage4< A1, A2, A3, A4 > base_type;
420
+
421
+ public:
422
+
423
+ list4( A1 a1, A2 a2, A3 a3, A4 a4 ): base_type( a1, a2, a3, a4 ) {}
424
+
425
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
426
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
427
+ A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
428
+ A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
429
+
430
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
431
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
432
+ A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
433
+ A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
434
+
435
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
436
+
437
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
438
+
439
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
440
+
441
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
442
+
443
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
444
+
445
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
446
+ {
447
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);
448
+ }
449
+
450
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
451
+ {
452
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);
453
+ }
454
+
455
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
456
+ {
457
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);
458
+ }
459
+
460
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
461
+ {
462
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_]);
463
+ }
464
+
465
+ template<class V> void accept(V & v) const
466
+ {
467
+ base_type::accept(v);
468
+ }
469
+
470
+ bool operator==(list4 const & rhs) const
471
+ {
472
+ return
473
+
474
+ ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
475
+ ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
476
+ ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
477
+ ref_compare( base_type::a4_, rhs.a4_, 0 );
478
+ }
479
+ };
480
+
481
+ template< class A1, class A2, class A3, class A4, class A5 > class list5: private storage5< A1, A2, A3, A4, A5 >
482
+ {
483
+ private:
484
+
485
+ typedef storage5< A1, A2, A3, A4, A5 > base_type;
486
+
487
+ public:
488
+
489
+ list5( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5 ): base_type( a1, a2, a3, a4, a5 ) {}
490
+
491
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
492
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
493
+ A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
494
+ A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
495
+ A5 operator[] (boost::arg<5>) const { return base_type::a5_; }
496
+
497
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
498
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
499
+ A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
500
+ A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
501
+ A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }
502
+
503
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
504
+
505
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
506
+
507
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
508
+
509
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
510
+
511
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
512
+
513
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
514
+ {
515
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);
516
+ }
517
+
518
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
519
+ {
520
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);
521
+ }
522
+
523
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
524
+ {
525
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);
526
+ }
527
+
528
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
529
+ {
530
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_]);
531
+ }
532
+
533
+ template<class V> void accept(V & v) const
534
+ {
535
+ base_type::accept(v);
536
+ }
537
+
538
+ bool operator==(list5 const & rhs) const
539
+ {
540
+ return
541
+
542
+ ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
543
+ ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
544
+ ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
545
+ ref_compare( base_type::a4_, rhs.a4_, 0 ) &&
546
+ ref_compare( base_type::a5_, rhs.a5_, 0 );
547
+ }
548
+ };
549
+
550
+ template<class A1, class A2, class A3, class A4, class A5, class A6> class list6: private storage6< A1, A2, A3, A4, A5, A6 >
551
+ {
552
+ private:
553
+
554
+ typedef storage6< A1, A2, A3, A4, A5, A6 > base_type;
555
+
556
+ public:
557
+
558
+ list6( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6 ): base_type( a1, a2, a3, a4, a5, a6 ) {}
559
+
560
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
561
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
562
+ A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
563
+ A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
564
+ A5 operator[] (boost::arg<5>) const { return base_type::a5_; }
565
+ A6 operator[] (boost::arg<6>) const { return base_type::a6_; }
566
+
567
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
568
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
569
+ A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
570
+ A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
571
+ A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }
572
+ A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }
573
+
574
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
575
+
576
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
577
+
578
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
579
+
580
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
581
+
582
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
583
+
584
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
585
+ {
586
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);
587
+ }
588
+
589
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
590
+ {
591
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);
592
+ }
593
+
594
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
595
+ {
596
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);
597
+ }
598
+
599
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
600
+ {
601
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_]);
602
+ }
603
+
604
+ template<class V> void accept(V & v) const
605
+ {
606
+ base_type::accept(v);
607
+ }
608
+
609
+ bool operator==(list6 const & rhs) const
610
+ {
611
+ return
612
+
613
+ ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
614
+ ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
615
+ ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
616
+ ref_compare( base_type::a4_, rhs.a4_, 0 ) &&
617
+ ref_compare( base_type::a5_, rhs.a5_, 0 ) &&
618
+ ref_compare( base_type::a6_, rhs.a6_, 0 );
619
+ }
620
+ };
621
+
622
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> class list7: private storage7< A1, A2, A3, A4, A5, A6, A7 >
623
+ {
624
+ private:
625
+
626
+ typedef storage7< A1, A2, A3, A4, A5, A6, A7 > base_type;
627
+
628
+ public:
629
+
630
+ list7( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7 ): base_type( a1, a2, a3, a4, a5, a6, a7 ) {}
631
+
632
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
633
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
634
+ A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
635
+ A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
636
+ A5 operator[] (boost::arg<5>) const { return base_type::a5_; }
637
+ A6 operator[] (boost::arg<6>) const { return base_type::a6_; }
638
+ A7 operator[] (boost::arg<7>) const { return base_type::a7_; }
639
+
640
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
641
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
642
+ A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
643
+ A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
644
+ A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }
645
+ A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }
646
+ A7 operator[] (boost::arg<7> (*) ()) const { return base_type::a7_; }
647
+
648
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
649
+
650
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
651
+
652
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
653
+
654
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
655
+
656
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
657
+
658
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
659
+ {
660
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);
661
+ }
662
+
663
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
664
+ {
665
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);
666
+ }
667
+
668
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
669
+ {
670
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);
671
+ }
672
+
673
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
674
+ {
675
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_]);
676
+ }
677
+
678
+ template<class V> void accept(V & v) const
679
+ {
680
+ base_type::accept(v);
681
+ }
682
+
683
+ bool operator==(list7 const & rhs) const
684
+ {
685
+ return
686
+
687
+ ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
688
+ ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
689
+ ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
690
+ ref_compare( base_type::a4_, rhs.a4_, 0 ) &&
691
+ ref_compare( base_type::a5_, rhs.a5_, 0 ) &&
692
+ ref_compare( base_type::a6_, rhs.a6_, 0 ) &&
693
+ ref_compare( base_type::a7_, rhs.a7_, 0 );
694
+ }
695
+ };
696
+
697
+ template< class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8 > class list8: private storage8< A1, A2, A3, A4, A5, A6, A7, A8 >
698
+ {
699
+ private:
700
+
701
+ typedef storage8< A1, A2, A3, A4, A5, A6, A7, A8 > base_type;
702
+
703
+ public:
704
+
705
+ list8( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8 ): base_type( a1, a2, a3, a4, a5, a6, a7, a8 ) {}
706
+
707
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
708
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
709
+ A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
710
+ A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
711
+ A5 operator[] (boost::arg<5>) const { return base_type::a5_; }
712
+ A6 operator[] (boost::arg<6>) const { return base_type::a6_; }
713
+ A7 operator[] (boost::arg<7>) const { return base_type::a7_; }
714
+ A8 operator[] (boost::arg<8>) const { return base_type::a8_; }
715
+
716
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
717
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
718
+ A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
719
+ A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
720
+ A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }
721
+ A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }
722
+ A7 operator[] (boost::arg<7> (*) ()) const { return base_type::a7_; }
723
+ A8 operator[] (boost::arg<8> (*) ()) const { return base_type::a8_; }
724
+
725
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
726
+
727
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
728
+
729
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
730
+
731
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
732
+
733
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
734
+
735
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
736
+ {
737
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);
738
+ }
739
+
740
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
741
+ {
742
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);
743
+ }
744
+
745
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
746
+ {
747
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);
748
+ }
749
+
750
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
751
+ {
752
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_]);
753
+ }
754
+
755
+ template<class V> void accept(V & v) const
756
+ {
757
+ base_type::accept(v);
758
+ }
759
+
760
+ bool operator==(list8 const & rhs) const
761
+ {
762
+ return
763
+
764
+ ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
765
+ ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
766
+ ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
767
+ ref_compare( base_type::a4_, rhs.a4_, 0 ) &&
768
+ ref_compare( base_type::a5_, rhs.a5_, 0 ) &&
769
+ ref_compare( base_type::a6_, rhs.a6_, 0 ) &&
770
+ ref_compare( base_type::a7_, rhs.a7_, 0 ) &&
771
+ ref_compare( base_type::a8_, rhs.a8_, 0 );
772
+ }
773
+ };
774
+
775
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> class list9: private storage9< A1, A2, A3, A4, A5, A6, A7, A8, A9 >
776
+ {
777
+ private:
778
+
779
+ typedef storage9< A1, A2, A3, A4, A5, A6, A7, A8, A9 > base_type;
780
+
781
+ public:
782
+
783
+ list9( A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9 ): base_type( a1, a2, a3, a4, a5, a6, a7, a8, a9 ) {}
784
+
785
+ A1 operator[] (boost::arg<1>) const { return base_type::a1_; }
786
+ A2 operator[] (boost::arg<2>) const { return base_type::a2_; }
787
+ A3 operator[] (boost::arg<3>) const { return base_type::a3_; }
788
+ A4 operator[] (boost::arg<4>) const { return base_type::a4_; }
789
+ A5 operator[] (boost::arg<5>) const { return base_type::a5_; }
790
+ A6 operator[] (boost::arg<6>) const { return base_type::a6_; }
791
+ A7 operator[] (boost::arg<7>) const { return base_type::a7_; }
792
+ A8 operator[] (boost::arg<8>) const { return base_type::a8_; }
793
+ A9 operator[] (boost::arg<9>) const { return base_type::a9_; }
794
+
795
+ A1 operator[] (boost::arg<1> (*) ()) const { return base_type::a1_; }
796
+ A2 operator[] (boost::arg<2> (*) ()) const { return base_type::a2_; }
797
+ A3 operator[] (boost::arg<3> (*) ()) const { return base_type::a3_; }
798
+ A4 operator[] (boost::arg<4> (*) ()) const { return base_type::a4_; }
799
+ A5 operator[] (boost::arg<5> (*) ()) const { return base_type::a5_; }
800
+ A6 operator[] (boost::arg<6> (*) ()) const { return base_type::a6_; }
801
+ A7 operator[] (boost::arg<7> (*) ()) const { return base_type::a7_; }
802
+ A8 operator[] (boost::arg<8> (*) ()) const { return base_type::a8_; }
803
+ A9 operator[] (boost::arg<9> (*) ()) const { return base_type::a9_; }
804
+
805
+ template<class T> T & operator[] (_bi::value<T> & v) const { return v.get(); }
806
+
807
+ template<class T> T const & operator[] (_bi::value<T> const & v) const { return v.get(); }
808
+
809
+ template<class T> T & operator[] (reference_wrapper<T> const & v) const { return v.get(); }
810
+
811
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> & b) const { return b.eval(*this); }
812
+
813
+ template<class R, class F, class L> typename result_traits<R, F>::type operator[] (bind_t<R, F, L> const & b) const { return b.eval(*this); }
814
+
815
+ template<class R, class F, class A> R operator()(type<R>, F & f, A & a, long)
816
+ {
817
+ return unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);
818
+ }
819
+
820
+ template<class R, class F, class A> R operator()(type<R>, F const & f, A & a, long) const
821
+ {
822
+ return unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);
823
+ }
824
+
825
+ template<class F, class A> void operator()(type<void>, F & f, A & a, int)
826
+ {
827
+ unwrapper<F>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);
828
+ }
829
+
830
+ template<class F, class A> void operator()(type<void>, F const & f, A & a, int) const
831
+ {
832
+ unwrapper<F const>::unwrap(f, 0)(a[base_type::a1_], a[base_type::a2_], a[base_type::a3_], a[base_type::a4_], a[base_type::a5_], a[base_type::a6_], a[base_type::a7_], a[base_type::a8_], a[base_type::a9_]);
833
+ }
834
+
835
+ template<class V> void accept(V & v) const
836
+ {
837
+ base_type::accept(v);
838
+ }
839
+
840
+ bool operator==(list9 const & rhs) const
841
+ {
842
+ return
843
+
844
+ ref_compare( base_type::a1_, rhs.a1_, 0 ) &&
845
+ ref_compare( base_type::a2_, rhs.a2_, 0 ) &&
846
+ ref_compare( base_type::a3_, rhs.a3_, 0 ) &&
847
+ ref_compare( base_type::a4_, rhs.a4_, 0 ) &&
848
+ ref_compare( base_type::a5_, rhs.a5_, 0 ) &&
849
+ ref_compare( base_type::a6_, rhs.a6_, 0 ) &&
850
+ ref_compare( base_type::a7_, rhs.a7_, 0 ) &&
851
+ ref_compare( base_type::a8_, rhs.a8_, 0 ) &&
852
+ ref_compare( base_type::a9_, rhs.a9_, 0 );
853
+ }
854
+ };
855
+
856
+ #ifdef BOOST_MSVC
857
+ #pragma warning(pop)
858
+ #endif
859
+
860
+ // bind_t
861
+
862
+ #ifndef BOOST_NO_VOID_RETURNS
863
+
864
+ template<class R, class F, class L> class bind_t
865
+ {
866
+ public:
867
+
868
+ typedef bind_t this_type;
869
+
870
+ bind_t(F f, L const & l): f_(f), l_(l) {}
871
+
872
+ #define BOOST_BIND_RETURN return
873
+ #include <boost/bind/bind_template.hpp>
874
+ #undef BOOST_BIND_RETURN
875
+
876
+ };
877
+
878
+ #else
879
+
880
+ template<class R> struct bind_t_generator
881
+ {
882
+
883
+ template<class F, class L> class implementation
884
+ {
885
+ public:
886
+
887
+ typedef implementation this_type;
888
+
889
+ implementation(F f, L const & l): f_(f), l_(l) {}
890
+
891
+ #define BOOST_BIND_RETURN return
892
+ #include <boost/bind/bind_template.hpp>
893
+ #undef BOOST_BIND_RETURN
894
+
895
+ };
896
+
897
+ };
898
+
899
+ template<> struct bind_t_generator<void>
900
+ {
901
+
902
+ template<class F, class L> class implementation
903
+ {
904
+ private:
905
+
906
+ typedef void R;
907
+
908
+ public:
909
+
910
+ typedef implementation this_type;
911
+
912
+ implementation(F f, L const & l): f_(f), l_(l) {}
913
+
914
+ #define BOOST_BIND_RETURN
915
+ #include <boost/bind/bind_template.hpp>
916
+ #undef BOOST_BIND_RETURN
917
+
918
+ };
919
+
920
+ };
921
+
922
+ template<class R2, class F, class L> class bind_t: public bind_t_generator<R2>::BOOST_NESTED_TEMPLATE implementation<F, L>
923
+ {
924
+ public:
925
+
926
+ bind_t(F f, L const & l): bind_t_generator<R2>::BOOST_NESTED_TEMPLATE implementation<F, L>(f, l) {}
927
+
928
+ };
929
+
930
+ #endif
931
+
932
+ // function_equal
933
+
934
+ #ifndef BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
935
+
936
+ // put overloads in _bi, rely on ADL
937
+
938
+ # ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
939
+
940
+ template<class R, class F, class L> bool function_equal( bind_t<R, F, L> const & a, bind_t<R, F, L> const & b )
941
+ {
942
+ return a.compare(b);
943
+ }
944
+
945
+ # else
946
+
947
+ template<class R, class F, class L> bool function_equal_impl( bind_t<R, F, L> const & a, bind_t<R, F, L> const & b, int )
948
+ {
949
+ return a.compare(b);
950
+ }
951
+
952
+ # endif // #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
953
+
954
+ #else // BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
955
+
956
+ // put overloads in boost
957
+
958
+ } // namespace _bi
959
+
960
+ # ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
961
+
962
+ template<class R, class F, class L> bool function_equal( _bi::bind_t<R, F, L> const & a, _bi::bind_t<R, F, L> const & b )
963
+ {
964
+ return a.compare(b);
965
+ }
966
+
967
+ # else
968
+
969
+ template<class R, class F, class L> bool function_equal_impl( _bi::bind_t<R, F, L> const & a, _bi::bind_t<R, F, L> const & b, int )
970
+ {
971
+ return a.compare(b);
972
+ }
973
+
974
+ # endif // #ifndef BOOST_NO_FUNCTION_TEMPLATE_ORDERING
975
+
976
+ namespace _bi
977
+ {
978
+
979
+ #endif // BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP
980
+
981
+ // add_value
982
+
983
+ #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) || (__SUNPRO_CC >= 0x530)
984
+
985
+ #if defined( __BORLANDC__ ) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT(0x582) )
986
+
987
+ template<class T> struct add_value
988
+ {
989
+ typedef _bi::value<T> type;
990
+ };
991
+
992
+ #else
993
+
994
+ template< class T, int I > struct add_value_2
995
+ {
996
+ typedef boost::arg<I> type;
997
+ };
998
+
999
+ template< class T > struct add_value_2< T, 0 >
1000
+ {
1001
+ typedef _bi::value< T > type;
1002
+ };
1003
+
1004
+ template<class T> struct add_value
1005
+ {
1006
+ typedef typename add_value_2< T, boost::is_placeholder< T >::value >::type type;
1007
+ };
1008
+
1009
+ #endif
1010
+
1011
+ template<class T> struct add_value< value<T> >
1012
+ {
1013
+ typedef _bi::value<T> type;
1014
+ };
1015
+
1016
+ template<class T> struct add_value< reference_wrapper<T> >
1017
+ {
1018
+ typedef reference_wrapper<T> type;
1019
+ };
1020
+
1021
+ template<int I> struct add_value< arg<I> >
1022
+ {
1023
+ typedef boost::arg<I> type;
1024
+ };
1025
+
1026
+ template<int I> struct add_value< arg<I> (*) () >
1027
+ {
1028
+ typedef boost::arg<I> (*type) ();
1029
+ };
1030
+
1031
+ template<class R, class F, class L> struct add_value< bind_t<R, F, L> >
1032
+ {
1033
+ typedef bind_t<R, F, L> type;
1034
+ };
1035
+
1036
+ #else
1037
+
1038
+ template<int I> struct _avt_0;
1039
+
1040
+ template<> struct _avt_0<1>
1041
+ {
1042
+ template<class T> struct inner
1043
+ {
1044
+ typedef T type;
1045
+ };
1046
+ };
1047
+
1048
+ template<> struct _avt_0<2>
1049
+ {
1050
+ template<class T> struct inner
1051
+ {
1052
+ typedef value<T> type;
1053
+ };
1054
+ };
1055
+
1056
+ typedef char (&_avt_r1) [1];
1057
+ typedef char (&_avt_r2) [2];
1058
+
1059
+ template<class T> _avt_r1 _avt_f(value<T>);
1060
+ template<class T> _avt_r1 _avt_f(reference_wrapper<T>);
1061
+ template<int I> _avt_r1 _avt_f(arg<I>);
1062
+ template<int I> _avt_r1 _avt_f(arg<I> (*) ());
1063
+ template<class R, class F, class L> _avt_r1 _avt_f(bind_t<R, F, L>);
1064
+
1065
+ _avt_r2 _avt_f(...);
1066
+
1067
+ template<class T> struct add_value
1068
+ {
1069
+ static T t();
1070
+ typedef typename _avt_0<sizeof(_avt_f(t()))>::template inner<T>::type type;
1071
+ };
1072
+
1073
+ #endif
1074
+
1075
+ // list_av_N
1076
+
1077
+ template<class A1> struct list_av_1
1078
+ {
1079
+ typedef typename add_value<A1>::type B1;
1080
+ typedef list1<B1> type;
1081
+ };
1082
+
1083
+ template<class A1, class A2> struct list_av_2
1084
+ {
1085
+ typedef typename add_value<A1>::type B1;
1086
+ typedef typename add_value<A2>::type B2;
1087
+ typedef list2<B1, B2> type;
1088
+ };
1089
+
1090
+ template<class A1, class A2, class A3> struct list_av_3
1091
+ {
1092
+ typedef typename add_value<A1>::type B1;
1093
+ typedef typename add_value<A2>::type B2;
1094
+ typedef typename add_value<A3>::type B3;
1095
+ typedef list3<B1, B2, B3> type;
1096
+ };
1097
+
1098
+ template<class A1, class A2, class A3, class A4> struct list_av_4
1099
+ {
1100
+ typedef typename add_value<A1>::type B1;
1101
+ typedef typename add_value<A2>::type B2;
1102
+ typedef typename add_value<A3>::type B3;
1103
+ typedef typename add_value<A4>::type B4;
1104
+ typedef list4<B1, B2, B3, B4> type;
1105
+ };
1106
+
1107
+ template<class A1, class A2, class A3, class A4, class A5> struct list_av_5
1108
+ {
1109
+ typedef typename add_value<A1>::type B1;
1110
+ typedef typename add_value<A2>::type B2;
1111
+ typedef typename add_value<A3>::type B3;
1112
+ typedef typename add_value<A4>::type B4;
1113
+ typedef typename add_value<A5>::type B5;
1114
+ typedef list5<B1, B2, B3, B4, B5> type;
1115
+ };
1116
+
1117
+ template<class A1, class A2, class A3, class A4, class A5, class A6> struct list_av_6
1118
+ {
1119
+ typedef typename add_value<A1>::type B1;
1120
+ typedef typename add_value<A2>::type B2;
1121
+ typedef typename add_value<A3>::type B3;
1122
+ typedef typename add_value<A4>::type B4;
1123
+ typedef typename add_value<A5>::type B5;
1124
+ typedef typename add_value<A6>::type B6;
1125
+ typedef list6<B1, B2, B3, B4, B5, B6> type;
1126
+ };
1127
+
1128
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7> struct list_av_7
1129
+ {
1130
+ typedef typename add_value<A1>::type B1;
1131
+ typedef typename add_value<A2>::type B2;
1132
+ typedef typename add_value<A3>::type B3;
1133
+ typedef typename add_value<A4>::type B4;
1134
+ typedef typename add_value<A5>::type B5;
1135
+ typedef typename add_value<A6>::type B6;
1136
+ typedef typename add_value<A7>::type B7;
1137
+ typedef list7<B1, B2, B3, B4, B5, B6, B7> type;
1138
+ };
1139
+
1140
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8> struct list_av_8
1141
+ {
1142
+ typedef typename add_value<A1>::type B1;
1143
+ typedef typename add_value<A2>::type B2;
1144
+ typedef typename add_value<A3>::type B3;
1145
+ typedef typename add_value<A4>::type B4;
1146
+ typedef typename add_value<A5>::type B5;
1147
+ typedef typename add_value<A6>::type B6;
1148
+ typedef typename add_value<A7>::type B7;
1149
+ typedef typename add_value<A8>::type B8;
1150
+ typedef list8<B1, B2, B3, B4, B5, B6, B7, B8> type;
1151
+ };
1152
+
1153
+ template<class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9> struct list_av_9
1154
+ {
1155
+ typedef typename add_value<A1>::type B1;
1156
+ typedef typename add_value<A2>::type B2;
1157
+ typedef typename add_value<A3>::type B3;
1158
+ typedef typename add_value<A4>::type B4;
1159
+ typedef typename add_value<A5>::type B5;
1160
+ typedef typename add_value<A6>::type B6;
1161
+ typedef typename add_value<A7>::type B7;
1162
+ typedef typename add_value<A8>::type B8;
1163
+ typedef typename add_value<A9>::type B9;
1164
+ typedef list9<B1, B2, B3, B4, B5, B6, B7, B8, B9> type;
1165
+ };
1166
+
1167
+ // operator!
1168
+
1169
+ struct logical_not
1170
+ {
1171
+ template<class V> bool operator()(V const & v) const { return !v; }
1172
+ };
1173
+
1174
+ template<class R, class F, class L>
1175
+ bind_t< bool, logical_not, list1< bind_t<R, F, L> > >
1176
+ operator! (bind_t<R, F, L> const & f)
1177
+ {
1178
+ typedef list1< bind_t<R, F, L> > list_type;
1179
+ return bind_t<bool, logical_not, list_type> ( logical_not(), list_type(f) );
1180
+ }
1181
+
1182
+ // relational operators
1183
+
1184
+ #define BOOST_BIND_OPERATOR( op, name ) \
1185
+ \
1186
+ struct name \
1187
+ { \
1188
+ template<class V, class W> bool operator()(V const & v, W const & w) const { return v op w; } \
1189
+ }; \
1190
+ \
1191
+ template<class R, class F, class L, class A2> \
1192
+ bind_t< bool, name, list2< bind_t<R, F, L>, typename add_value<A2>::type > > \
1193
+ operator op (bind_t<R, F, L> const & f, A2 a2) \
1194
+ { \
1195
+ typedef typename add_value<A2>::type B2; \
1196
+ typedef list2< bind_t<R, F, L>, B2> list_type; \
1197
+ return bind_t<bool, name, list_type> ( name(), list_type(f, a2) ); \
1198
+ }
1199
+
1200
+ BOOST_BIND_OPERATOR( ==, equal )
1201
+ BOOST_BIND_OPERATOR( !=, not_equal )
1202
+
1203
+ BOOST_BIND_OPERATOR( <, less )
1204
+ BOOST_BIND_OPERATOR( <=, less_equal )
1205
+
1206
+ BOOST_BIND_OPERATOR( >, greater )
1207
+ BOOST_BIND_OPERATOR( >=, greater_equal )
1208
+
1209
+ BOOST_BIND_OPERATOR( &&, logical_and )
1210
+ BOOST_BIND_OPERATOR( ||, logical_or )
1211
+
1212
+ #undef BOOST_BIND_OPERATOR
1213
+
1214
+ #if defined(__GNUC__) && BOOST_WORKAROUND(__GNUC__, < 3)
1215
+
1216
+ // resolve ambiguity with rel_ops
1217
+
1218
+ #define BOOST_BIND_OPERATOR( op, name ) \
1219
+ \
1220
+ template<class R, class F, class L> \
1221
+ bind_t< bool, name, list2< bind_t<R, F, L>, bind_t<R, F, L> > > \
1222
+ operator op (bind_t<R, F, L> const & f, bind_t<R, F, L> const & g) \
1223
+ { \
1224
+ typedef list2< bind_t<R, F, L>, bind_t<R, F, L> > list_type; \
1225
+ return bind_t<bool, name, list_type> ( name(), list_type(f, g) ); \
1226
+ }
1227
+
1228
+ BOOST_BIND_OPERATOR( !=, not_equal )
1229
+ BOOST_BIND_OPERATOR( <=, less_equal )
1230
+ BOOST_BIND_OPERATOR( >, greater )
1231
+ BOOST_BIND_OPERATOR( >=, greater_equal )
1232
+
1233
+ #endif
1234
+
1235
+ // visit_each, ADL
1236
+
1237
+ #if !defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) && !defined( __BORLANDC__ ) \
1238
+ && !(defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ <= 3)
1239
+
1240
+ template<class V, class T> void visit_each( V & v, value<T> const & t, int )
1241
+ {
1242
+ using boost::visit_each;
1243
+ BOOST_BIND_VISIT_EACH( v, t.get(), 0 );
1244
+ }
1245
+
1246
+ template<class V, class R, class F, class L> void visit_each( V & v, bind_t<R, F, L> const & t, int )
1247
+ {
1248
+ t.accept( v );
1249
+ }
1250
+
1251
+ #endif
1252
+
1253
+ } // namespace _bi
1254
+
1255
+ // visit_each, no ADL
1256
+
1257
+ #if defined( BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP ) || defined( __BORLANDC__ ) \
1258
+ || (defined(__GNUC__) && __GNUC__ == 3 && __GNUC_MINOR__ <= 3)
1259
+
1260
+ template<class V, class T> void visit_each( V & v, _bi::value<T> const & t, int )
1261
+ {
1262
+ BOOST_BIND_VISIT_EACH( v, t.get(), 0 );
1263
+ }
1264
+
1265
+ template<class V, class R, class F, class L> void visit_each( V & v, _bi::bind_t<R, F, L> const & t, int )
1266
+ {
1267
+ t.accept( v );
1268
+ }
1269
+
1270
+ #endif
1271
+
1272
+ // is_bind_expression
1273
+
1274
+ template< class T > struct is_bind_expression
1275
+ {
1276
+ enum _vt { value = 0 };
1277
+ };
1278
+
1279
+ #if !defined( BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION )
1280
+
1281
+ template< class R, class F, class L > struct is_bind_expression< _bi::bind_t< R, F, L > >
1282
+ {
1283
+ enum _vt { value = 1 };
1284
+ };
1285
+
1286
+ #endif
1287
+
1288
+ // bind
1289
+
1290
+ #ifndef BOOST_BIND
1291
+ #define BOOST_BIND bind
1292
+ #endif
1293
+
1294
+ // generic function objects
1295
+
1296
+ template<class R, class F>
1297
+ _bi::bind_t<R, F, _bi::list0>
1298
+ BOOST_BIND(F f)
1299
+ {
1300
+ typedef _bi::list0 list_type;
1301
+ return _bi::bind_t<R, F, list_type> (f, list_type());
1302
+ }
1303
+
1304
+ template<class R, class F, class A1>
1305
+ _bi::bind_t<R, F, typename _bi::list_av_1<A1>::type>
1306
+ BOOST_BIND(F f, A1 a1)
1307
+ {
1308
+ typedef typename _bi::list_av_1<A1>::type list_type;
1309
+ return _bi::bind_t<R, F, list_type> (f, list_type(a1));
1310
+ }
1311
+
1312
+ template<class R, class F, class A1, class A2>
1313
+ _bi::bind_t<R, F, typename _bi::list_av_2<A1, A2>::type>
1314
+ BOOST_BIND(F f, A1 a1, A2 a2)
1315
+ {
1316
+ typedef typename _bi::list_av_2<A1, A2>::type list_type;
1317
+ return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2));
1318
+ }
1319
+
1320
+ template<class R, class F, class A1, class A2, class A3>
1321
+ _bi::bind_t<R, F, typename _bi::list_av_3<A1, A2, A3>::type>
1322
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3)
1323
+ {
1324
+ typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
1325
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3));
1326
+ }
1327
+
1328
+ template<class R, class F, class A1, class A2, class A3, class A4>
1329
+ _bi::bind_t<R, F, typename _bi::list_av_4<A1, A2, A3, A4>::type>
1330
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4)
1331
+ {
1332
+ typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
1333
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4));
1334
+ }
1335
+
1336
+ template<class R, class F, class A1, class A2, class A3, class A4, class A5>
1337
+ _bi::bind_t<R, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
1338
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
1339
+ {
1340
+ typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
1341
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5));
1342
+ }
1343
+
1344
+ template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6>
1345
+ _bi::bind_t<R, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
1346
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
1347
+ {
1348
+ typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
1349
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));
1350
+ }
1351
+
1352
+ template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
1353
+ _bi::bind_t<R, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
1354
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
1355
+ {
1356
+ typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
1357
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));
1358
+ }
1359
+
1360
+ template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
1361
+ _bi::bind_t<R, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
1362
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
1363
+ {
1364
+ typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
1365
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));
1366
+ }
1367
+
1368
+ template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
1369
+ _bi::bind_t<R, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
1370
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
1371
+ {
1372
+ typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
1373
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
1374
+ }
1375
+
1376
+ // generic function objects, alternative syntax
1377
+
1378
+ template<class R, class F>
1379
+ _bi::bind_t<R, F, _bi::list0>
1380
+ BOOST_BIND(boost::type<R>, F f)
1381
+ {
1382
+ typedef _bi::list0 list_type;
1383
+ return _bi::bind_t<R, F, list_type> (f, list_type());
1384
+ }
1385
+
1386
+ template<class R, class F, class A1>
1387
+ _bi::bind_t<R, F, typename _bi::list_av_1<A1>::type>
1388
+ BOOST_BIND(boost::type<R>, F f, A1 a1)
1389
+ {
1390
+ typedef typename _bi::list_av_1<A1>::type list_type;
1391
+ return _bi::bind_t<R, F, list_type> (f, list_type(a1));
1392
+ }
1393
+
1394
+ template<class R, class F, class A1, class A2>
1395
+ _bi::bind_t<R, F, typename _bi::list_av_2<A1, A2>::type>
1396
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2)
1397
+ {
1398
+ typedef typename _bi::list_av_2<A1, A2>::type list_type;
1399
+ return _bi::bind_t<R, F, list_type> (f, list_type(a1, a2));
1400
+ }
1401
+
1402
+ template<class R, class F, class A1, class A2, class A3>
1403
+ _bi::bind_t<R, F, typename _bi::list_av_3<A1, A2, A3>::type>
1404
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3)
1405
+ {
1406
+ typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
1407
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3));
1408
+ }
1409
+
1410
+ template<class R, class F, class A1, class A2, class A3, class A4>
1411
+ _bi::bind_t<R, F, typename _bi::list_av_4<A1, A2, A3, A4>::type>
1412
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4)
1413
+ {
1414
+ typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
1415
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4));
1416
+ }
1417
+
1418
+ template<class R, class F, class A1, class A2, class A3, class A4, class A5>
1419
+ _bi::bind_t<R, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
1420
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
1421
+ {
1422
+ typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
1423
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5));
1424
+ }
1425
+
1426
+ template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6>
1427
+ _bi::bind_t<R, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
1428
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
1429
+ {
1430
+ typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
1431
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));
1432
+ }
1433
+
1434
+ template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
1435
+ _bi::bind_t<R, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
1436
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
1437
+ {
1438
+ typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
1439
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));
1440
+ }
1441
+
1442
+ template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
1443
+ _bi::bind_t<R, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
1444
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
1445
+ {
1446
+ typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
1447
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));
1448
+ }
1449
+
1450
+ template<class R, class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
1451
+ _bi::bind_t<R, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
1452
+ BOOST_BIND(boost::type<R>, F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
1453
+ {
1454
+ typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
1455
+ return _bi::bind_t<R, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
1456
+ }
1457
+
1458
+ #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
1459
+
1460
+ // adaptable function objects
1461
+
1462
+ template<class F>
1463
+ _bi::bind_t<_bi::unspecified, F, _bi::list0>
1464
+ BOOST_BIND(F f)
1465
+ {
1466
+ typedef _bi::list0 list_type;
1467
+ return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type());
1468
+ }
1469
+
1470
+ template<class F, class A1>
1471
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_1<A1>::type>
1472
+ BOOST_BIND(F f, A1 a1)
1473
+ {
1474
+ typedef typename _bi::list_av_1<A1>::type list_type;
1475
+ return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type(a1));
1476
+ }
1477
+
1478
+ template<class F, class A1, class A2>
1479
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_2<A1, A2>::type>
1480
+ BOOST_BIND(F f, A1 a1, A2 a2)
1481
+ {
1482
+ typedef typename _bi::list_av_2<A1, A2>::type list_type;
1483
+ return _bi::bind_t<_bi::unspecified, F, list_type> (f, list_type(a1, a2));
1484
+ }
1485
+
1486
+ template<class F, class A1, class A2, class A3>
1487
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_3<A1, A2, A3>::type>
1488
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3)
1489
+ {
1490
+ typedef typename _bi::list_av_3<A1, A2, A3>::type list_type;
1491
+ return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3));
1492
+ }
1493
+
1494
+ template<class F, class A1, class A2, class A3, class A4>
1495
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_4<A1, A2, A3, A4>::type>
1496
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4)
1497
+ {
1498
+ typedef typename _bi::list_av_4<A1, A2, A3, A4>::type list_type;
1499
+ return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4));
1500
+ }
1501
+
1502
+ template<class F, class A1, class A2, class A3, class A4, class A5>
1503
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_5<A1, A2, A3, A4, A5>::type>
1504
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5)
1505
+ {
1506
+ typedef typename _bi::list_av_5<A1, A2, A3, A4, A5>::type list_type;
1507
+ return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5));
1508
+ }
1509
+
1510
+ template<class F, class A1, class A2, class A3, class A4, class A5, class A6>
1511
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type>
1512
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6)
1513
+ {
1514
+ typedef typename _bi::list_av_6<A1, A2, A3, A4, A5, A6>::type list_type;
1515
+ return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6));
1516
+ }
1517
+
1518
+ template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7>
1519
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type>
1520
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7)
1521
+ {
1522
+ typedef typename _bi::list_av_7<A1, A2, A3, A4, A5, A6, A7>::type list_type;
1523
+ return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7));
1524
+ }
1525
+
1526
+ template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8>
1527
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type>
1528
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8)
1529
+ {
1530
+ typedef typename _bi::list_av_8<A1, A2, A3, A4, A5, A6, A7, A8>::type list_type;
1531
+ return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8));
1532
+ }
1533
+
1534
+ template<class F, class A1, class A2, class A3, class A4, class A5, class A6, class A7, class A8, class A9>
1535
+ _bi::bind_t<_bi::unspecified, F, typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type>
1536
+ BOOST_BIND(F f, A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7, A8 a8, A9 a9)
1537
+ {
1538
+ typedef typename _bi::list_av_9<A1, A2, A3, A4, A5, A6, A7, A8, A9>::type list_type;
1539
+ return _bi::bind_t<_bi::unspecified, F, list_type>(f, list_type(a1, a2, a3, a4, a5, a6, a7, a8, a9));
1540
+ }
1541
+
1542
+ #endif // !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) && !defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING)
1543
+
1544
+ // function pointers
1545
+
1546
+ #define BOOST_BIND_CC
1547
+ #define BOOST_BIND_ST
1548
+
1549
+ #include <boost/bind/bind_cc.hpp>
1550
+
1551
+ #undef BOOST_BIND_CC
1552
+ #undef BOOST_BIND_ST
1553
+
1554
+ #ifdef BOOST_BIND_ENABLE_STDCALL
1555
+
1556
+ #define BOOST_BIND_CC __stdcall
1557
+ #define BOOST_BIND_ST
1558
+
1559
+ #include <boost/bind/bind_cc.hpp>
1560
+
1561
+ #undef BOOST_BIND_CC
1562
+ #undef BOOST_BIND_ST
1563
+
1564
+ #endif
1565
+
1566
+ #ifdef BOOST_BIND_ENABLE_FASTCALL
1567
+
1568
+ #define BOOST_BIND_CC __fastcall
1569
+ #define BOOST_BIND_ST
1570
+
1571
+ #include <boost/bind/bind_cc.hpp>
1572
+
1573
+ #undef BOOST_BIND_CC
1574
+ #undef BOOST_BIND_ST
1575
+
1576
+ #endif
1577
+
1578
+ #ifdef BOOST_BIND_ENABLE_PASCAL
1579
+
1580
+ #define BOOST_BIND_ST pascal
1581
+ #define BOOST_BIND_CC
1582
+
1583
+ #include <boost/bind/bind_cc.hpp>
1584
+
1585
+ #undef BOOST_BIND_ST
1586
+ #undef BOOST_BIND_CC
1587
+
1588
+ #endif
1589
+
1590
+ // member function pointers
1591
+
1592
+ #define BOOST_BIND_MF_NAME(X) X
1593
+ #define BOOST_BIND_MF_CC
1594
+
1595
+ #include <boost/bind/bind_mf_cc.hpp>
1596
+ #include <boost/bind/bind_mf2_cc.hpp>
1597
+
1598
+ #undef BOOST_BIND_MF_NAME
1599
+ #undef BOOST_BIND_MF_CC
1600
+
1601
+ #ifdef BOOST_MEM_FN_ENABLE_CDECL
1602
+
1603
+ #define BOOST_BIND_MF_NAME(X) X##_cdecl
1604
+ #define BOOST_BIND_MF_CC __cdecl
1605
+
1606
+ #include <boost/bind/bind_mf_cc.hpp>
1607
+ #include <boost/bind/bind_mf2_cc.hpp>
1608
+
1609
+ #undef BOOST_BIND_MF_NAME
1610
+ #undef BOOST_BIND_MF_CC
1611
+
1612
+ #endif
1613
+
1614
+ #ifdef BOOST_MEM_FN_ENABLE_STDCALL
1615
+
1616
+ #define BOOST_BIND_MF_NAME(X) X##_stdcall
1617
+ #define BOOST_BIND_MF_CC __stdcall
1618
+
1619
+ #include <boost/bind/bind_mf_cc.hpp>
1620
+ #include <boost/bind/bind_mf2_cc.hpp>
1621
+
1622
+ #undef BOOST_BIND_MF_NAME
1623
+ #undef BOOST_BIND_MF_CC
1624
+
1625
+ #endif
1626
+
1627
+ #ifdef BOOST_MEM_FN_ENABLE_FASTCALL
1628
+
1629
+ #define BOOST_BIND_MF_NAME(X) X##_fastcall
1630
+ #define BOOST_BIND_MF_CC __fastcall
1631
+
1632
+ #include <boost/bind/bind_mf_cc.hpp>
1633
+ #include <boost/bind/bind_mf2_cc.hpp>
1634
+
1635
+ #undef BOOST_BIND_MF_NAME
1636
+ #undef BOOST_BIND_MF_CC
1637
+
1638
+ #endif
1639
+
1640
+ // data member pointers
1641
+
1642
+ #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) || defined(BOOST_NO_FUNCTION_TEMPLATE_ORDERING) \
1643
+ || ( defined(__BORLANDC__) && BOOST_WORKAROUND( __BORLANDC__, BOOST_TESTED_AT( 0x620 ) ) )
1644
+
1645
+ template<class R, class T, class A1>
1646
+ _bi::bind_t< R, _mfi::dm<R, T>, typename _bi::list_av_1<A1>::type >
1647
+ BOOST_BIND(R T::*f, A1 a1)
1648
+ {
1649
+ typedef _mfi::dm<R, T> F;
1650
+ typedef typename _bi::list_av_1<A1>::type list_type;
1651
+ return _bi::bind_t<R, F, list_type>( F(f), list_type(a1) );
1652
+ }
1653
+
1654
+ #else
1655
+
1656
+ namespace _bi
1657
+ {
1658
+
1659
+ template< class Pm, int I > struct add_cref;
1660
+
1661
+ template< class M, class T > struct add_cref< M T::*, 0 >
1662
+ {
1663
+ typedef M type;
1664
+ };
1665
+
1666
+ template< class M, class T > struct add_cref< M T::*, 1 >
1667
+ {
1668
+ #ifdef BOOST_MSVC
1669
+ #pragma warning(push)
1670
+ #pragma warning(disable:4180)
1671
+ #endif
1672
+ typedef M const & type;
1673
+ #ifdef BOOST_MSVC
1674
+ #pragma warning(pop)
1675
+ #endif
1676
+ };
1677
+
1678
+ template< class R, class T > struct add_cref< R (T::*) (), 1 >
1679
+ {
1680
+ typedef void type;
1681
+ };
1682
+
1683
+ #if !( defined(__IBMCPP__) && BOOST_WORKAROUND( __IBMCPP__, BOOST_TESTED_AT(600) ) )
1684
+
1685
+ template< class R, class T > struct add_cref< R (T::*) () const, 1 >
1686
+ {
1687
+ typedef void type;
1688
+ };
1689
+
1690
+ #endif // __IBMCPP__
1691
+
1692
+ template<class R> struct isref
1693
+ {
1694
+ enum value_type { value = 0 };
1695
+ };
1696
+
1697
+ template<class R> struct isref< R& >
1698
+ {
1699
+ enum value_type { value = 1 };
1700
+ };
1701
+
1702
+ template<class R> struct isref< R* >
1703
+ {
1704
+ enum value_type { value = 1 };
1705
+ };
1706
+
1707
+ template<class Pm, class A1> struct dm_result
1708
+ {
1709
+ typedef typename add_cref< Pm, 1 >::type type;
1710
+ };
1711
+
1712
+ template<class Pm, class R, class F, class L> struct dm_result< Pm, bind_t<R, F, L> >
1713
+ {
1714
+ typedef typename bind_t<R, F, L>::result_type result_type;
1715
+ typedef typename add_cref< Pm, isref< result_type >::value >::type type;
1716
+ };
1717
+
1718
+ } // namespace _bi
1719
+
1720
+ template< class A1, class M, class T >
1721
+
1722
+ _bi::bind_t<
1723
+ typename _bi::dm_result< M T::*, A1 >::type,
1724
+ _mfi::dm<M, T>,
1725
+ typename _bi::list_av_1<A1>::type
1726
+ >
1727
+
1728
+ BOOST_BIND( M T::*f, A1 a1 )
1729
+ {
1730
+ typedef typename _bi::dm_result< M T::*, A1 >::type result_type;
1731
+ typedef _mfi::dm<M, T> F;
1732
+ typedef typename _bi::list_av_1<A1>::type list_type;
1733
+ return _bi::bind_t< result_type, F, list_type >( F( f ), list_type( a1 ) );
1734
+ }
1735
+
1736
+ #endif
1737
+
1738
+ } // namespace boost
1739
+
1740
+ #ifndef BOOST_BIND_NO_PLACEHOLDERS
1741
+
1742
+ # include <boost/bind/placeholders.hpp>
1743
+
1744
+ #endif
1745
+
1746
+ #ifdef BOOST_MSVC
1747
+ # pragma warning(default: 4512) // assignment operator could not be generated
1748
+ # pragma warning(pop)
1749
+ #endif
1750
+
1751
+ #endif // #ifndef BOOST_BIND_BIND_HPP_INCLUDED