diff options
Diffstat (limited to 'gamemode/shared.lua')
| -rw-r--r-- | gamemode/shared.lua | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/gamemode/shared.lua b/gamemode/shared.lua index c69113f..8f8483f 100644 --- a/gamemode/shared.lua +++ b/gamemode/shared.lua @@ -12,10 +12,52 @@ GM.Email = "apickx@cogarr.org" GM.Website = "cogarr.net" --Some global functions that are helpful +-- printf +-- assertf +-- curry +-- typecheck + +--printf from C function printf(fmt, ...) print(string.format(fmt,...)) end +--Assert with a formated string +function assertf(cond, fmt, ...) + assert(cond,string.format(fmt,...)) +end + +--Curry from lisp, allows you to store variables "in" a function, so you can call it with fewer arguments if you'll be repeating arguments a lot +--Ex: +-- >dbprint = curry(print,"[Debug]") +-- >dbprint("Hello, world!") +-- [Debug] Hello, world! +-- > +function curry(fnc, ...) + local oarg = {...} + return function(...) + return fnc(unpack(oarg),unpack({...})) + end +end + +--Does type checking for functions, use by supplying a table whith the variables and the types they should be +--Ex: +-- >local somefunction(str, tbl, num) +-- >>typecheck({ +-- >> str,"string", +-- >> tbl,"table", +-- >> num,"number" +-- >>}) +-- > +function typecheck(...) + local tbl = {...} + tbl = type(tbl[1]) == "table" and tbl[1] or tbl + for k=1,#tbl,2 do + local t,n = type(tbl[k]),tbl[k+1] + assertf(t == n, "Passed argument of wrong type, should have been %q but was %q",t,n ) + end +end + --Add a thing to report errors to a master server --TODO:Set up a master server to collect errors for correction local olderr = error |
