Class LibFunction
- All Implemented Interfaces:
 com.esotericsoftware.kryo.KryoSerializable
- Direct Known Subclasses:
 BaseLib.getmetatable,BaseLib.rawequal,BaseLib.rawget,BaseLib.rawlen,BaseLib.rawset,BaseLib.setmetatable,BaseLib.tonumber,BaseLib.tostring,BaseLib.type,CoroutineLib.create,CoroutineLib.status,CoroutineLib.wrap,DebugLib.getmetatable,DebugLib.getuservalue,MathLib.random,OneArgFunction,TableLib.concat,ThreeArgFunction,TwoArgFunction,VarArgFunction,ZeroArgFunction
LuaFunction common to Java functions exposed to lua.
 To provide for common implementations in JME and JSE, library functions are typically grouped on one or more library classes and an opcode per library function is defined and used to key the switch to the correct function within the library.
 Since lua functions can be called with too few or too many arguments,
 and there are overloaded LuaValue.call() functions with varying
 number of arguments, a Java function exposed in lua needs to handle  the
 argument fixup when a function is called with a number of arguments
 differs from that expected.
 
To simplify the creation of library functions, there are 5 direct subclasses to handle common cases based on number of argument values and number of return return values.
 To be a Java library that can be loaded via require, it should have
 a public constructor that returns a LuaValue that, when executed,
 initializes the library.
 
For example, the following code will implement a library called "hyperbolic" with two functions, "sinh", and "cosh":
 
 import com.prineside.luaj.LuaValue;
 import com.prineside.luaj.lib.*;
 
 public class hyperbolic extends TwoArgFunction {
	public hyperbolic() {}
	public LuaValue call(LuaValue modname, LuaValue env) {
		LuaValue library = tableOf();
		library.set( "sinh", new sinh() );
		library.set( "cosh", new cosh() );
		env.set( "hyperbolic", library );
		return library;
	}
	static class sinh extends OneArgFunction {
		public LuaValue call(LuaValue x) {
			return LuaValue.valueOf(Math.sinh(x.checkdouble()));
		}
	}
	
	static class cosh extends OneArgFunction {
		public LuaValue call(LuaValue x) {
			return LuaValue.valueOf(Math.cosh(x.checkdouble()));
		}
	}
}
 The default constructor is used to instantiate the library
 in response to require 'hyperbolic' statement,
 provided it is on Java"s class path.
 This instance is then invoked with 2 arguments: the name supplied to require(),
 and the environment for this function.  The library may ignore these, or use
 them to leave side effects in the global environment, for example.
 In the previous example, two functions are created, 'sinh', and 'cosh', and placed
 into a global table called 'hyperbolic' using the supplied 'env' argument.
 To test it, a script such as this can be used:
 
 local t = require('hyperbolic')
 print( 't', t )
 print( 'hyperbolic', hyperbolic )
 for k,v in pairs(t) do
 	print( 'k,v', k,v )
 end
 print( 'sinh(.5)', hyperbolic.sinh(.5) )
 print( 'cosh(.5)', hyperbolic.cosh(.5) )
 
 It should produce something like:
 
 t	table: 3dbbd23f
 hyperbolic	table: 3dbbd23f
 k,v	cosh	function: 3dbbd128
 k,v	sinh	function: 3dbbd242
 sinh(.5)	0.5210953
 cosh(.5)	1.127626
 
 
 See the source code in any of the library functions
 such as BaseLib or TableLib for other examples.
