From 74c7a160da34897ebdf18aaff02b8c9b65809949 Mon Sep 17 00:00:00 2001 From: Alexander Pickering Date: Mon, 24 Oct 2016 12:12:19 -0400 Subject: Various other updates and bugfixes --- gamemode/shared.lua | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'gamemode/shared.lua') 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 -- cgit v1.2.3-70-g09d2