rufus-lua-win 5.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (459) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +69 -0
  6. data/Rakefile +1 -0
  7. data/lib/rufus/lua/win.rb +18 -0
  8. data/lib/rufus/lua/win/version.rb +7 -0
  9. data/rufus-lua-win.gemspec +23 -0
  10. data/vendor/lua/bin/liblua.dll +0 -0
  11. data/vendor/lua/lib/lua/LuaXml.lua +119 -0
  12. data/vendor/lua/lib/lua/alien.lua +250 -0
  13. data/vendor/lua/lib/lua/alien/core.dll +0 -0
  14. data/vendor/lua/lib/lua/alien/struct.dll +0 -0
  15. data/vendor/lua/lib/lua/base.lua +536 -0
  16. data/vendor/lua/lib/lua/bin.lua +20 -0
  17. data/vendor/lua/lib/lua/bit.dll +0 -0
  18. data/vendor/lua/lib/lua/cdlua.dll +0 -0
  19. data/vendor/lua/lib/lua/cdluacontextplus.dll +0 -0
  20. data/vendor/lua/lib/lua/cdluagl.dll +0 -0
  21. data/vendor/lua/lib/lua/cdluaim.dll +0 -0
  22. data/vendor/lua/lib/lua/cdluapdf.dll +0 -0
  23. data/vendor/lua/lib/lua/copas.lua +543 -0
  24. data/vendor/lua/lib/lua/coxpcall.lua +57 -0
  25. data/vendor/lua/lib/lua/date.lua +745 -0
  26. data/vendor/lua/lib/lua/debug_ext.lua +84 -0
  27. data/vendor/lua/lib/lua/debug_init.lua +2 -0
  28. data/vendor/lua/lib/lua/des56.dll +0 -0
  29. data/vendor/lua/lib/lua/dist/config.lua +109 -0
  30. data/vendor/lua/lib/lua/dist/constraints.lua +271 -0
  31. data/vendor/lua/lib/lua/dist/depends.lua +601 -0
  32. data/vendor/lua/lib/lua/dist/git.lua +307 -0
  33. data/vendor/lua/lib/lua/dist/init.lua +278 -0
  34. data/vendor/lua/lib/lua/dist/manifest.lua +225 -0
  35. data/vendor/lua/lib/lua/dist/package.lua +583 -0
  36. data/vendor/lua/lib/lua/dist/sys.lua +367 -0
  37. data/vendor/lua/lib/lua/dist/utils.lua +130 -0
  38. data/vendor/lua/lib/lua/ex.dll +0 -0
  39. data/vendor/lua/lib/lua/fstable.lua +116 -0
  40. data/vendor/lua/lib/lua/getopt.lua +273 -0
  41. data/vendor/lua/lib/lua/git.lua +5 -0
  42. data/vendor/lua/lib/lua/git/core.dll +0 -0
  43. data/vendor/lua/lib/lua/git/objects.lua +121 -0
  44. data/vendor/lua/lib/lua/git/pack.lua +316 -0
  45. data/vendor/lua/lib/lua/git/protocol.lua +188 -0
  46. data/vendor/lua/lib/lua/git/repo.lua +283 -0
  47. data/vendor/lua/lib/lua/git/util.lua +233 -0
  48. data/vendor/lua/lib/lua/gzio.dll +0 -0
  49. data/vendor/lua/lib/lua/gzip.lua +81 -0
  50. data/vendor/lua/lib/lua/iconv.dll +0 -0
  51. data/vendor/lua/lib/lua/imlua.dll +0 -0
  52. data/vendor/lua/lib/lua/imlua_fftw.dll +0 -0
  53. data/vendor/lua/lib/lua/imlua_jp2.dll +0 -0
  54. data/vendor/lua/lib/lua/imlua_process.dll +0 -0
  55. data/vendor/lua/lib/lua/imlua_process_omp.dll +0 -0
  56. data/vendor/lua/lib/lua/io_ext.lua +115 -0
  57. data/vendor/lua/lib/lua/iuplua.dll +0 -0
  58. data/vendor/lua/lib/lua/iuplua_mglplot.dll +0 -0
  59. data/vendor/lua/lib/lua/iuplua_pplot.dll +0 -0
  60. data/vendor/lua/lib/lua/iupluacd.dll +0 -0
  61. data/vendor/lua/lib/lua/iupluacontrols.dll +0 -0
  62. data/vendor/lua/lib/lua/iupluagl.dll +0 -0
  63. data/vendor/lua/lib/lua/iupluaim.dll +0 -0
  64. data/vendor/lua/lib/lua/iupluaimglib.dll +0 -0
  65. data/vendor/lua/lib/lua/iupluatuio.dll +0 -0
  66. data/vendor/lua/lib/lua/lanes-keeper.lua +302 -0
  67. data/vendor/lua/lib/lua/lanes.lua +591 -0
  68. data/vendor/lua/lib/lua/lanes/core.dll +0 -0
  69. data/vendor/lua/lib/lua/lcs.lua +55 -0
  70. data/vendor/lua/lib/lua/lemock.lua +659 -0
  71. data/vendor/lua/lib/lua/lfs.dll +0 -0
  72. data/vendor/lua/lib/lua/list.lua +375 -0
  73. data/vendor/lua/lib/lua/logging.lua +189 -0
  74. data/vendor/lua/lib/lua/logging/console.lua +22 -0
  75. data/vendor/lua/lib/lua/logging/email.lua +44 -0
  76. data/vendor/lua/lib/lua/logging/file.lua +55 -0
  77. data/vendor/lua/lib/lua/logging/rolling_file.lua +81 -0
  78. data/vendor/lua/lib/lua/logging/socket.lua +35 -0
  79. data/vendor/lua/lib/lua/logging/sql.lua +64 -0
  80. data/vendor/lua/lib/lua/loop/base.lua +68 -0
  81. data/vendor/lua/lib/lua/loop/cached.lua +312 -0
  82. data/vendor/lua/lib/lua/loop/collection/MapWithArrayOfKeys.lua +64 -0
  83. data/vendor/lua/lib/lua/loop/collection/ObjectCache.lua +39 -0
  84. data/vendor/lua/lib/lua/loop/collection/OrderedSet.lua +164 -0
  85. data/vendor/lua/lib/lua/loop/collection/PriorityQueue.lua +86 -0
  86. data/vendor/lua/lib/lua/loop/collection/UnorderedArray.lua +32 -0
  87. data/vendor/lua/lib/lua/loop/collection/UnorderedArraySet.lua +56 -0
  88. data/vendor/lua/lib/lua/loop/compiler/Arguments.lua +108 -0
  89. data/vendor/lua/lib/lua/loop/compiler/Conditional.lua +50 -0
  90. data/vendor/lua/lib/lua/loop/compiler/Expression.lua +215 -0
  91. data/vendor/lua/lib/lua/loop/component/base.lua +221 -0
  92. data/vendor/lua/lib/lua/loop/component/contained.lua +71 -0
  93. data/vendor/lua/lib/lua/loop/component/dynamic.lua +223 -0
  94. data/vendor/lua/lib/lua/loop/component/intercepted.lua +354 -0
  95. data/vendor/lua/lib/lua/loop/component/wrapped.lua +195 -0
  96. data/vendor/lua/lib/lua/loop/debug/Inspector.lua +521 -0
  97. data/vendor/lua/lib/lua/loop/debug/Matcher.lua +192 -0
  98. data/vendor/lua/lib/lua/loop/debug/Verbose.lua +266 -0
  99. data/vendor/lua/lib/lua/loop/debug/Viewer.lua +200 -0
  100. data/vendor/lua/lib/lua/loop/multiple.lua +105 -0
  101. data/vendor/lua/lib/lua/loop/object/Exception.lua +57 -0
  102. data/vendor/lua/lib/lua/loop/object/Publisher.lua +43 -0
  103. data/vendor/lua/lib/lua/loop/object/Wrapper.lua +39 -0
  104. data/vendor/lua/lib/lua/loop/scoped.lua +585 -0
  105. data/vendor/lua/lib/lua/loop/serial/FileStream.lua +48 -0
  106. data/vendor/lua/lib/lua/loop/serial/Serializer.lua +291 -0
  107. data/vendor/lua/lib/lua/loop/serial/SocketStream.lua +51 -0
  108. data/vendor/lua/lib/lua/loop/serial/StringStream.lua +47 -0
  109. data/vendor/lua/lib/lua/loop/simple.lua +75 -0
  110. data/vendor/lua/lib/lua/loop/table.lua +71 -0
  111. data/vendor/lua/lib/lua/loop/thread/CoSocket.lua +416 -0
  112. data/vendor/lua/lib/lua/loop/thread/IOScheduler.lua +170 -0
  113. data/vendor/lua/lib/lua/loop/thread/Scheduler.lua +327 -0
  114. data/vendor/lua/lib/lua/loop/thread/SocketScheduler.lua +88 -0
  115. data/vendor/lua/lib/lua/loop/thread/Timer.lua +54 -0
  116. data/vendor/lua/lib/lua/lpeg.dll +0 -0
  117. data/vendor/lua/lib/lua/ltn12.lua +292 -0
  118. data/vendor/lua/lib/lua/luaXML_lib.dll +0 -0
  119. data/vendor/lua/lib/lua/luacurl.dll +0 -0
  120. data/vendor/lua/lib/lua/luadoc/config.lua +34 -0
  121. data/vendor/lua/lib/lua/luadoc/doclet/debug.lua +46 -0
  122. data/vendor/lua/lib/lua/luadoc/doclet/formatter.lua +84 -0
  123. data/vendor/lua/lib/lua/luadoc/doclet/html.lua +289 -0
  124. data/vendor/lua/lib/lua/luadoc/doclet/html/file.lp +113 -0
  125. data/vendor/lua/lib/lua/luadoc/doclet/html/function.lp +64 -0
  126. data/vendor/lua/lib/lua/luadoc/doclet/html/index.lp +70 -0
  127. data/vendor/lua/lib/lua/luadoc/doclet/html/luadoc.css +286 -0
  128. data/vendor/lua/lib/lua/luadoc/doclet/html/menu.lp +55 -0
  129. data/vendor/lua/lib/lua/luadoc/doclet/html/module.lp +109 -0
  130. data/vendor/lua/lib/lua/luadoc/doclet/html/table.lp +15 -0
  131. data/vendor/lua/lib/lua/luadoc/doclet/raw.lua +12 -0
  132. data/vendor/lua/lib/lua/luadoc/init.lua +58 -0
  133. data/vendor/lua/lib/lua/luadoc/lp.lua +130 -0
  134. data/vendor/lua/lib/lua/luadoc/taglet/standard.lua +495 -0
  135. data/vendor/lua/lib/lua/luadoc/taglet/standard/tags.lua +171 -0
  136. data/vendor/lua/lib/lua/luadoc/util.lua +233 -0
  137. data/vendor/lua/lib/lua/luagl.dll +0 -0
  138. data/vendor/lua/lib/lua/luaglu.dll +0 -0
  139. data/vendor/lua/lib/lua/luaidl.lua +113 -0
  140. data/vendor/lua/lib/lua/luaidl/lex.lua +793 -0
  141. data/vendor/lua/lib/lua/luaidl/pre.lua +149 -0
  142. data/vendor/lua/lib/lua/luaidl/sin.lua +3631 -0
  143. data/vendor/lua/lib/lua/luarocks/add.lua +108 -0
  144. data/vendor/lua/lib/lua/luarocks/admin_remove.lua +87 -0
  145. data/vendor/lua/lib/lua/luarocks/build.lua +330 -0
  146. data/vendor/lua/lib/lua/luarocks/build/builtin.lua +253 -0
  147. data/vendor/lua/lib/lua/luarocks/build/cmake.lua +54 -0
  148. data/vendor/lua/lib/lua/luarocks/build/command.lua +32 -0
  149. data/vendor/lua/lib/lua/luarocks/build/make.lua +92 -0
  150. data/vendor/lua/lib/lua/luarocks/cache.lua +85 -0
  151. data/vendor/lua/lib/lua/luarocks/cfg.lua +449 -0
  152. data/vendor/lua/lib/lua/luarocks/command_line.lua +163 -0
  153. data/vendor/lua/lib/lua/luarocks/deps.lua +654 -0
  154. data/vendor/lua/lib/lua/luarocks/dir.lua +69 -0
  155. data/vendor/lua/lib/lua/luarocks/download.lua +90 -0
  156. data/vendor/lua/lib/lua/luarocks/fetch.lua +321 -0
  157. data/vendor/lua/lib/lua/luarocks/fetch/cvs.lua +44 -0
  158. data/vendor/lua/lib/lua/luarocks/fetch/git.lua +81 -0
  159. data/vendor/lua/lib/lua/luarocks/fetch/git_file.lua +17 -0
  160. data/vendor/lua/lib/lua/luarocks/fetch/hg.lua +54 -0
  161. data/vendor/lua/lib/lua/luarocks/fetch/sscm.lua +42 -0
  162. data/vendor/lua/lib/lua/luarocks/fetch/svn.lua +53 -0
  163. data/vendor/lua/lib/lua/luarocks/fs.lua +40 -0
  164. data/vendor/lua/lib/lua/luarocks/fs/lua.lua +676 -0
  165. data/vendor/lua/lib/lua/luarocks/fs/unix.lua +88 -0
  166. data/vendor/lua/lib/lua/luarocks/fs/unix/tools.lua +325 -0
  167. data/vendor/lua/lib/lua/luarocks/fs/win32.lua +107 -0
  168. data/vendor/lua/lib/lua/luarocks/fs/win32/tools.lua +334 -0
  169. data/vendor/lua/lib/lua/luarocks/help.lua +101 -0
  170. data/vendor/lua/lib/lua/luarocks/index.lua +172 -0
  171. data/vendor/lua/lib/lua/luarocks/install.lua +151 -0
  172. data/vendor/lua/lib/lua/luarocks/list.lua +35 -0
  173. data/vendor/lua/lib/lua/luarocks/loader.lua +228 -0
  174. data/vendor/lua/lib/lua/luarocks/make.lua +71 -0
  175. data/vendor/lua/lib/lua/luarocks/make_manifest.lua +34 -0
  176. data/vendor/lua/lib/lua/luarocks/manif.lua +360 -0
  177. data/vendor/lua/lib/lua/luarocks/manif_core.lua +75 -0
  178. data/vendor/lua/lib/lua/luarocks/new_version.lua +141 -0
  179. data/vendor/lua/lib/lua/luarocks/pack.lua +205 -0
  180. data/vendor/lua/lib/lua/luarocks/path.lua +315 -0
  181. data/vendor/lua/lib/lua/luarocks/persist.lua +173 -0
  182. data/vendor/lua/lib/lua/luarocks/refresh_cache.lua +30 -0
  183. data/vendor/lua/lib/lua/luarocks/remove.lua +135 -0
  184. data/vendor/lua/lib/lua/luarocks/rep.lua +313 -0
  185. data/vendor/lua/lib/lua/luarocks/require.lua +6 -0
  186. data/vendor/lua/lib/lua/luarocks/search.lua +399 -0
  187. data/vendor/lua/lib/lua/luarocks/show.lua +138 -0
  188. data/vendor/lua/lib/lua/luarocks/site_config.lua +23 -0
  189. data/vendor/lua/lib/lua/luarocks/tools/patch.lua +712 -0
  190. data/vendor/lua/lib/lua/luarocks/tools/tar.lua +144 -0
  191. data/vendor/lua/lib/lua/luarocks/tools/zip.lua +245 -0
  192. data/vendor/lua/lib/lua/luarocks/type_check.lua +267 -0
  193. data/vendor/lua/lib/lua/luarocks/unpack.lua +151 -0
  194. data/vendor/lua/lib/lua/luarocks/util.lua +420 -0
  195. data/vendor/lua/lib/lua/luarocks/validate.lua +164 -0
  196. data/vendor/lua/lib/lua/luars232.dll +0 -0
  197. data/vendor/lua/lib/lua/luasql/mysql.dll +0 -0
  198. data/vendor/lua/lib/lua/luasql/postgres.dll +0 -0
  199. data/vendor/lua/lib/lua/luasql/sqlite3.dll +0 -0
  200. data/vendor/lua/lib/lua/luaunit.lua +601 -0
  201. data/vendor/lua/lib/lua/lxp.dll +0 -0
  202. data/vendor/lua/lib/lua/lxp/lom.lua +60 -0
  203. data/vendor/lua/lib/lua/math_ext.lua +27 -0
  204. data/vendor/lua/lib/lua/mbox.lua +53 -0
  205. data/vendor/lua/lib/lua/md5.lua +19 -0
  206. data/vendor/lua/lib/lua/md5/core.dll +0 -0
  207. data/vendor/lua/lib/lua/metalua.lua +0 -0
  208. data/vendor/lua/lib/lua/metalua/ast_to_string.mlua +553 -0
  209. data/vendor/lua/lib/lua/metalua/base.lua +104 -0
  210. data/vendor/lua/lib/lua/metalua/bytecode.lua +0 -0
  211. data/vendor/lua/lib/lua/metalua/clopts.mlua +204 -0
  212. data/vendor/lua/lib/lua/metalua/compiler.lua +3 -0
  213. data/vendor/lua/lib/lua/metalua/dollar.mlua +24 -0
  214. data/vendor/lua/lib/lua/metalua/extension/H-runtime.mlua +216 -0
  215. data/vendor/lua/lib/lua/metalua/extension/H.mlua +22 -0
  216. data/vendor/lua/lib/lua/metalua/extension/anaphoric.mlua +54 -0
  217. data/vendor/lua/lib/lua/metalua/extension/clist.mlua +149 -0
  218. data/vendor/lua/lib/lua/metalua/extension/continue.mlua +53 -0
  219. data/vendor/lua/lib/lua/metalua/extension/localin.mlua +2 -0
  220. data/vendor/lua/lib/lua/metalua/extension/log.mlua +39 -0
  221. data/vendor/lua/lib/lua/metalua/extension/match.mlua +374 -0
  222. data/vendor/lua/lib/lua/metalua/extension/ternary.mlua +10 -0
  223. data/vendor/lua/lib/lua/metalua/extension/trycatch.mlua +189 -0
  224. data/vendor/lua/lib/lua/metalua/extension/types-runtime.mlua +159 -0
  225. data/vendor/lua/lib/lua/metalua/extension/types.mlua +352 -0
  226. data/vendor/lua/lib/lua/metalua/extension/withdo.mlua +30 -0
  227. data/vendor/lua/lib/lua/metalua/extension/xglobal-runtime.lua +41 -0
  228. data/vendor/lua/lib/lua/metalua/extension/xglobal.mlua +20 -0
  229. data/vendor/lua/lib/lua/metalua/extension/xloop.mlua +100 -0
  230. data/vendor/lua/lib/lua/metalua/extension/xmatch.mlua +216 -0
  231. data/vendor/lua/lib/lua/metalua/metaloop.mlua +76 -0
  232. data/vendor/lua/lib/lua/metalua/mlc.lua +0 -0
  233. data/vendor/lua/lib/lua/metalua/mlc_xcall.lua +119 -0
  234. data/vendor/lua/lib/lua/metalua/mlp.lua +0 -0
  235. data/vendor/lua/lib/lua/metalua/package2.lua +101 -0
  236. data/vendor/lua/lib/lua/metalua/runtime.lua +3 -0
  237. data/vendor/lua/lib/lua/metalua/string2.lua +44 -0
  238. data/vendor/lua/lib/lua/metalua/table2.lua +372 -0
  239. data/vendor/lua/lib/lua/metalua/walk.mlua +304 -0
  240. data/vendor/lua/lib/lua/metalua/walk/bindings.mlua +41 -0
  241. data/vendor/lua/lib/lua/metalua/walk/id.mlua +186 -0
  242. data/vendor/lua/lib/lua/metalua/walk/scope.lua +54 -0
  243. data/vendor/lua/lib/lua/mime.lua +87 -0
  244. data/vendor/lua/lib/lua/mime/core.dll +0 -0
  245. data/vendor/lua/lib/lua/mobdebug.lua +1484 -0
  246. data/vendor/lua/lib/lua/modules.lua +16 -0
  247. data/vendor/lua/lib/lua/object.lua +56 -0
  248. data/vendor/lua/lib/lua/oil/Exception.lua +26 -0
  249. data/vendor/lua/lib/lua/oil/arch.lua +27 -0
  250. data/vendor/lua/lib/lua/oil/arch/basic/client.lua +29 -0
  251. data/vendor/lua/lib/lua/oil/arch/basic/common.lua +13 -0
  252. data/vendor/lua/lib/lua/oil/arch/basic/server.lua +27 -0
  253. data/vendor/lua/lib/lua/oil/arch/cooperative/common.lua +10 -0
  254. data/vendor/lua/lib/lua/oil/arch/cooperative/server.lua +16 -0
  255. data/vendor/lua/lib/lua/oil/arch/corba/client.lua +39 -0
  256. data/vendor/lua/lib/lua/oil/arch/corba/common.lua +58 -0
  257. data/vendor/lua/lib/lua/oil/arch/corba/intercepted/client.lua +9 -0
  258. data/vendor/lua/lib/lua/oil/arch/corba/intercepted/server.lua +9 -0
  259. data/vendor/lua/lib/lua/oil/arch/corba/server.lua +35 -0
  260. data/vendor/lua/lib/lua/oil/arch/ludo/byref.lua +18 -0
  261. data/vendor/lua/lib/lua/oil/arch/ludo/client.lua +19 -0
  262. data/vendor/lua/lib/lua/oil/arch/ludo/common.lua +18 -0
  263. data/vendor/lua/lib/lua/oil/arch/ludo/server.lua +19 -0
  264. data/vendor/lua/lib/lua/oil/arch/typed/client.lua +27 -0
  265. data/vendor/lua/lib/lua/oil/arch/typed/common.lua +9 -0
  266. data/vendor/lua/lib/lua/oil/arch/typed/server.lua +18 -0
  267. data/vendor/lua/lib/lua/oil/assert.lua +87 -0
  268. data/vendor/lua/lib/lua/oil/builder.lua +45 -0
  269. data/vendor/lua/lib/lua/oil/builder/basic/client.lua +31 -0
  270. data/vendor/lua/lib/lua/oil/builder/basic/common.lua +11 -0
  271. data/vendor/lua/lib/lua/oil/builder/basic/server.lua +13 -0
  272. data/vendor/lua/lib/lua/oil/builder/cooperative/common.lua +11 -0
  273. data/vendor/lua/lib/lua/oil/builder/cooperative/server.lua +11 -0
  274. data/vendor/lua/lib/lua/oil/builder/corba/client.lua +13 -0
  275. data/vendor/lua/lib/lua/oil/builder/corba/common.lua +24 -0
  276. data/vendor/lua/lib/lua/oil/builder/corba/gencode.lua +13 -0
  277. data/vendor/lua/lib/lua/oil/builder/corba/intercepted/client.lua +11 -0
  278. data/vendor/lua/lib/lua/oil/builder/corba/intercepted/server.lua +11 -0
  279. data/vendor/lua/lib/lua/oil/builder/corba/server.lua +13 -0
  280. data/vendor/lua/lib/lua/oil/builder/lua/client.lua +11 -0
  281. data/vendor/lua/lib/lua/oil/builder/lua/server.lua +12 -0
  282. data/vendor/lua/lib/lua/oil/builder/ludo/byref.lua +13 -0
  283. data/vendor/lua/lib/lua/oil/builder/ludo/client.lua +13 -0
  284. data/vendor/lua/lib/lua/oil/builder/ludo/common.lua +14 -0
  285. data/vendor/lua/lib/lua/oil/builder/ludo/server.lua +13 -0
  286. data/vendor/lua/lib/lua/oil/builder/typed/client.lua +16 -0
  287. data/vendor/lua/lib/lua/oil/builder/typed/server.lua +12 -0
  288. data/vendor/lua/lib/lua/oil/compat.lua +846 -0
  289. data/vendor/lua/lib/lua/oil/component.lua +1 -0
  290. data/vendor/lua/lib/lua/oil/corba/giop.lua +301 -0
  291. data/vendor/lua/lib/lua/oil/corba/giop/Codec.lua +1568 -0
  292. data/vendor/lua/lib/lua/oil/corba/giop/CodecGen.lua +589 -0
  293. data/vendor/lua/lib/lua/oil/corba/giop/Exception.lua +25 -0
  294. data/vendor/lua/lib/lua/oil/corba/giop/Indexer.lua +63 -0
  295. data/vendor/lua/lib/lua/oil/corba/giop/Listener.lua +343 -0
  296. data/vendor/lua/lib/lua/oil/corba/giop/Messenger.lua +228 -0
  297. data/vendor/lua/lib/lua/oil/corba/giop/Referrer.lua +180 -0
  298. data/vendor/lua/lib/lua/oil/corba/giop/Requester.lua +462 -0
  299. data/vendor/lua/lib/lua/oil/corba/idl.lua +597 -0
  300. data/vendor/lua/lib/lua/oil/corba/idl/Compiler.lua +133 -0
  301. data/vendor/lua/lib/lua/oil/corba/idl/Importer.lua +235 -0
  302. data/vendor/lua/lib/lua/oil/corba/idl/Indexer.lua +95 -0
  303. data/vendor/lua/lib/lua/oil/corba/idl/Registry.lua +1821 -0
  304. data/vendor/lua/lib/lua/oil/corba/idl/ir.lua +847 -0
  305. data/vendor/lua/lib/lua/oil/corba/idl/sysex.lua +21 -0
  306. data/vendor/lua/lib/lua/oil/corba/iiop/Profiler.lua +200 -0
  307. data/vendor/lua/lib/lua/oil/corba/intercepted/Listener.lua +158 -0
  308. data/vendor/lua/lib/lua/oil/corba/intercepted/Requester.lua +181 -0
  309. data/vendor/lua/lib/lua/oil/corba/services/event.lua +126 -0
  310. data/vendor/lua/lib/lua/oil/corba/services/event/ConsumerAdmin.lua +50 -0
  311. data/vendor/lua/lib/lua/oil/corba/services/event/EventFactory.lua +15 -0
  312. data/vendor/lua/lib/lua/oil/corba/services/event/EventQueue.lua +37 -0
  313. data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushConsumer.lua +75 -0
  314. data/vendor/lua/lib/lua/oil/corba/services/event/ProxyPushSupplier.lua +62 -0
  315. data/vendor/lua/lib/lua/oil/corba/services/event/SingleDeferredDispatcher.lua +60 -0
  316. data/vendor/lua/lib/lua/oil/corba/services/event/SingleSynchronousDispatcher.lua +39 -0
  317. data/vendor/lua/lib/lua/oil/corba/services/event/SupplierAdmin.lua +50 -0
  318. data/vendor/lua/lib/lua/oil/corba/services/naming.lua +436 -0
  319. data/vendor/lua/lib/lua/oil/kernel/base/Acceptor.lua +268 -0
  320. data/vendor/lua/lib/lua/oil/kernel/base/Channels.lua +121 -0
  321. data/vendor/lua/lib/lua/oil/kernel/base/Connector.lua +147 -0
  322. data/vendor/lua/lib/lua/oil/kernel/base/Dispatcher.lua +99 -0
  323. data/vendor/lua/lib/lua/oil/kernel/base/Proxies.lua +86 -0
  324. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/asynchronous.lua +56 -0
  325. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/protected.lua +17 -0
  326. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/synchronous.lua +17 -0
  327. data/vendor/lua/lib/lua/oil/kernel/base/Proxies/utils.lua +29 -0
  328. data/vendor/lua/lib/lua/oil/kernel/base/Receiver.lua +110 -0
  329. data/vendor/lua/lib/lua/oil/kernel/base/Servants.lua +207 -0
  330. data/vendor/lua/lib/lua/oil/kernel/base/Sockets.lua +44 -0
  331. data/vendor/lua/lib/lua/oil/kernel/cooperative/Receiver.lua +139 -0
  332. data/vendor/lua/lib/lua/oil/kernel/intercepted/Listener.lua +47 -0
  333. data/vendor/lua/lib/lua/oil/kernel/intercepted/Requester.lua +58 -0
  334. data/vendor/lua/lib/lua/oil/kernel/lua/Dispatcher.lua +76 -0
  335. data/vendor/lua/lib/lua/oil/kernel/lua/Proxies.lua +69 -0
  336. data/vendor/lua/lib/lua/oil/kernel/typed/Dispatcher.lua +91 -0
  337. data/vendor/lua/lib/lua/oil/kernel/typed/Proxies.lua +153 -0
  338. data/vendor/lua/lib/lua/oil/kernel/typed/Servants.lua +137 -0
  339. data/vendor/lua/lib/lua/oil/ludo/Codec.lua +66 -0
  340. data/vendor/lua/lib/lua/oil/ludo/CodecByRef.lua +103 -0
  341. data/vendor/lua/lib/lua/oil/ludo/Listener.lua +151 -0
  342. data/vendor/lua/lib/lua/oil/ludo/Referrer.lua +72 -0
  343. data/vendor/lua/lib/lua/oil/ludo/Requester.lua +107 -0
  344. data/vendor/lua/lib/lua/oil/oo.lua +1 -0
  345. data/vendor/lua/lib/lua/oil/port.lua +1 -0
  346. data/vendor/lua/lib/lua/oil/properties.lua +57 -0
  347. data/vendor/lua/lib/lua/oil/verbose.lua +133 -0
  348. data/vendor/lua/lib/lua/package_ext.lua +15 -0
  349. data/vendor/lua/lib/lua/parser.lua +268 -0
  350. data/vendor/lua/lib/lua/pl/Date.lua +555 -0
  351. data/vendor/lua/lib/lua/pl/List.lua +613 -0
  352. data/vendor/lua/lib/lua/pl/Map.lua +113 -0
  353. data/vendor/lua/lib/lua/pl/MultiMap.lua +62 -0
  354. data/vendor/lua/lib/lua/pl/OrderedMap.lua +151 -0
  355. data/vendor/lua/lib/lua/pl/Set.lua +153 -0
  356. data/vendor/lua/lib/lua/pl/app.lua +165 -0
  357. data/vendor/lua/lib/lua/pl/array2d.lua +501 -0
  358. data/vendor/lua/lib/lua/pl/class.lua +180 -0
  359. data/vendor/lua/lib/lua/pl/comprehension.lua +286 -0
  360. data/vendor/lua/lib/lua/pl/config.lua +176 -0
  361. data/vendor/lua/lib/lua/pl/data.lua +606 -0
  362. data/vendor/lua/lib/lua/pl/dir.lua +475 -0
  363. data/vendor/lua/lib/lua/pl/file.lua +70 -0
  364. data/vendor/lua/lib/lua/pl/func.lua +376 -0
  365. data/vendor/lua/lib/lua/pl/init.lua +68 -0
  366. data/vendor/lua/lib/lua/pl/input.lua +173 -0
  367. data/vendor/lua/lib/lua/pl/lapp.lua +407 -0
  368. data/vendor/lua/lib/lua/pl/lexer.lua +456 -0
  369. data/vendor/lua/lib/lua/pl/luabalanced.lua +264 -0
  370. data/vendor/lua/lib/lua/pl/operator.lua +201 -0
  371. data/vendor/lua/lib/lua/pl/path.lua +398 -0
  372. data/vendor/lua/lib/lua/pl/permute.lua +63 -0
  373. data/vendor/lua/lib/lua/pl/platf/luajava.lua +101 -0
  374. data/vendor/lua/lib/lua/pl/pretty.lua +285 -0
  375. data/vendor/lua/lib/lua/pl/seq.lua +551 -0
  376. data/vendor/lua/lib/lua/pl/sip.lua +344 -0
  377. data/vendor/lua/lib/lua/pl/strict.lua +70 -0
  378. data/vendor/lua/lib/lua/pl/stringio.lua +158 -0
  379. data/vendor/lua/lib/lua/pl/stringx.lua +440 -0
  380. data/vendor/lua/lib/lua/pl/tablex.lua +817 -0
  381. data/vendor/lua/lib/lua/pl/template.lua +103 -0
  382. data/vendor/lua/lib/lua/pl/test.lua +135 -0
  383. data/vendor/lua/lib/lua/pl/text.lua +243 -0
  384. data/vendor/lua/lib/lua/pl/utils.lua +550 -0
  385. data/vendor/lua/lib/lua/pl/xml.lua +689 -0
  386. data/vendor/lua/lib/lua/profiler.dll +0 -0
  387. data/vendor/lua/lib/lua/re.lua +248 -0
  388. data/vendor/lua/lib/lua/rex_onig.dll +0 -0
  389. data/vendor/lua/lib/lua/rex_pcre.dll +0 -0
  390. data/vendor/lua/lib/lua/rex_posix.dll +0 -0
  391. data/vendor/lua/lib/lua/rings.dll +0 -0
  392. data/vendor/lua/lib/lua/serialize.lua +193 -0
  393. data/vendor/lua/lib/lua/set.lua +149 -0
  394. data/vendor/lua/lib/lua/socket.lua +133 -0
  395. data/vendor/lua/lib/lua/socket/core.dll +0 -0
  396. data/vendor/lua/lib/lua/socket/ftp.lua +281 -0
  397. data/vendor/lua/lib/lua/socket/http.lua +350 -0
  398. data/vendor/lua/lib/lua/socket/smtp.lua +251 -0
  399. data/vendor/lua/lib/lua/socket/tp.lua +123 -0
  400. data/vendor/lua/lib/lua/socket/url.lua +297 -0
  401. data/vendor/lua/lib/lua/ssl.dll +0 -0
  402. data/vendor/lua/lib/lua/ssl.lua +93 -0
  403. data/vendor/lua/lib/lua/ssl/https.lua +138 -0
  404. data/vendor/lua/lib/lua/stable.lua +28 -0
  405. data/vendor/lua/lib/lua/std.lua +16 -0
  406. data/vendor/lua/lib/lua/strbuf.lua +32 -0
  407. data/vendor/lua/lib/lua/strict.lua +45 -0
  408. data/vendor/lua/lib/lua/string_ext.lua +274 -0
  409. data/vendor/lua/lib/lua/table_ext.lua +117 -0
  410. data/vendor/lua/lib/lua/tar.lua +262 -0
  411. data/vendor/lua/lib/lua/task.dll +0 -0
  412. data/vendor/lua/lib/lua/tree.lua +81 -0
  413. data/vendor/lua/lib/lua/unicode.dll +0 -0
  414. data/vendor/lua/lib/lua/verbose_require.lua +11 -0
  415. data/vendor/lua/lib/lua/vstruct.lua +86 -0
  416. data/vendor/lua/lib/lua/vstruct/ast.lua +192 -0
  417. data/vendor/lua/lib/lua/vstruct/ast/Bitpack.lua +33 -0
  418. data/vendor/lua/lib/lua/vstruct/ast/Generator.lua +174 -0
  419. data/vendor/lua/lib/lua/vstruct/ast/IO.lua +45 -0
  420. data/vendor/lua/lib/lua/vstruct/ast/List.lua +56 -0
  421. data/vendor/lua/lib/lua/vstruct/ast/Name.lua +20 -0
  422. data/vendor/lua/lib/lua/vstruct/ast/Repeat.lua +23 -0
  423. data/vendor/lua/lib/lua/vstruct/ast/Root.lua +19 -0
  424. data/vendor/lua/lib/lua/vstruct/ast/Table.lua +65 -0
  425. data/vendor/lua/lib/lua/vstruct/cursor.lua +81 -0
  426. data/vendor/lua/lib/lua/vstruct/io.lua +45 -0
  427. data/vendor/lua/lib/lua/vstruct/io/a.lua +24 -0
  428. data/vendor/lua/lib/lua/vstruct/io/b.lua +28 -0
  429. data/vendor/lua/lib/lua/vstruct/io/bigendian.lua +21 -0
  430. data/vendor/lua/lib/lua/vstruct/io/c.lua +25 -0
  431. data/vendor/lua/lib/lua/vstruct/io/defaults.lua +24 -0
  432. data/vendor/lua/lib/lua/vstruct/io/endianness.lua +41 -0
  433. data/vendor/lua/lib/lua/vstruct/io/f.lua +129 -0
  434. data/vendor/lua/lib/lua/vstruct/io/hostendian.lua +21 -0
  435. data/vendor/lua/lib/lua/vstruct/io/i.lua +42 -0
  436. data/vendor/lua/lib/lua/vstruct/io/littleendian.lua +21 -0
  437. data/vendor/lua/lib/lua/vstruct/io/m.lua +62 -0
  438. data/vendor/lua/lib/lua/vstruct/io/p.lua +23 -0
  439. data/vendor/lua/lib/lua/vstruct/io/s.lua +27 -0
  440. data/vendor/lua/lib/lua/vstruct/io/seekb.lua +18 -0
  441. data/vendor/lua/lib/lua/vstruct/io/seekf.lua +18 -0
  442. data/vendor/lua/lib/lua/vstruct/io/seekto.lua +18 -0
  443. data/vendor/lua/lib/lua/vstruct/io/u.lua +54 -0
  444. data/vendor/lua/lib/lua/vstruct/io/x.lua +34 -0
  445. data/vendor/lua/lib/lua/vstruct/io/z.lua +63 -0
  446. data/vendor/lua/lib/lua/vstruct/lexer.lua +100 -0
  447. data/vendor/lua/lib/lua/vstruct/pack.lua +142 -0
  448. data/vendor/lua/lib/lua/vstruct/test.lua +47 -0
  449. data/vendor/lua/lib/lua/vstruct/test/basic.lua +73 -0
  450. data/vendor/lua/lib/lua/vstruct/test/common.lua +100 -0
  451. data/vendor/lua/lib/lua/vstruct/test/fp-bigendian.lua +56 -0
  452. data/vendor/lua/lib/lua/vstruct/test/fp-littleendian.lua +56 -0
  453. data/vendor/lua/lib/lua/vstruct/test/struct-test-gen.lua +1230 -0
  454. data/vendor/lua/lib/lua/vstruct/unpack.lua +126 -0
  455. data/vendor/lua/lib/lua/wx.dll +0 -0
  456. data/vendor/lua/lib/lua/xml.lua +75 -0
  457. data/vendor/lua/lib/lua/zip.dll +0 -0
  458. data/vendor/lua/lib/lua/zlib.dll +0 -0
  459. metadata +529 -0