- 
Nested Class Summary
Nested classes/interfaces inherited from class com.prineside.luaj.LuaValue
LuaValue.NillableSerializer, LuaValue.NoneNested classes/interfaces inherited from class com.prineside.luaj.Varargs
Varargs.ArrayVarargs - 
Field Summary
FieldsModifier and TypeFieldDescriptionprotected StringThe common name for this function, useful for debugging.protected intUser-defined opcode to differentiate between instances of the library function class.Fields inherited from class com.prineside.luaj.LuaFunction
s_metatableFields inherited from class com.prineside.luaj.LuaValue
ADD, CALL, CONCAT, DIV, EMPTYSTRING, ENV, EQ, FALSE, INDEX, LE, LEN, LT, METATABLE, MINUSONE, MOD, MODE, MUL, NEWINDEX, NIL, NILLABLE_SERIALIZER, NILS, NONE, NOVALS, ONE, POW, SUB, TBOOLEAN, TFUNCTION, TINT, TLIGHTUSERDATA, TNIL, TNONE, TNUMBER, TOSTRING, TRUE, TSTRING, TTABLE, TTHREAD, TUSERDATA, TVALUE, TYPE_NAMES, UNM, ZERO - 
Constructor Summary
Constructors - 
Method Summary
Modifier and TypeMethodDescriptionprotected com.badlogic.gdx.utils.Array<LibFunction>Bind a set of library functions, with an offsetprotected voidBind a set of library functions.call()Callthiswith 0 arguments, including metatag processing, and return only the first return value.Callthiswith 1 argument, including metatag processing, and return only the first return value.Callthiswith 2 arguments, including metatag processing, and return only the first return value.Callthiswith 3 arguments, including metatag processing, and return only the first return value.Should not return args (must be new varargs)protected static LuaValue[]newupe()Java code generation utility to allocate storage for upvalue, leave it emptyprotected static LuaValue[]Java code generation utility to allocate storage for upvalue, initialize with valueprotected static LuaValue[]newupn()Java code generation utility to allocate storage for upvalue, initialize with nilvoidread(com.esotericsoftware.kryo.Kryo kryo, com.esotericsoftware.kryo.io.Input input) Convert to human readable String for any type.voidwrite(com.esotericsoftware.kryo.Kryo kryo, com.esotericsoftware.kryo.io.Output output) Methods inherited from class com.prineside.luaj.LuaFunction
checkfunction, classnamestub, getmetatable, isfunction, name, optfunction, strvalue, type, typenameMethods inherited from class com.prineside.luaj.LuaValue
add, add, add, and, arg, arg1, argerror, argerror, aritherror, aritherror, arithmt, arithmtwith, assert_, buffer, call, callmt, cBool, cDouble, cFloat, checkboolean, checkclosure, checkdouble, checkglobals, checkint, checkjstring, checklong, checkmetatag, checknotnil, checknumber, checknumber, checkstring, checktable, checkthread, checkuserdata, checkuserdata, cInt, cNcDouble, cNcFloat, cNcInt, cObject, compareerror, compareerror, comparemt, concat, concat, concatmt, concatTo, concatTo, concatTo, cRegObject, cVarargs, cVarargs, cVarargs, cVarargs, cVarargs, cVarargs, cVarargs, cVarargs, div, div, div, divInto, eq, eq_b, eqmtcall, equals, error, get, get, get, gettable, gt, gt, gt, gt_b, gt_b, gt_b, gteq, gteq, gteq, gteq_b, gteq_b, gteq_b, illegal, inext, initupvalue1, invoke, invoke, invoke, invokemethod, invokemethod, invokemethod, invokemethod, isboolean, isclosure, isint, isinttype, islong, isnil, isnumber, isRegObject, isstring, istable, isthread, isuserdata, isuserdata, isvalidkey, len, lenerror, length, listOf, listOf, load, lt, lt, lt, lt_b, lt_b, lt_b, lteq, lteq, lteq, lteq_b, lteq_b, lteq_b, markAsConst, metatableOf, metatag, method, method, method, method, method, method, mod, mod, mod, modFrom, mul, mul, mul, narg, neg, neq, neq_b, next, not, onInvoke, optboolean, optclosure, optdouble, optint, optjstring, optlong, optnumber, optstring, opttable, optthread, optuserdata, optuserdata, optvalue, or, pow, pow, pow, powWith, powWith, presize, raweq, raweq, raweq, raweq, raweq, rawget, rawget, rawget, rawlen, rawset, rawset, rawset, rawset, rawset, rawset, rawset, rawsetlist, set, set, set, set, set, set, set, setmetatable, settable, strcmp, strcmp, strongvalue, sub, sub, sub, subargs, subFrom, subFrom, tableOf, tableOf, tableOf, tableOf, tableOf, tableOf, tailcallOf, testfor_b, toboolean, tobyte, tochar, todouble, tofloat, toint, tolong, tonumber, toshort, tostring, toString, touserdata, touserdata, typerror, unimplemented, userdataOf, userdataOf, valueOf, valueOf, valueOf, valueOf, valueOf, valueOfMethods inherited from class com.prineside.luaj.Varargs
argcheck, checkboolean, checkclosure, checkdouble, checkfunction, checkint, checkjstring, checklong, checknotnil, checknumber, checkstring, checktable, checkthread, checkuserdata, checkuserdata, checkvalue, dealias, eval, isfunction, isnil, isnoneornil, isnumber, isstring, istable, isTailcall, isthread, isuserdata, isvalue, optboolean, optclosure, optdouble, optfunction, optint, optjstring, optlong, optnumber, optstring, opttable, optthread, optuserdata, optuserdata, optvalue, toboolean, tobyte, tochar, todouble, tofloat, toint, tojstring, tolong, toshort, touserdata, touserdata, type 
- 
Field Details
- 
opcode
protected int opcodeUser-defined opcode to differentiate between instances of the library function class.Subclass will typicall switch on this value to provide the specific behavior for each function.
 - 
