Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/torch/cwrap.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Grewe <dominikg@google.com>2015-01-09 20:19:12 +0300
committerDominik Grewe <dominikg@google.com>2015-01-09 20:19:12 +0300
commit48bbfeeb65d46160370e4ee6ff2d551543eec562 (patch)
tree55a8dc50479a9f167167c8c585411ede14f0ead5
parent2ea835522b2a57c81729bd95d4cfc4c5f63be3d9 (diff)
Add default arguments to CInterface.
A default argument allows a user to specify one or more arguments that are passed to each function wrapped by the interface before any other arguments are passed. A default argument is provided by passing a function that, given a variable name, declares and initializes the argument.
-rw-r--r--cinterface.lua14
1 files changed, 14 insertions, 0 deletions
diff --git a/cinterface.lua b/cinterface.lua
index d6c26bb..e8678cc 100644
--- a/cinterface.lua
+++ b/cinterface.lua
@@ -4,6 +4,7 @@ function CInterface.new()
self = {}
self.txt = {}
self.registry = {}
+ self.defaultArguments = {}
setmetatable(self, {__index=CInterface})
return self
end
@@ -16,6 +17,10 @@ function CInterface:print(str)
table.insert(self.txt, str)
end
+function CInterface:registerDefaultArgument(code)
+ table.insert(self.defaultArguments, code)
+end
+
function CInterface:wrap(luaname, ...)
local txt = self.txt
local varargs = {...}
@@ -29,6 +34,10 @@ function CInterface:wrap(luaname, ...)
table.insert(txt, "{")
table.insert(txt, "int narg = lua_gettop(L);")
+ for i, defaultArgCode in ipairs(self.defaultArguments) do
+ table.insert(txt, defaultArgCode(string.format("default_arg%d", i)))
+ end
+
if #varargs == 2 then
local cfuncname = varargs[1]
local args = varargs[2]
@@ -104,6 +113,7 @@ end
function CInterface:clearhistory()
self.txt = {}
self.registry = {}
+ self.defaultArguments = {}
end
function CInterface:tostring()
@@ -277,6 +287,10 @@ end
function CInterface:__writecall(txt, args, cfuncname, cargs, argcreturned)
local argtypes = self.argtypes
+ for i = 1, #self.defaultArguments do
+ table.insert(cargs, i, string.format('default_arg%d', i))
+ end
+
for _,arg in ipairs(args) do
tableinsertcheck(txt, arg:precall())
end