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,71 @@
1
+ --------------------------------------------------------------------------------
2
+ ---------------------- ## ##### ##### ###### -----------------------
3
+ ---------------------- ## ## ## ## ## ## ## -----------------------
4
+ ---------------------- ## ## ## ## ## ###### -----------------------
5
+ ---------------------- ## ## ## ## ## ## -----------------------
6
+ ---------------------- ###### ##### ##### ## -----------------------
7
+ ---------------------- -----------------------
8
+ ----------------------- Lua Object-Oriented Programming ------------------------
9
+ --------------------------------------------------------------------------------
10
+ -- Project: LOOP - Lua Object-Oriented Programming --
11
+ -- Release: 2.3 beta --
12
+ -- Title : Component Model with Full Containment Support --
13
+ -- Author : Renato Maia <maia@inf.puc-rio.br> --
14
+ --------------------------------------------------------------------------------
15
+ -- Exported API: --
16
+ -- Template --
17
+ -- factoryof(component) --
18
+ -- templateof(factory|component) --
19
+ -- ports(template) --
20
+ -- segmentof(portname, component) --
21
+ --------------------------------------------------------------------------------
22
+
23
+ local pairs = pairs
24
+ local select = select
25
+ local type = type
26
+
27
+ local oo = require "loop.cached"
28
+ local base = require "loop.component.wrapped"
29
+
30
+ module "loop.component.contained"
31
+
32
+ --------------------------------------------------------------------------------
33
+
34
+ BaseTemplate = oo.class({}, base.BaseTemplate)
35
+
36
+ function BaseTemplate:__new(...)
37
+ local state = { __factory = self }
38
+ local comp = self.__component or self[1]
39
+ if comp then
40
+ comp = comp(...)
41
+ state.__component = comp
42
+ else
43
+ comp = ... or {}
44
+ end
45
+ for port, class in pairs(self) do
46
+ if type(port) == "string" and port:match("^%a[%w_]*$") then
47
+ state[port] = class(comp and comp[port], comp)
48
+ end
49
+ end
50
+ return state
51
+ end
52
+
53
+ function Template(template, ...)
54
+ return oo.class(template, BaseTemplate, ...)
55
+ end
56
+
57
+ --------------------------------------------------------------------------------
58
+
59
+ delegate = base.delegate -- used by 'dynamic' component model
60
+
61
+ --------------------------------------------------------------------------------
62
+
63
+ factoryof = base.factoryof
64
+ templateof = base.templateof
65
+ ports = base.ports
66
+ segmentof = base.segmentof
67
+
68
+ --------------------------------------------------------------------------------
69
+
70
+ addport = base.addport
71
+ removeport = base.removeport
@@ -0,0 +1,223 @@
1
+ --------------------------------------------------------------------------------
2
+ ---------------------- ## ##### ##### ###### -----------------------
3
+ ---------------------- ## ## ## ## ## ## ## -----------------------
4
+ ---------------------- ## ## ## ## ## ###### -----------------------
5
+ ---------------------- ## ## ## ## ## ## -----------------------
6
+ ---------------------- ###### ##### ##### ## -----------------------
7
+ ---------------------- -----------------------
8
+ ----------------------- Lua Object-Oriented Programming ------------------------
9
+ --------------------------------------------------------------------------------
10
+ -- Project: LOOP - Lua Object-Oriented Programming --
11
+ -- Release: 2.3 beta --
12
+ -- Title : Component Model with Dynamically Adaptable Containers --
13
+ -- Author : Renato Maia <maia@inf.puc-rio.br> --
14
+ --------------------------------------------------------------------------------
15
+ -- Exported API: --
16
+ -- Template --
17
+ -- factoryof(component) --
18
+ -- templateof(factory|component) --
19
+ -- ports(template) --
20
+ -- segmentof(portname, component) --
21
+ -- addport(template|factory|component, portname, porttype [, portimpl]) --
22
+ -- removeport(template|factory|component, portname) --
23
+ --------------------------------------------------------------------------------
24
+
25
+ local next = next
26
+ local rawget = rawget
27
+ local select = select
28
+
29
+ local oo = require "loop.cached"
30
+ local base = require "loop.component.contained"
31
+
32
+ module "loop.component.dynamic"
33
+
34
+ --------------------------------------------------------------------------------
35
+
36
+ local WeakTable = oo.class{ __mode = "k" }
37
+
38
+ --------------------------------------------------------------------------------
39
+
40
+ local DynamicPort = oo.class()
41
+
42
+ function DynamicPort:__call(state, name, ...)
43
+ if self.class then
44
+ state[name] = self.class(state[name], state.__component)
45
+ end
46
+ return self.port(state, name, ...)
47
+ end
48
+
49
+ function DynamicPort:__tostring()
50
+ return self.name
51
+ end
52
+
53
+ --------------------------------------------------------------------------------
54
+
55
+ local InternalState = oo.class()
56
+
57
+ function InternalState:__index(name)
58
+ self = self.__container
59
+ local state = self.__state
60
+ local port, manager = state[name], self[name]
61
+ if manager == nil then
62
+ local factory = state.__factory
63
+ local class = factory[name]
64
+ if oo.classof(class) == DynamicPort then
65
+ local context = self.__internal
66
+ self[class] = class(state, class, context)
67
+ port, manager = state[class], self[class]
68
+ factory:__setcontext(port, context)
69
+ end
70
+ end
71
+ return port, manager
72
+ end
73
+
74
+ function InternalState:__newindex(name, value)
75
+ self = self.__container
76
+ local state = self.__state
77
+ local manager = self[name]
78
+ if manager == nil then
79
+ local factory = state.__factory
80
+ local class = factory[name]
81
+ if oo.classof(class) == DynamicPort then
82
+ local context = self.__internal
83
+ self[class] = class(state, class, context)
84
+ manager = self[class]
85
+ factory:__setcontext(state[class], context)
86
+ end
87
+ end
88
+ if manager and manager.__bind then
89
+ manager:__bind(value)
90
+ elseif manager ~= nil then
91
+ state[name] = value
92
+ else
93
+ state.__component[name] = value
94
+ end
95
+ end
96
+
97
+ --------------------------------------------------------------------------------
98
+
99
+ local ExternalState = oo.class({}, InternalState)
100
+
101
+ function ExternalState:__index(name)
102
+ local port, manager = oo.superclass(ExternalState).__index(self, name)
103
+ if port and manager then
104
+ return rawget(manager, "__external") or manager
105
+ else
106
+ local component = self.__container.__state.__component
107
+ return base.delegate(port or component[name], component)
108
+ end
109
+ end
110
+
111
+ --------------------------------------------------------------------------------
112
+
113
+ BaseTemplate = oo.class({}, base.BaseTemplate)
114
+
115
+ function BaseTemplate:__container(comp)
116
+ local container = WeakTable(base.BaseTemplate.__container(self, comp))
117
+ container.__state = WeakTable(container.__state)
118
+ container.__internal = InternalState{ __container = container }
119
+ container.__external = ExternalState{ __container = container }
120
+ return container
121
+ end
122
+
123
+ function Template(template, ...)
124
+ return oo.class(template, BaseTemplate, ...)
125
+ end
126
+
127
+ --------------------------------------------------------------------------------
128
+
129
+ factoryof = base.factoryof
130
+ templateof = base.templateof
131
+
132
+ local function portiterator(container, name)
133
+ local factory = container.__state.__factory
134
+ local port = factory[name]
135
+ if oo.classof(port) == DynamicPort then
136
+ name = port
137
+ end
138
+ repeat
139
+ name = next(container, name)
140
+ if name == nil then
141
+ return nil
142
+ elseif oo.classof(name) == DynamicPort then
143
+ return name.name, name.port
144
+ end
145
+ until name:find("^%a[%w_]*$")
146
+ return name, oo.classof(factory)[name]
147
+ end
148
+
149
+ function ports(component)
150
+ local container = component.__container
151
+ if container
152
+ then return portiterator, container
153
+ else return base.port(component)
154
+ end
155
+ end
156
+
157
+ function segmentof(comp, name)
158
+ local state = comp.container.__state
159
+ local port = state.__factory[name]
160
+ if oo.classof(port) == DynamicPort then
161
+ name = port
162
+ end
163
+ return state[port]
164
+ end
165
+
166
+ --------------------------------------------------------------------------------
167
+
168
+ function addport(scope, name, port, class)
169
+ if oo.isclass(scope) or oo.instanceof(scope, BaseTemplate) then
170
+ scope[name] = DynamicPort{
171
+ name = name,
172
+ port = port,
173
+ class = class,
174
+ }
175
+ else
176
+ base.addport(scope, name, port, class)
177
+ end
178
+ end
179
+
180
+ function removeport(scope, name)
181
+ if oo.isclass(scope) or oo.instanceof(scope, BaseTemplate) then
182
+ scope[name] = nil
183
+ else
184
+ base.removeport(scope, name)
185
+ end
186
+ end
187
+
188
+ --[[----------------------------------------------------------------------------
189
+ MyCompTemplate = comp.Template{
190
+ [<portname>] = <PortClass>,
191
+ [<portname>] = <PortClass>,
192
+ [<portname>] = <PortClass>,
193
+ }
194
+
195
+ MyContainer = WeakKeyTable{
196
+ __external = Handler{ <container> },
197
+ __internal = Context{ <container> },
198
+ __state = WeakKeyTable{
199
+ <componentimpl>,
200
+ [<portname>] = <portimpl>,
201
+ [<portname>] = <portimpl>,
202
+ [<dynaport>] = <portimpl>,
203
+ },
204
+ __factory = {
205
+ [<portname>] = <portclass>,
206
+ [<portname>] = <portclass>,
207
+ [<portname>] = <dynaport>,
208
+ },
209
+ [<portname>] = <portmanager>,
210
+ [<portname>] = <portmanager>,
211
+ [<dynaport>] = <portmanager>,
212
+ }
213
+
214
+ EMPTY Internal Self | EMPTY Internal Self
215
+ Facet nil wrapper | Facet nil nil
216
+ Receptacle nil wrapper | Receptacle nil nil
217
+ Multiple multiple wrapper | Multiple multiple nil
218
+ |
219
+ FILLED Internal Self | FILLED Internal Self
220
+ Facet port wrapper | Facet port nil
221
+ Receptacle wrapper wrapper | Receptacle port nil
222
+ Multiple multiple wrapper | Multiple multiple nil
223
+ ----------------------------------------------------------------------------]]--
@@ -0,0 +1,354 @@
1
+ --------------------------------------------------------------------------------
2
+ ---------------------- ## ##### ##### ###### -----------------------
3
+ ---------------------- ## ## ## ## ## ## ## -----------------------
4
+ ---------------------- ## ## ## ## ## ###### -----------------------
5
+ ---------------------- ## ## ## ## ## ## -----------------------
6
+ ---------------------- ###### ##### ##### ## -----------------------
7
+ ---------------------- -----------------------
8
+ ----------------------- Lua Object-Oriented Programming ------------------------
9
+ --------------------------------------------------------------------------------
10
+ -- Project: LOOP - Lua Object-Oriented Programming --
11
+ -- Release: 2.3 beta --
12
+ -- Title : Port Model with Interception Support --
13
+ -- Author : Renato Maia <maia@inf.puc-rio.br> --
14
+ --------------------------------------------------------------------------------
15
+ -- Exported API: --
16
+ -- Facet --
17
+ -- Receptacle --
18
+ -- ListReceptacle --
19
+ -- HashReceptacle --
20
+ -- SetReceptacle --
21
+ -- intercept(template|factory|comp, portname, event, interceptor) --
22
+ --------------------------------------------------------------------------------
23
+
24
+ local getmetatable = getmetatable
25
+ local pairs = pairs
26
+ local rawget = rawget
27
+ local rawset = rawset
28
+ local tostring = tostring
29
+ local type = type
30
+
31
+ local ObjectCache = require "loop.collection.ObjectCache"
32
+ local oo = require "loop.cached"
33
+ local base = require "loop.component.base"
34
+
35
+ module "loop.component.intercepted"
36
+
37
+ --------------------------------------------------------------------------------
38
+
39
+ local function doafter(iceptor, request, method, ...)
40
+ local operation = iceptor.after
41
+ if operation then
42
+ if request.cancel
43
+ then return operation(iceptor, request, ...)
44
+ else return operation(iceptor, request, method(...))
45
+ end
46
+ else
47
+ if request.cancel
48
+ then return ...
49
+ else return method(...)
50
+ end
51
+ end
52
+ end
53
+
54
+ local function dobefore(iceptor, request, method, ...)
55
+ local operation = iceptor.before
56
+ if operation
57
+ then return doafter(iceptor, request, method, operation(iceptor, request, ...))
58
+ else return doafter(iceptor, request, method, ...)
59
+ end
60
+ end
61
+
62
+ --------------------------------------------------------------------------------
63
+
64
+ Wrapper = oo.class()
65
+
66
+ function Wrapper:__init(object)
67
+ local name = object.__name
68
+ object.__init = false
69
+ object.__methodkey = " method"..name
70
+ object.__indexkey = " index"..name
71
+ object.__newindexkey = " newindex"..name
72
+ object.__callkey = " call"..name
73
+ return oo.rawnew(self, object)
74
+ end
75
+
76
+ MethodCache = ObjectCache()
77
+ function MethodCache:retrieve(method)
78
+ return function(self, ...)
79
+ local object = self:__get()
80
+ local iceptor = rawget(self, " method") or self.__factory[self.__methodkey]
81
+ if iceptor then
82
+ local request = {
83
+ context = self.__context,
84
+ port = self.__name,
85
+ object = object,
86
+ method = method,
87
+ event = "method",
88
+ }
89
+ return dobefore(iceptor, request, method, object, ...)
90
+ end
91
+ return method(object, ...)
92
+ end
93
+ end
94
+
95
+ local function getfield(table, field)
96
+ return table[field]
97
+ end
98
+ function Wrapper:__index(field)
99
+ -- NOTE: retrieve class members first
100
+ local class = oo.classof(self)
101
+ if class[field] then return class[field] end
102
+
103
+ local object = self:__get()
104
+ local factory = self.__factory
105
+ local iceptor = rawget(self, " index") or factory[self.__indexkey]
106
+
107
+ local value
108
+ if iceptor then
109
+ local request = {
110
+ context = self.__context,
111
+ port = self.__name,
112
+ object = object,
113
+ field = field,
114
+ event = "index",
115
+ }
116
+ value = dobefore(iceptor, request, getfield, object, field)
117
+ else
118
+ value = object[field]
119
+ end
120
+
121
+ if type(value) == "function" then
122
+ value = MethodCache[value]
123
+ end
124
+
125
+ return value
126
+ end
127
+
128
+ local function setfield(table, field, value)
129
+ table[field] = value
130
+ end
131
+ function Wrapper:__newindex(field, value)
132
+ local object = self:__get()
133
+ local factory = self.__factory
134
+ local interceptor = rawget(self, " newindex") or factory[self.__newindex]
135
+ if interceptor then
136
+ local request = {
137
+ context = self.__context,
138
+ port = self.__name,
139
+ object = object,
140
+ field = field,
141
+ event = "newindex",
142
+ }
143
+ dobefore(iceptor, request, setfield, object, field, value)
144
+ else
145
+ object[field] = value
146
+ end
147
+ end
148
+
149
+ function Wrapper:__call(...)
150
+ local object = self:__get()
151
+ local factory = self.__factory
152
+ local iceptor = rawget(self, " call") or factory[self.__callkey]
153
+ if iceptor then
154
+ local request = {
155
+ context = self.__context,
156
+ port = self.__name,
157
+ object = object,
158
+ event = "call",
159
+ }
160
+ return dobefore(iceptor, request, object, ...)
161
+ else
162
+ return object(...)
163
+ end
164
+ end
165
+
166
+ function Wrapper:__intercept(event, iceptor)
167
+ rawset(self, " "..event, iceptor)
168
+ end
169
+
170
+ function intercept(scope, port, event, iceptor)
171
+ local container = rawget(scope, "__container")
172
+ local wrapper = container and container[port]
173
+ if oo.instanceof(wrapper, Wrapper)
174
+ then rawset(wrapper, " "..event, iceptor)
175
+ else scope[" "..event..port] = iceptor
176
+ end
177
+ end
178
+
179
+ --[[----------------------------------------------------------------------------
180
+
181
+ -- Intercept at all ports of all components
182
+ loop.component.intercepted.Wrapper:__intercept(event, iceptor)
183
+ -- Intercept all facets of all components
184
+ loop.component.intercepted.Facet:__intercept(event, iceptor)
185
+ -- Intercept a particular port of a component type
186
+ loop.component.intercepted.intercept(MyCompType, "MyPort", event, iceptor)
187
+ -- Intercept a particular port of a component implementation
188
+ loop.component.intercepted.intercept(MyCompFactory, "MyPort", event, iceptor)
189
+ -- Intercept a particular port of a component instance
190
+ loop.component.intercepted.intercept(MyComponent, "MyPort", event, iceptor)
191
+
192
+ ----------------------------------------------------------------------------]]--
193
+
194
+ Facet = oo.class({}, Wrapper)
195
+
196
+ function Facet:__init(state, key, context)
197
+ local wrapper = Wrapper.__init(self, {
198
+ __state = state,
199
+ __context = context,
200
+ __key = key,
201
+ __name = tostring(key),
202
+ __factory = state.__factory,
203
+ })
204
+ wrapper:__bind(state[key] or state.__component[key] or state.__component)
205
+ return wrapper
206
+ end
207
+
208
+ function Facet:__bind(port)
209
+ self.__state[self.__key] = port
210
+ end
211
+
212
+ function Facet:__get()
213
+ return self.__state[self.__key]
214
+ end
215
+
216
+ --------------------------------------------------------------------------------
217
+
218
+ Receptacle = oo.class({}, Wrapper)
219
+
220
+ function Receptacle:__init(state, key, context)
221
+ local wrapper = Wrapper.__init(self, {
222
+ __state = state,
223
+ __context = context,
224
+ __key = key,
225
+ __name = tostring(key),
226
+ __factory = state.__factory,
227
+ })
228
+ wrapper:__bind(state[key])
229
+ return wrapper
230
+ end
231
+
232
+ function Receptacle:__bind(port)
233
+ rawset(self, "__external", port)
234
+ self.__state[self.__key] = port and self
235
+ end
236
+
237
+ function Receptacle:__unbind()
238
+ rawset(self, "__external", nil)
239
+ self.__state[self.__key] = nil
240
+ end
241
+
242
+ function Receptacle:__get()
243
+ return rawget(self, "__external")
244
+ end
245
+
246
+ local function iterator(self, done)
247
+ if not done then return 1, self:__get() end
248
+ end
249
+ function Receptacle:__all()
250
+ return iterator, self
251
+ end
252
+
253
+ Receptacle.__hasany = Receptacle.__get
254
+
255
+ --------------------------------------------------------------------------------
256
+
257
+ local ReceptacleWrapper = oo.class()
258
+
259
+ function ReceptacleWrapper:__init(state, key, context)
260
+ self = oo.rawnew(self, state[key])
261
+
262
+ local connections
263
+ for key, port in self.__receptacle:__all() do
264
+ connections = {}
265
+ for key, port in self.__receptacle:__all() do
266
+ connections[key] = port
267
+ end
268
+ break
269
+ end
270
+
271
+ rawset(self, "__new", oo.class(Wrapper:__init{
272
+ __get = Receptacle.__get,
273
+ __state = state,
274
+ __context = context,
275
+ __key = key,
276
+ __name = tostring(key),
277
+ __factory = state.__factory,
278
+ }, Wrapper))
279
+
280
+ if connections then
281
+ for key, port in pairs(connections) do
282
+ self.__receptacle:__unbind(key)
283
+ self:__bind(port, key)
284
+ end
285
+ end
286
+
287
+ return self
288
+ end
289
+
290
+ function ReceptacleWrapper:__index(key)
291
+ return getmetatable(self)[key] or self:__get(key)
292
+ end
293
+
294
+ function ReceptacleWrapper:__newindex(key, value)
295
+ if value == nil
296
+ then self:__unbind(key)
297
+ else self:__bind(value, key)
298
+ end
299
+ end
300
+
301
+ function ReceptacleWrapper:__bind(port, key)
302
+ return self.__receptacle:__bind(self.__new{ __external = port }, key)
303
+ end
304
+
305
+ function ReceptacleWrapper:__unbind(key)
306
+ return rawget(self.__receptacle:__unbind(key), "__external")
307
+ end
308
+
309
+ function ReceptacleWrapper:__get(key)
310
+ local element = self.__receptacle:__get(key)
311
+ if element then return rawget(element, "__external") end
312
+ end
313
+
314
+ function ReceptacleWrapper:__all()
315
+ local iterator, state, key = self.__receptacle:__all()
316
+ local element
317
+ return function(state, key)
318
+ key, element = iterator(state, key)
319
+ if key and element then return key, rawget(element, "__external") end
320
+ end, state, key
321
+ end
322
+
323
+ function ReceptacleWrapper:__intercept(interceptor, event, field)
324
+ return self.__new:__intercept(interceptor, event, field)
325
+ end
326
+
327
+ --------------------------------------------------------------------------------
328
+
329
+ MultipleReceptacle = oo.class()
330
+
331
+ function MultipleReceptacle:__init(segments, name, context)
332
+ segments[name] = { __receptacle = oo.rawnew(self, segments[name]) }
333
+ return ReceptacleWrapper(segments, name, context)
334
+ end
335
+
336
+ --------------------------------------------------------------------------------
337
+
338
+ ListReceptacle = oo.class({}, MultipleReceptacle, base.ListReceptacle)
339
+
340
+ --------------------------------------------------------------------------------
341
+
342
+ HashReceptacle = oo.class({}, MultipleReceptacle, base.HashReceptacle)
343
+
344
+ --------------------------------------------------------------------------------
345
+
346
+ SetReceptacle = oo.class({}, MultipleReceptacle, base.SetReceptacle)
347
+
348
+ --------------------------------------------------------------------------------
349
+
350
+ _M[Facet ] = "Facet"
351
+ _M[Receptacle ] = "Receptacle"
352
+ _M[ListReceptacle] = "ListReceptacle"
353
+ _M[HashReceptacle] = "HashReceptacle"
354
+ _M[SetReceptacle ] = "SetReceptacle"