name
The common name for this function, useful for debugging.Binding functions initialize this to the name to which it is bound.
 
 - 
 - 
Constructor Details
- 
LibFunction
protected LibFunction()Default constructor for use by subclasses 
 - 
 - 
Method Details
- 
write
public void write(com.esotericsoftware.kryo.Kryo kryo, com.esotericsoftware.kryo.io.Output output) - Specified by:
 writein interfacecom.esotericsoftware.kryo.KryoSerializable
 - 
read
public void read(com.esotericsoftware.kryo.Kryo kryo, com.esotericsoftware.kryo.io.Input input) - Specified by:
 readin interfacecom.esotericsoftware.kryo.KryoSerializable
 - 
tojstring
Description copied from class:LuaValueConvert to human readable String for any type.- Overrides:
 tojstringin classLuaFunction- Returns:
 - String for use by human readers based on type.
 - See Also:
 
 - 
bind
Bind a set of library functions.An array of names is provided, and the first name is bound with opcode = 0, second with 1, etc.
- Parameters:
 env- The environment to apply to each bound functionfactory- the Class to instantiate for each bound functionnames- array of String names, one for each function.- See Also:
 
 - 
bind
protected com.badlogic.gdx.utils.Array<LibFunction> bind(LuaValue env, Class<?> factory, String[] names, int firstopcode) Bind a set of library functions, with an offsetAn array of names is provided, and the first name is bound with opcode =
firstopcode, second withfirstopcode+1, etc.- Parameters:
 env- The environment to apply to each bound functionfactory- the Class to instantiate for each bound functionnames- array of String names, one for each function.firstopcode- the first opcode to use- See Also:
 
 - 
newupe
Java code generation utility to allocate storage for upvalue, leave it empty - 
newupn
Java code generation utility to allocate storage for upvalue, initialize with nil - 
newupl
Java code generation utility to allocate storage for upvalue, initialize with value - 
call
Description copied from class:LuaValueCallthiswith 0 arguments, including metatag processing, and return only the first return value.If
thisis aLuaFunction, call it, and return only its first return value, dropping any others. Otherwise, look for theLuaValue.CALLmetatag and call that.If the return value is a
Varargs, only the 1st value will be returned. To get multiple values, useLuaValue.invoke()instead.To call
thisas a method call, useLuaValue.method(LuaValue)instead.- Overrides:
 callin classLuaValue- Returns:
 - First return value 
(this()), orLuaValue.NILif there were none. - See Also:
 
 - 
call
Description copied from class:LuaValueCallthiswith 1 argument, including metatag processing, and return only the first return value.If
thisis aLuaFunction, call it, and return only its first return value, dropping any others. Otherwise, look for theLuaValue.CALLmetatag and call that.If the return value is a
Varargs, only the 1st value will be returned. To get multiple values, useLuaValue.invoke()instead.To call
thisas a method call, useLuaValue.method(LuaValue)instead.- Overrides:
 callin classLuaValue- Parameters:
 a- First argument to supply to the called function- Returns:
 - First return value 
(this(arg)), orLuaValue.NILif there were none. - See Also:
 
 - 
call
Description copied from class:LuaValueCallthiswith 2 arguments, including metatag processing, and return only the first return value.If
thisis aLuaFunction, call it, and return only its first return value, dropping any others. Otherwise, look for theLuaValue.CALLmetatag and call that.If the return value is a
Varargs, only the 1st value will be returned. To get multiple values, useLuaValue.invoke()instead.To call
thisas a method call, useLuaValue.method(LuaValue)instead.- Overrides:
 callin classLuaValue- Parameters:
 a- First argument to supply to the called functionb- Second argument to supply to the called function- Returns:
 - First return value 
(this(arg1,arg2)), orLuaValue.NILif there were none. - See Also:
 
 - 
call
Description copied from class:LuaValueCallthiswith 3 arguments, including metatag processing, and return only the first return value.If
thisis aLuaFunction, call it, and return only its first return value, dropping any others. Otherwise, look for theLuaValue.CALLmetatag and call that.If the return value is a
Varargs, only the 1st value will be returned. To get multiple values, useLuaValue.invoke()instead.To call
thisas a method call, useLuaValue.method(LuaValue)instead.- Overrides:
 callin classLuaValue- Parameters:
 a- First argument to supply to the called functionb- Second argument to supply to the called functionc- Second argument to supply to the called function- Returns:
 - First return value 
(this(arg1,arg2,arg3)), orLuaValue.NILif there were none. - See Also:
 
 - 
call
 - 
invoke
Description copied from class:LuaValueShould not return args (must be new varargs) 
 -