#include <lbp_function.h>

Public Member Functions

 LuaFunctionDefinition (const std::string &name="")
 
 LuaFunctionDefinition (const LuaFunctionDefinition &rSrc)
 
virtual ~LuaFunctionDefinition (void)
 
void Clear (void)
 
const std::string & LuaCode (void) const
 
void LuaCode (const std::string &rCode)
 
void DefaultL (LuaState *pL)
 
LuaStateDefaultL (void) const
 
std::string SyntaxCheck (void)
 
std::string Evaluate (LuaState *pL=NULL)
 
void Install (LuaState *pL=NULL) const
 
void Install (lua_State *pLL) const
 
- Public Member Functions inherited from faudes::FunctionDefinition
 FunctionDefinition (const std::string &name="")
 
 FunctionDefinition (const FunctionDefinition &rSrc)
 
virtual ~FunctionDefinition ()
 
virtual void ClearVariants (void)
 
const FunctionPrototype (void) const
 
FunctionNewFunction () const
 
int VariantsSize (void) const
 
bool ExistsVariant (const std::string &varname) const
 
int VariantIndex (const std::string &rName) const
 
const SignatureVariant (const std::string &rName) const
 
const SignatureVariant (int n) const
 
virtual void AppendVariant (const Signature &pVar)
 
- Public Member Functions inherited from faudes::Documentation
 Documentation (void)
 
 Documentation (const Documentation &rOther)
 
virtual ~Documentation (void)
 
const std::string & Name (void) const
 
const std::string & PlugIn (void) const
 
const std::string & CType (void) const
 
const std::string & TextDoc (void) const
 
const std::string & HtmlDoc (void) const
 
const std::string & Keywords (void) const
 
std::string MatchKeyword (const std::string &rPattern) const
 
int KeywordsSize (void) const
 
std::string KeywordAt (int pos) const
 
bool AutoRegistered (void) const
 
bool ApplicationRegistered (void) const
 
virtual void MergeDocumentation (TokenReader &rTr)
 
Typeoperator= (const Type &rSrc)
 
bool operator== (const Type &rOther) const
 
bool operator!= (const Type &rOther) const
 
- Public Member Functions inherited from faudes::Type
 Type (void)
 
 Type (const Type &rType)
 
virtual ~Type (void)
 
virtual TypeNew (void) const
 
virtual TypeCopy (void) const
 
virtual const TypeCast (const Type *pOther) const
 
virtual TypeAssign (const Type &rSrc)
 
Typeoperator= (const Type &rSrc)
 
virtual bool Equal (const Type &rOther) const
 
bool operator== (const Type &rOther) const
 
bool operator!= (const Type &rOther) const
 
virtual const std::string & TypeName (void) const
 
void Write (const Type *pContext=0) const
 
void Write (const std::string &pFileName, const std::string &rLabel="", const Type *pContext=0, std::ios::openmode openmode=std::ios::out|std::ios::trunc) const
 
void Write (const std::string &pFileName, std::ios::openmode openmode) const
 