@@ -0,0 +1,591 @@
1
+ --
2
+ -- LANES.LUA
3
+ --
4
+ -- Multithreading and -core support for Lua
5
+ --
6
+ -- Author: Asko Kauppi <akauppi@gmail.com>
7
+ --
8
+ -- History:
9
+ -- 3-Dec-10 BGe: Added support to generate a lane from a string
10
+ -- Jun-08 AKa: major revise
11
+ -- 15-May-07 AKa: pthread_join():less version, some speedup & ability to
12
+ -- handle more threads (~ 8000-9000, up from ~ 5000)
13
+ -- 26-Feb-07 AKa: serialization working (C side)
14
+ -- 17-Sep-06 AKa: started the module (serialization)
15
+ --
16
+ --[[
17
+ ===============================================================================
18
+
19
+ Copyright (C) 2007-10 Asko Kauppi <akauppi@gmail.com>
20
+
21
+ Permission is hereby granted, free of charge, to any person obtaining a copy
22
+ of this software and associated documentation files (the "Software"), to deal
23
+ in the Software without restriction, including without limitation the rights
24
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
25
+ copies of the Software, and to permit persons to whom the Software is
26
+ furnished to do so, subject to the following conditions:
27
+
28
+ The above copyright notice and this permission notice shall be included in
29
+ all copies or substantial portions of the Software.
30
+
31
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
32
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
33
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
34
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
35
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
36
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
37
+ THE SOFTWARE.
38
+
39
+ ===============================================================================
40
+ ]]--
41
+
42
+ -- Lua 5.1: module() creates a global variable
43
+ -- Lua 5.2: module() might go away
44
+ -- almost everything module() does is done by require()
45
+ -- -> simply create a table, populate it, return it, and be done
46
+ local lanes = {}
47
+
48
+ lanes.configure = function( _params)
49
+ _params = _params or { nb_keepers = 1, with_timers = true, on_state_create = nil}
50
+ if type( _params) ~= "table" then
51
+ error( "Bad parameter #1 to lanes.configure(), should be a table")
52
+ end
53
+ -- on_state_create may be nil or a function
54
+ if _params.on_state_create and (type( _params.on_state_create) ~= "function") then
55
+ error( "Bad on_state_create: " .. tostring( _params.on_state_create), 2)
56
+ end
57
+
58
+ local mm = require "lanes.core"
59
+ assert( type(mm)=="table" )
60
+
61
+ -- configure() is available only the first time lanes.core is required process-wide, and we *must* call it to have the other functions in the interface
62
+ if mm.configure then mm.configure( _params.nb_keepers, _params.on_state_create) end
63
+
64
+ local thread_new = assert(mm.thread_new)
65
+
66
+ local _single= assert(mm._single)
67
+ local _version= assert(mm._version)
68
+
69
+ local now_secs= assert( mm.now_secs )
70
+ local wakeup_conv= assert( mm.wakeup_conv )
71
+
72
+ local max_prio= assert( mm.max_prio )
73
+
74
+ -- This check is for sublanes requiring Lanes
75
+ --
76
+ -- TBD: We could also have the C level expose 'string.gmatch' for us. But this is simpler.
77
+ --
78
+ if not string then
79
+ error( "To use 'lanes', you will also need to have 'string' available.", 2 )
80
+ end
81
+
82
+ --
83
+ -- Cache globals for code that might run under sandboxing
84
+ --
85
+ local assert= assert
86
+ local string_gmatch= assert( string.gmatch )
87
+ local select= assert( select )
88
+ local type= assert( type )
89
+ local pairs= assert( pairs )
90
+ local tostring= assert( tostring )
91
+ local error= assert( error )
92
+
93
+ lanes.ABOUT=
94
+ {
95
+ author= "Asko Kauppi <akauppi@gmail.com>, Benoit Germain <bnt.germain@gmail.com>",
96
+ description= "Running multiple Lua states in parallel",
97
+ license= "MIT/X11",
98
+ copyright= "Copyright (c) 2007-10, Asko Kauppi; (c) 2011-12, Benoit Germain",
99
+ version= _version,
100
+ }
101
+
102
+
103
+ -- Making copies of necessary system libs will pass them on as upvalues;
104
+ -- only the first state doing "require 'lanes'" will need to have 'string'
105
+ -- and 'table' visible.
106
+ --
107
+ local function WR(str)
108
+ io.stderr:write( str.."\n" )
109
+ end
110
+
111
+ local function DUMP( tbl )
112
+ if not tbl then return end
113
+ local str=""
114
+ for k,v in pairs(tbl) do
115
+ str= str..k.."="..tostring(v).."\n"
116
+ end
117
+ WR(str)
118
+ end
119
+
120
+
121
+ ---=== Laning ===---
122
+
123
+ -- lane_h[1..n]: lane results, same as via 'lane_h:join()'
124
+ -- lane_h[0]: can be read to make sure a thread has finished (always gives 'true')
125
+ -- lane_h[-1]: error message, without propagating the error
126
+ --
127
+ -- Reading a Lane result (or [0]) propagates a possible error in the lane
128
+ -- (and execution does not return). Cancelled lanes give 'nil' values.
129
+ --
130
+ -- lane_h.state: "pending"/"running"/"waiting"/"done"/"error"/"cancelled"
131
+ --
132
+ -- Note: Would be great to be able to have '__ipairs' metamethod, that gets
133
+ -- called by 'ipairs()' function to custom iterate objects. We'd use it
134
+ -- for making sure a lane has ended (results are available); not requiring
135
+ -- the user to precede a loop by explicit 'h[0]' or 'h:join()'.
136
+ --
137
+ -- Or, even better, 'ipairs()' should start valuing '__index' instead
138
+ -- of using raw reads that bypass it.
139
+ --
140
+ -----
141
+ -- lanes.gen( [libs_str|opt_tbl [, ...],] lane_func ) ( [...] ) -> h
142
+ --
143
+ -- 'libs': nil: no libraries available (default)
144
+ -- "": only base library ('assert', 'print', 'unpack' etc.)
145
+ -- "math,os": math + os + base libraries (named ones + base)
146
+ -- "*": all standard libraries available
147
+ --
148
+ -- 'opt': .priority: int (-2..+2) smaller is lower priority (0 = default)
149
+ --
150
+ -- .cancelstep: bool | uint
151
+ -- false: cancellation check only at pending Linda operations
152
+ -- (send/receive) so no runtime performance penalty (default)
153
+ -- true: adequate cancellation check (same as 100)
154
+ -- >0: cancellation check every x Lua lines (small number= faster
155
+ -- reaction but more performance overhead)
156
+ --
157
+ -- .globals: table of globals to set for a new thread (passed by value)
158
+ --
159
+ -- .required: table of packages to require
160
+ -- ... (more options may be introduced later) ...
161
+ --
162
+ -- Calling with a function parameter ('lane_func') ends the string/table
163
+ -- modifiers, and prepares a lane generator. One can either finish here,
164
+ -- and call the generator later (maybe multiple times, with different parameters)
165
+ -- or add on actual thread arguments to also ignite the thread on the same call.
166
+
167
+ local valid_libs= {
168
+ ["package"]= true,
169
+ ["table"]= true,
170
+ ["io"]= true,
171
+ ["os"]= true,
172
+ ["string"]= true,
173
+ ["math"]= true,
174
+ ["debug"]= true,
175
+ --
176
+ ["base"]= true,
177
+ ["coroutine"]= true,
178
+ ["*"]= true
179
+ }
180
+
181
+ -- PUBLIC LANES API
182
+ local function gen( ... )
183
+ local opt= {}
184
+ local libs= nil
185
+ local lev= 2 -- level for errors
186
+
187
+ local n= select('#',...)
188
+
189
+ if n==0 then
190
+ error( "No parameters!" )
191
+ end
192
+
193
+ for i=1,n-1 do
194
+ local v= select(i,...)
195
+ if type(v)=="string" then
196
+ libs= libs and libs..","..v or v
197
+ elseif type(v)=="table" then
198
+ for k,vv in pairs(v) do
199
+ opt[k]= vv
200
+ end
201
+ elseif v==nil then
202
+ -- skip
203
+ else
204
+ error( "Bad parameter: "..tostring(v) )
205
+ end
206
+ end
207
+
208
+ local func= select(n,...)
209
+ local functype = type(func)
210
+ if functype ~= "function" and functype ~= "string" then
211
+ error( "Last parameter not function or string: "..tostring(func))
212
+ end
213
+
214
+ -- Check 'libs' already here, so the error goes in the right place
215
+ -- (otherwise will be noticed only once the generator is called)
216
+ --
217
+ if libs then
218
+ for s in string_gmatch(libs, "[%a*]+") do
219
+ if not valid_libs[s] then
220
+ error( "Bad library name: "..s )
221
+ end
222
+ end
223
+ end
224
+
225
+ local prio, cs, g_tbl, package_tbl, required
226
+
227
+ for k,v in pairs(opt) do
228
+ if k=="priority" then prio= v
229
+ elseif k=="cancelstep" then
230
+ cs = (v==true) and 100 or
231
+ (v==false) and 0 or
232
+ type(v)=="number" and v or
233
+ error( "Bad cancelstep: "..tostring(v), lev )
234
+ elseif k=="globals" then g_tbl= v
235
+ elseif k=="package" then
236
+ package_tbl = (type( v) == "table") and v or error( "Bad package: " .. tostring( v), lev)
237
+ elseif k=="required" then
238
+ required= (type( v) == "table") and v or error( "Bad required: " .. tostring( v), lev)
239
+ --..
240
+ elseif k==1 then error( "unkeyed option: ".. tostring(v), lev )
241
+ else error( "Bad option: ".. tostring(k), lev )
242
+ end
243
+ end
244
+
245
+ if not package_tbl then package_tbl = package end
246
+ -- Lane generator
247
+ --
248
+ return function(...)
249
+ return thread_new( func, libs, _params.on_state_create, cs, prio, g_tbl, package_tbl, required, ...) -- args
250
+ end
251
+ end
252
+
253
+ ---=== Lindas ===---
254
+
255
+ -- We let the C code attach methods to userdata directly
256
+
257
+ -----
258
+ -- lanes.linda(["name"]) -> linda_ud
259
+ --
260
+ -- PUBLIC LANES API
261
+ local linda = mm.linda
262
+
263
+
264
+ ---=== Timers ===---
265
+
266
+ -- PUBLIC LANES API
267
+ local timer = function() error "timers are not active" end
268
+
269
+ if _params.with_timers ~= false then
270
+
271
+ local timer_gateway= assert( mm.timer_gateway )
272
+ --
273
+ -- On first 'require "lanes"', a timer lane is spawned that will maintain
274
+ -- timer tables and sleep in between the timer events. All interaction with
275
+ -- the timer lane happens via a 'timer_gateway' Linda, which is common to
276
+ -- all that 'require "lanes"'.
277
+ --
278
+ -- Linda protocol to timer lane:
279
+ --
280
+ -- TGW_KEY: linda_h, key, [wakeup_at_secs], [repeat_secs]
281
+ --
282
+ local TGW_KEY= "(timer control)" -- the key does not matter, a 'weird' key may help debugging
283
+ local first_time_key= "first time"
284
+
285
+ local first_time= timer_gateway:get(first_time_key) == nil
286
+ timer_gateway:set(first_time_key,true)
287
+
288
+ --
289
+ -- Timer lane; initialize only on the first 'require "lanes"' instance (which naturally
290
+ -- has 'table' always declared)
291
+ --
292
+ if first_time then
293
+ local table_remove= assert( table.remove )
294
+ local table_insert= assert( table.insert )
295
+
296
+ --
297
+ -- { [deep_linda_lightuserdata]= { [deep_linda_lightuserdata]=linda_h,
298
+ -- [key]= { wakeup_secs [,period_secs] } [, ...] },
299
+ -- }
300
+ --
301
+ -- Collection of all running timers, indexed with linda's & key.
302
+ --
303
+ -- Note that we need to use the deep lightuserdata identifiers, instead
304
+ -- of 'linda_h' themselves as table indices. Otherwise, we'd get multiple
305
+ -- entries for the same timer.
306
+ --
307
+ -- The 'hidden' reference to Linda proxy is used in 'check_timers()' but
308
+ -- also important to keep the Linda alive, even if all outside world threw
309
+ -- away pointers to it (which would ruin uniqueness of the deep pointer).
310
+ -- Now we're safe.
311
+ --
312
+ local collection= {}
313
+
314
+ --
315
+ -- set_timer( linda_h, key [,wakeup_at_secs [,period_secs]] )
316
+ --
317
+ local function set_timer( linda, key, wakeup_at, period )
318
+ assert( wakeup_at==nil or wakeup_at>0.0 )
319
+ assert( period==nil or period>0.0 )
320
+
321
+ local linda_deep= linda:deep()
322
+ assert( linda_deep )
323
+
324
+ -- Find or make a lookup for this timer
325
+ --
326
+ local t1= collection[linda_deep]
327
+ if not t1 then
328
+ t1= { [linda_deep]= linda } -- proxy to use the Linda
329
+ collection[linda_deep]= t1
330
+ end
331
+
332
+ if wakeup_at==nil then
333
+ -- Clear the timer
334
+ --
335
+ t1[key]= nil
336
+
337
+ -- Remove empty tables from collection; speeds timer checks and
338
+ -- lets our 'safety reference' proxy be gc:ed as well.
339
+ --
340
+ local empty= true
341
+ for k,_ in pairs(t1) do
342
+ if k~= linda_deep then
343
+ empty= false; break
344
+ end
345
+ end
346
+ if empty then
347
+ collection[linda_deep]= nil
348
+ end
349
+
350
+ -- Note: any unread timer value is left at 'linda[key]' intensionally;
351
+ -- clearing a timer just stops it.
352
+ else
353
+ -- New timer or changing the timings
354
+ --
355
+ local t2= t1[key]
356
+ if not t2 then
357
+ t2= {}; t1[key]= t2
358
+ end
359
+
360
+ t2[1]= wakeup_at
361
+ t2[2]= period -- can be 'nil'
362
+ end
363
+ end
364
+
365
+ -----
366
+ -- [next_wakeup_at]= check_timers()
367
+ --
368
+ -- Check timers, and wake up the ones expired (if any)
369
+ --
370
+ -- Returns the closest upcoming (remaining) wakeup time (or 'nil' if none).
371
+ --
372
+ local function check_timers()
373
+
374
+ local now= now_secs()
375
+ local next_wakeup
376
+
377
+ for linda_deep,t1 in pairs(collection) do
378
+ for key,t2 in pairs(t1) do
379
+ --
380
+ if key==linda_deep then
381
+ -- no 'continue' in Lua :/
382
+ else
383
+ -- 't2': { wakeup_at_secs [,period_secs] }
384
+ --
385
+ local wakeup_at= t2[1]
386
+ local period= t2[2] -- may be 'nil'
387
+
388
+ if wakeup_at <= now then
389
+ local linda= t1[linda_deep]
390
+ assert(linda)
391
+
392
+ linda:set( key, now )
393
+
394
+ -- 'pairs()' allows the values to be modified (and even
395
+ -- removed) as far as keys are not touched
396
+
397
+ if not period then
398
+ -- one-time timer; gone
399
+ --
400
+ t1[key]= nil
401
+ wakeup_at= nil -- no 'continue' in Lua :/
402
+ else
403
+ -- repeating timer; find next wakeup (may jump multiple repeats)
404
+ --
405
+ repeat
406
+ wakeup_at= wakeup_at+period
407
+ until wakeup_at > now
408
+
409
+ t2[1]= wakeup_at
410
+ end
411
+ end
412
+
413
+ if wakeup_at and ((not next_wakeup) or (wakeup_at < next_wakeup)) then
414
+ next_wakeup= wakeup_at
415
+ end
416
+ end
417
+ end -- t2 loop
418
+ end -- t1 loop
419
+
420
+ return next_wakeup -- may be 'nil'
421
+ end
422
+
423
+ -----
424
+ -- Snore loop (run as a lane on the background)
425
+ --
426
+ -- High priority, to get trustworthy timings.
427
+ --
428
+ -- We let the timer lane be a "free running" thread; no handle to it
429
+ -- remains.
430
+ --
431
+ local timer_body = function()
432
+ local timer_gateway_batched = timer_gateway.batched
433
+ set_debug_threadname( "LanesTimer")
434
+ set_finalizer( function( err, stk)
435
+ if err and type( err) ~= "userdata" then
436
+ WR( "LanesTimer error: "..tostring(err))
437
+ --elseif type( err) == "userdata" then
438
+ -- WR( "LanesTimer after cancel" )
439
+ --else
440
+ -- WR("LanesTimer finalized")
441
+ end
442
+ end)
443
+ while true do
444
+ local next_wakeup= check_timers()
445
+
446
+ -- Sleep until next timer to wake up, or a set/clear command
447
+ --
448
+ local secs
449
+ if next_wakeup then
450
+ secs = next_wakeup - now_secs()
451
+ if secs < 0 then secs = 0 end
452
+ end
453
+ local linda = timer_gateway:receive( secs, TGW_KEY)
454
+
455
+ if linda then
456
+ local key, wakeup_at, period = timer_gateway:receive( 0, timer_gateway_batched, TGW_KEY, 3)
457
+ assert( key)
458
+ set_timer( linda, key, wakeup_at, period and period > 0 and period or nil)
459
+ --elseif secs == nil then -- got no value while block-waiting?
460
+ -- WR( "timer lane: no linda, aborted?")
461
+ end
462
+ end
463
+ end
464
+ gen( "*", { priority=max_prio}, timer_body)() -- "*" instead of "io,package" for LuaJIT compatibility...
465
+ end
466
+
467
+ -----
468
+ -- = timer( linda_h, key_val, date_tbl|first_secs [,period_secs] )
469
+ --
470
+ -- PUBLIC LANES API
471
+ timer = function( linda, key, a, period )
472
+
473
+ if a==0.0 then
474
+ -- Caller expects to get current time stamp in Linda, on return
475
+ -- (like the timer had expired instantly); it would be good to set this
476
+ -- as late as possible (to give most current time) but also we want it
477
+ -- to precede any possible timers that might start striking.
478
+ --
479
+ linda:set( key, now_secs() )
480
+
481
+ if not period or period==0.0 then
482
+ timer_gateway:send( TGW_KEY, linda, key, nil, nil ) -- clear the timer
483
+ return -- nothing more to do
484
+ end
485
+ a= period
486
+ end
487
+
488
+ local wakeup_at= type(a)=="table" and wakeup_conv(a) -- given point of time
489
+ or (a and now_secs()+a or nil)
490
+ -- queue to timer
491
+ --
492
+ timer_gateway:send( TGW_KEY, linda, key, wakeup_at, period )
493
+ end
494
+
495
+ end -- _params.with_timers
496
+
497
+ ---=== Lock & atomic generators ===---
498
+
499
+ -- These functions are just surface sugar, but make solutions easier to read.
500
+ -- Not many applications should even need explicit locks or atomic counters.
501
+
502
+ --
503
+ -- lock_f= lanes.genlock( linda_h, key [,N_uint=1] )
504
+ --
505
+ -- = lock_f( +M ) -- acquire M
506
+ -- ...locked...
507
+ -- = lock_f( -M ) -- release M
508
+ --
509
+ -- Returns an access function that allows 'N' simultaneous entries between
510
+ -- acquire (+M) and release (-M). For binary locks, use M==1.
511
+ --
512
+ -- PUBLIC LANES API
513
+ local function genlock( linda, key, N )
514
+ linda:limit(key,N)
515
+ linda:set(key,nil) -- clears existing data
516
+
517
+ --
518
+ -- [true [, ...]= trues(uint)
519
+ --
520
+ local function trues(n)
521
+ if n>0 then return true,trues(n-1) end
522
+ end
523
+
524
+ return
525
+ function(M)
526
+ if M>0 then
527
+ -- 'nil' timeout allows 'key' to be numeric
528
+ linda:send( nil, key, trues(M) ) -- suspends until been able to push them
529
+ else
530
+ for i=1,-M do
531
+ linda:receive( key )
532
+ end
533
+ end
534
+ end
535
+ end
536
+
537
+
538
+ --
539
+ -- atomic_f= lanes.genatomic( linda_h, key [,initial_num=0.0] )
540
+ --
541
+ -- int= atomic_f( [diff_num=1.0] )
542
+ --
543
+ -- Returns an access function that allows atomic increment/decrement of the
544
+ -- number in 'key'.
545
+ --
546
+ -- PUBLIC LANES API
547
+ local function genatomic( linda, key, initial_val )
548
+ linda:limit(key,2) -- value [,true]
549
+ linda:set(key,initial_val or 0.0) -- clears existing data (also queue)
550
+
551
+ return
552
+ function(diff)
553
+ -- 'nil' allows 'key' to be numeric
554
+ linda:send( nil, key, true ) -- suspends until our 'true' is in
555
+ local val= linda:get(key) + (diff or 1.0)
556
+ linda:set( key, val ) -- releases the lock, by emptying queue
557
+ return val
558
+ end
559
+ end
560
+
561
+ -- newuserdata = mm.newuserdata
562
+
563
+ -- activate full interface
564
+ lanes.gen = gen
565
+ lanes.linda = mm.linda
566
+ lanes.cancel_error = mm.cancel_error
567
+ lanes.nameof = mm.nameof
568
+ lanes.timer = timer
569
+ lanes.genlock = genlock
570
+ lanes.now_secs = now_secs
571
+ lanes.genatomic = genatomic
572
+ -- from now on, calling configure does nothing but checking that we don't call it with parameters that changed compared to the first invocation
573
+ lanes.configure = function( _params2)
574
+ _params2 = _params2 or _params
575
+ if _params2.nb_keepers ~= _params.nb_keepers then
576
+ error( "mismatched configuration: " .. tostring( _params2.nb_keepers) .. " keepers instead of " .. tostring( _params.nb_keepers))
577
+ end
578
+ if _params2.with_timers ~= _params.with_timers then
579
+ error( "mismatched configuration: " .. tostring( _params2.with_timers) .. " timer activity instead of " .. tostring( _params.with_timers))
580
+ end
581
+ if _params2.on_create_state and _params2.on_create_state ~= _params.on_create_state then
582
+ error( "mismatched configuration: " .. tostring( _params2.on_create_state) .. " timer activity instead of " .. tostring( _params.on_create_state))
583
+ end
584
+ return lanes
585
+ end
586
+ return lanes
587
+ end -- lanes.configure
588
+
589
+ --the end
590
+ return lanes
591
+