void Write (TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
 
virtual void XWrite (const std::string &pFileName, const std::string &rLabel="", const Type *pContext=0) const
 
void XWrite (const Type *pContext=0) const
 
void XWrite (TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
 
std::string ToString (const std::string &rLabel="", const Type *pContext=0) const
 
std::string ToText (const std::string &rLabel="", const Type *pContext=0) const
 
void DWrite (const Type *pContext=0) const
 
void DWrite (const std::string &pFileName, const std::string &rLabel="", const Type *pContext=0, std::ios::openmode openmode=std::ios::out|std::ios::trunc) const
 
void DWrite (TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
 
void SWrite (TokenWriter &rTw) const
 
void SWrite (void) const
 
std::string ToSText (void) const
 
void Read (const std::string &rFileName, const std::string &rLabel="", const Type *pContext=0)
 
void FromString (const std::string &rString, const std::string &rLabel="", const Type *pContext=0)
 
void Read (TokenReader &rTr, const std::string &rLabel="", const Type *pContext=0)
 

Static Public Member Functions

static void Register (const std::string &rFilename)
 
- Static Public Member Functions inherited from faudes::FunctionDefinition
template<class T >
static FunctionDefinitionConstructor (const std::string &rFunctName="")
 
template<class T >
static FunctionDefinitionFromFile (const std::string &rFileName)
 

Protected Member Functions

virtual void DoAssign (const LuaFunctionDefinition &rSrc)
 
virtual bool DoEqual (const LuaFunctionDefinition &rOther) const
 
virtual void DoRead (TokenReader &rTr, const std::string &rLabel="", const Type *pContext=0)
 
virtual void DoReadCore (TokenReader &rTr)
 
virtual void DoWrite (TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
 
virtual void DoWriteCore (TokenWriter &rTw) const
 
virtual void Prototype (Function *pFunc)
 
- Protected Member Functions inherited from faudes::FunctionDefinition
void DoAssign (const FunctionDefinition &rSrc)
 
bool DoEqual (const FunctionDefinition &rOther) const
 
- Protected Member Functions inherited from faudes::Documentation
void Name (const std::string &name)
 
void PlugIn (const std::string &plugin)
 
void CType (const std::string &name)
 
void TextDoc (const std::string &textdoc)
 
void AutoRegistered (bool flag)
 
void ApplicationRegistered (bool flag)
 
void HtmlDoc (const std::string &fname)
 
void AddKeyword (const std::string &rKeyword)
 
void DoAssign (const Documentation &rSrc)
 
bool DoEqual (const Documentation &rOther) const
 
- Protected Member Functions inherited from faudes::Type
void DoAssign (const Type &rSrc)
 
bool DoEqual (const Type &rOther) const
 
virtual void DoXWrite (TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
 
virtual void DoDWrite (TokenWriter &rTw, const std::string &rLabel="", const Type *pContext=0) const
 
virtual void DoSWrite (TokenWriter &rTw) const
 
virtual const TypeDefinitionTypeDefinitionp (void) const
 
virtual Token XBeginTag (const std::string &rLabel="", const std::string &rFallbackLabel="") const
 

Protected Attributes

LuaFunctionpLuaFunction
 
std::string mLuaCode
 
std::string mLuaFile
 
LuaStatepDefaultL
 
- Protected Attributes inherited from faudes::FunctionDefinition
FunctionmpFunction
 
std::vector< faudes::SignaturemVariants
 
std::map< std::string, int > mVariantIndexMap
 
- Protected Attributes inherited from faudes::Documentation
std::string mName
 
std::string mPlugIn
 
std::string mCType
 
std::string mTextDoc
 
std::string mHtmlDoc
 
std::string mKeywords
 
bool mAutoRegistered
 
bool mApplicationRegistered
 

Additional Inherited Members

- Static Protected Attributes inherited from faudes::Documentation
static const char mDelim = ';'
 

Detailed Description

A LuaFunctionDefinition is derived from FunctionDefinition to define a faudes-function by a Lua script. It has the Lua code as an additional member variable and uses a LuaFunction as a prototype object. In particular, LuaFunctionDefinitions are allways valid in the sense that hey have a prototype. The LuaFunction object implements DoTypeCheck and DoExecute to run the specifed Lua code. Thus, a LuaFunction can be tranparently accessed via the run-time interface and bahves like any other registered faudes function.

Alternatively, you can use the Install() method to install a LuaFunctionDefinition to a LuaState. Then, the function can be accessed by the Lua interpreter. Install() will generate code to dispatch the function variants with the same semantics as the SWIG generated interface for other faudes functions. Again, integeration is transparent from the perspective of the Lua interpreter.

The token io format is demonstrated by the following example:

<LuaFunctionDefinition name="LuaExtension::LargeGenerator">
Construct a generator by random.
<Keywords> "luaextension" "example" </Keywords>
<VariantSignatures>
<Signature name="LargeGen(#Q,#Sigma,GRes)">
<Parameter name="SizeQ" ftype="Integer" access="In"/>
<Parameter name="SizeSigma" ftype="Integer" access="In"/>
<Parameter name="Res" ftype="Generator" access="Out" />
</Signature>
</VariantSignatures>
<[CDATA[
-- Extension reports on loading
print('loading luaextension "LargeGenerator"')
-- Define my function (mangled version of variant name)
function faudes.LargeGen_Q_Sigma_GRes(qn,sn,gen)
-- Function reports on execution
print(string.format('LargeGen(...): qn=%d sn=%d',qn,sn))
-- Exeution code
gen:Clear()
for i=1,qn do
gen:InsState(i)
end
for i=1,sn do
gen:InsEvent(string.format('ev_%d',i))
end
-- Done
return
-- End of function definition
end
-- Extension reports on loading
print('loading luaextension: done')
]]>
const std::string & Keywords(void) const
Definition: cfl_types.cpp:402
LuaFunctionDefinition(const std::string &name="")
const std::string & LuaCode(void) const

Restrictions and conventions:

  • Type-checking is done via the Cast() function of the faudes Type interface. As a consequence, you may only use types that are registered with the run-time-interface.
  • On execution, the LuaFunction instance has to locate the respective function in the supplied lua code. In order to allow for multiple variants, the convention is to have one lua function each with the name of the corresponding variant. Since variant names may contain funny characters, name matching is performed after so called mangeling: any sequence of non-alpha-numerics is replaced by a single "_", a trailing "_" is dropped. E.g. the variant res=a+b matches the Lua function res_a_b.
  • Parameters other than elementary (integer, boolean and string) are passed to the Lua function by reference. However, Lua will consistently interpret the reference itself as a parameter value. Thus, to assign a value to an access="Out" or access="InOut" parameter, you must use the assigment memberfunction Assign (as opposed to the assignment operator "=").
  • Elementary types (i.e. integers, booleans and strings) are passed to the Lua function by value. Thus, it would be pointless to have an elementary typed parameter with access attribute other than access="In". In order to implement elementary typed return values, the respective Lua function must return the corresponding values by an approriate return statement. The signature should indicate this by the attribute creturn="true". The current implementation will automatically imply creturn="true" for any access="Out" or access="InOut".
  • Since luafaudes has no concept of const references, it is the responsability of the script programer to respect parameter access attributes.
  • When using Install() to install the function to a LuaState, a single wrapper function will be defined to dispatch variants. By convention, this function is located in faudes.name_of_fdef, where name_of_fdef is the name of the respective LuaFunctionDefinition.

Definition at line 140 of file lbp_function.h.

Constructor & Destructor Documentation

◆ LuaFunctionDefinition() [1/2]

faudes::LuaFunctionDefinition::LuaFunctionDefinition ( const std::string &  name = "")

Constructor.

In contrast to the std FunctionDefinition, the default constructor sets up a valid lua function definition with a newly created LuaFunction as prototype. Of course, you will need to set the signatures and the lua code to obtain an operational function.

Definition at line 180 of file lbp_function.cpp.

◆ LuaFunctionDefinition() [2/2]

faudes::LuaFunctionDefinition::LuaFunctionDefinition ( const LuaFunctionDefinition rSrc)

Copy constructor

Definition at line 191 of file lbp_function.cpp.

◆ ~LuaFunctionDefinition()

virtual faudes::LuaFunctionDefinition::~LuaFunctionDefinition ( void  )
inlinevirtual

Destructor

Definition at line 166 of file lbp_function.h.

Member Function Documentation

◆ Clear()

void faudes::LuaFunctionDefinition::Clear ( void  )
virtual

Clear documentation-data, signature and script (keep prototype)

Reimplemented from faudes::FunctionDefinition.

Definition at line 226 of file lbp_function.cpp.

◆ DefaultL() [1/2]

void faudes::LuaFunctionDefinition::DefaultL ( LuaState pL)

Set default lua state.

Sets the default lua state on which functions that refer to this function definition will use for execution. If set to NULL (e.g. on consruction), the global state is used. However, the function object itself may overwrite the default.

Parameters
pLLua state

Definition at line 260 of file lbp_function.cpp.

◆ DefaultL() [2/2]

LuaState * faudes::LuaFunctionDefinition::DefaultL ( void  ) const

Get default lua state.

Returns
Lua state

Definition at line 254 of file lbp_function.cpp.

◆ DoAssign()

void faudes::LuaFunctionDefinition::DoAssign ( const LuaFunctionDefinition rSrc)
protectedvirtual

Std faudes type interface: assignment.

Parameters
rSrcSource to copy from
Returns
Reference to this object.

Definition at line 200 of file lbp_function.cpp.

◆ DoEqual()

bool faudes::LuaFunctionDefinition::DoEqual ( const LuaFunctionDefinition rOther) const
protectedvirtual

Std faudes type interface: test equality

Parameters
rOtherOther object to compare with.
Returns
True on match.

Definition at line 216 of file lbp_function.cpp.

◆ DoRead()

virtual void faudes::LuaFunctionDefinition::DoRead ( TokenReader rTr,
const std::string &  rLabel = "",
const Type pContext = 0 
)
protectedvirtual

Read configuration data of this object from TokenReader. Actual reading is done by DoReadCore.

The section defaults to "LuaFunctionDefinition", context ignored.

Parameters
rTrTokenReader to read from
rLabelSection to read
pContextRead context to provide contextual information (ignored)
Exceptions
Exception
  • Token mismatch (id 50, 51, 52)
  • IO error (id 1)

Reimplemented from faudes::FunctionDefinition.

◆ DoReadCore()

virtual void faudes::LuaFunctionDefinition::DoReadCore ( TokenReader rTr)
protectedvirtual

Read configuration data of this object from TokenReader.

This method reads members only, it does not read the section.

Parameters
rTrTokenReader to read from
Exceptions
Exception
  • Token mismatch (id 50, 51, 52)
  • IO error (id 1)

Reimplemented from faudes::FunctionDefinition.

◆ DoWrite()

virtual void faudes::LuaFunctionDefinition::DoWrite ( TokenWriter rTw,
const std::string &  rLabel = "",
const Type pContext = 0 
) const
protectedvirtual

Write configuration data of this object to TokenWriter.

The section defaults to "LuaFunctionDefinition", context ignored.

Parameters
rTwReference to TokenWriter
rLabelLabel of section to write
pContextWrite context to provide contextual information
Exceptions
Exception
  • IO errors (id 2)

Reimplemented from faudes::FunctionDefinition.

◆ DoWriteCore()

virtual void faudes::LuaFunctionDefinition::DoWriteCore ( TokenWriter rTw) const
protectedvirtual

Write configuration data of this object to TokenWriter.

This method writes plain member data, the section lables are not written.

Parameters
rTwReference to TokenWriter
Exceptions
Exception
  • IO errors (id 2)

Reimplemented from faudes::FunctionDefinition.

◆ Evaluate()

std::string faudes::LuaFunctionDefinition::Evaluate ( LuaState pL = NULL)

Evaluate lua code.

This routine evaluates the LuaCode literally. This method is used to execute LuaCode that is not part of any particular variant. To execute a particular variant, instantiate a LuaFunction and invoke Execute().

If you pass NULL as destination state, the global state will be used.

Parameters
pLReference to the Lua state
Returns
Error message as string, or empty string on success

Definition at line 303 of file lbp_function.cpp.

◆ Install() [1/2]

void faudes::LuaFunctionDefinition::Install ( lua_State *  pLL) const

Install this function to a Lua state.

Alternative signature for applications that do not use the the LuaState wrapper class. See also Install(LuaState*).

Parameters
pLLReference to the Lua state

Definition at line 326 of file lbp_function.cpp.

◆ Install() [2/2]

void faudes::LuaFunctionDefinition::Install ( LuaState pL = NULL) const

Install this function to a Lua state

This routine installs the Lua code of this function definition to the table "faudes" of the specified Lua state. It also constructs a wrapper function to dispatch signatures and palces this in the table "faudes". Effectively, the resulting Lua state is prepared to execute the Lua function with the same semantics as used for SWIG generated wrappers of C++ functions.

If you pass NULL as destination state, the global state will be used.

Parameters
pLReference to the Lua state

Definition at line 320 of file lbp_function.cpp.

◆ LuaCode() [1/2]

void faudes::LuaFunctionDefinition::LuaCode ( const std::string &  rCode)

Set Lua code

Parameters
rCodeLua code as std string

Definition at line 249 of file lbp_function.cpp.

◆ LuaCode() [2/2]

const std::string & faudes::LuaFunctionDefinition::LuaCode ( void  ) const

Get Lua code

Returns
Lua code as std string

Definition at line 244 of file lbp_function.cpp.

◆ Prototype()

void faudes::LuaFunctionDefinition::Prototype ( Function pFunc)
protectedvirtual

Assign prototype object

Parameters
pFuncFunction instance

Reimplemented from faudes::FunctionDefinition.

Definition at line 236 of file lbp_function.cpp.

◆ Register()

static void faudes::LuaFunctionDefinition::Register ( const std::string &  rFilename)
static

◆ SyntaxCheck()

std::string faudes::LuaFunctionDefinition::SyntaxCheck ( void  )

Syntax check lua code.

This routine instantiates a LuaFunction from this function definition and does all it needs to run the script, except to invoke the any of the variant functions. The reasoning is, that the script may hang and, thus, never return. Errors are indicated returned as an error string.

Returns
Error message as string, or empty string on success

Definition at line 265 of file lbp_function.cpp.

Member Data Documentation

◆ mLuaCode

std::string faudes::LuaFunctionDefinition::mLuaCode
protected

Lua code

Definition at line 390 of file lbp_function.h.

◆ mLuaFile

std::string faudes::LuaFunctionDefinition::mLuaFile
protected

Lua file

Definition at line 393 of file lbp_function.h.

◆ pDefaultL

LuaState* faudes::LuaFunctionDefinition::pDefaultL
protected

Default lua state

Definition at line 396 of file lbp_function.h.

◆ pLuaFunction

LuaFunction* faudes::LuaFunctionDefinition::pLuaFunction
protected

Typed prototype instance

Definition at line 387 of file lbp_function.h.


The documentation for this class was generated from the following files:

libFAUDES 2.33b --- 2025.05.07 --- c++ api documentaion by doxygen