lbp_function.h
Go to the documentation of this file.
1/** @file lbp_function.h luafaudes class to run scripts as rti functions */
2
3/* FAU Discrete Event Systems Library (libfaudes)
4
5Copyright (C) 2010-2025 Thomas Moor
6
7This library is free software; you can redistribute it and/or
8modify it under the terms of the GNU Lesser General Public
9License as published by the Free Software Foundation; either
10version 2.1 of the License, or (at your option) any later version.
11
12This library is distributed in the hope that it will be useful,
13but WITHOUT ANY WARRANTY; without even the implied warranty of
14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15Lesser General Public License for more details.
16
17You should have received a copy of the GNU Lesser General Public
18License along with this library; if not, write to the Free Software
19Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
20
21
22#ifndef FAUDES_MUTE_LUA
23
24#ifndef FAUDES_LBPFUNCTION_H
25#define FAUDES_LBPFUNCTION_H
26
27#include "corefaudes.h"
28
29// forward
30struct lua_State;
31
32namespace faudes{
33
34// forward
35class LuaFunction;
36class LuaState;
37
38/**
39 * A LuaFunctionDefinition is derived from FunctionDefinition to
40 * define a faudes-function by a Lua script. It has
41 * the Lua code as an additional member variable and uses a LuaFunction as a
42 * prototype object. In particular, LuaFunctionDefinitions are allways
43 * valid in the sense that hey have a prototype. The LuaFunction object
44 * implements DoTypeCheck and DoExecute to run the specifed Lua code.
45 * Thus, a LuaFunction can be tranparently accessed via the run-time interface
46 * and bahves like any other registered faudes function.
47 *
48 * Alternatively,
49 * you can use the Install() method to install a LuaFunctionDefinition to
50 * a LuaState. Then, the function can be accessed by the Lua interpreter.
51 * Install() will generate code to dispatch the function variants with the
52 * same semantics as the SWIG generated interface for other faudes functions.
53 * Again, integeration is transparent from the perspective of the Lua interpreter.
54 *
55 *
56 * The token io format is demonstrated by the
57 * following example:
58 *
59 * @code
60 * <LuaFunctionDefinition name="LuaExtension::LargeGenerator">
61 *
62 * <Documentation>
63 * Construct a generator by random.
64 * </Documentation>
65 * <Keywords> "luaextension" "example" </Keywords>
66 *
67 * <VariantSignatures>
68 * <Signature name="LargeGen(#Q,#Sigma,GRes)">
69 * <Parameter name="SizeQ" ftype="Integer" access="In"/>
70 * <Parameter name="SizeSigma" ftype="Integer" access="In"/>
71 * <Parameter name="Res" ftype="Generator" access="Out" />
72 * </Signature>
73 * </VariantSignatures>
74 *
75 * <LuaCode>
76 * <[CDATA[
77 *
78 * -- Extension reports on loading
79 * print('loading luaextension "LargeGenerator"')
80 *
81 * -- Define my function (mangled version of variant name)
82 * function faudes.LargeGen_Q_Sigma_GRes(qn,sn,gen)
83 *
84 * -- Function reports on execution
85 * print(string.format('LargeGen(...): qn=%d sn=%d',qn,sn))
86 *
87 * -- Exeution code
88 * gen:Clear()
89 * for i=1,qn do
90 * gen:InsState(i)
91 * end
92 * for i=1,sn do
93 * gen:InsEvent(string.format('ev_%d',i))
94 * end
95 *
96 * -- Done
97 * return
98 *
99 * -- End of function definition
100 * end
101 *
102 * -- Extension reports on loading
103 * print('loading luaextension: done')
104 *
105 * ]]>
106 * </LuaCode>
107 *
108 * </LuaFunctionDefinition>
109 * @endcode
110 *
111 * Restrictions and conventions:
112 * - Type-checking is done via the Cast() function of the faudes Type interface. As a
113 * consequence, you may only use types that are registered with the run-time-interface.
114 * - On execution, the LuaFunction instance has to locate the respective function
115 * in the supplied lua code. In order to allow for multiple variants, the convention is
116 * to have one lua function each with the name of the corresponding variant. Since
117 * variant names may contain funny characters, name matching is performed after
118 * so called mangeling: any sequence of non-alpha-numerics is replaced by a single "_",
119 * a trailing "_" is dropped. E.g. the variant <tt>res=a+b</tt> matches the Lua function <tt>res_a_b</tt>.
120 * - Parameters other than elementary (integer, boolean and string) are passed to
121 * the Lua function by reference. However, Lua will consistently interpret the reference itself
122 * as a parameter value. Thus, to assign a value to an <tt>access="Out"</tt> or <tt>access="InOut"</tt>
123 * parameter, you must use the assigment memberfunction Copy (as opposed to the assignment operator "=").
124 * - Elementary types (i.e. integers, booleans and strings) are passed to the Lua function by value.
125 * Thus, it would be pointless to have an elementary typed parameter with access attribute other than
126 * <tt>access="In"</tt>. In order to implement elementary typed return values, the respective
127 * Lua function must return the corresponding values by an approriate return statement. The signature
128 * should indicate this by the attribute <tt>creturn="true"</tt>. The current implementation
129 * will automatically imply <tt>creturn="true"</tt> for any <tt>access="Out"</tt> or
130 * <tt>access="InOut"</tt>.
131 * - Since luafaudes has no concept of const references, it is the responsability of the
132 * script programer to respect parameter <tt>access</tt> attributes.
133 * - When using Install() to install the function to a LuaState, a single wrapper function will be
134 * defined to dispatch variants. By convention, this function is located in <tt>faudes.name_of_fdef</tt>,
135 * where <tt>name_of_fdef</tt> is the name of the respective LuaFunctionDefinition.
136 *
137 *
138 *
139 * @ingroup LuabindingsPlugin
140 */
141
143
144 // faudes type
146
147public:
148
149 /**
150 * Constructor.
151 *
152 * In contrast to the std FunctionDefinition, the default constructor
153 * sets up a valid lua function definition with a newly created LuaFunction
154 * as prototype.
155 * Of course, you will need to set the signatures and the lua code
156 * to obtain an operational function.
157 */
158 LuaFunctionDefinition(const std::string& name="");
159
160 /**
161 * Copy constructor
162 */
164
165 /**
166 * Destructor
167 */
168 virtual ~LuaFunctionDefinition(void){};
169
170
171 /**
172 * Clear documentation-data, signature and script (keep prototype)
173 */
174 void Clear(void);
175
176 /**
177 * Get Lua code
178 *
179 * @return
180 * Lua code as std string
181 */
182 const std::string& LuaCode(void) const;
183
184 /**
185 * Set Lua code
186 *
187 * @param rCode
188 * Lua code as std string
189 */
190 void LuaCode(const std::string& rCode);
191
192 /**
193 * Set default lua state.
194 *
195 * Sets the default lua state on which functions that refer to
196 * this function definition will use for execution.
197 * If set to NULL (e.g. on consruction), the
198 * global state is used. However, the function object
199 * itself may overwrite the default.
200 *
201 * @param pL
202 * Lua state
203 */
204 void DefaultL(LuaState* pL);
205
206 /**
207 * Get default lua state.
208 *
209 * @return
210 * Lua state
211 */
212 LuaState* DefaultL(void) const;
213
214 /**
215 * Syntax check lua code.
216 *
217 * This routine instantiates a LuaFunction from this function definition
218 * and does all it needs to run the script, except to invoke the any of the
219 * variant functions. The reasoning is, that the script may hang and, thus,
220 * never return. Errors are indicated returned as an error string.
221 *
222 * @return
223 * Error message as string, or empty string on success
224 */
225 std::string SyntaxCheck(void);
226
227 /**
228 * Evaluate lua code.
229 *
230 * This routine evaluates the LuaCode literally. This method is used to execute
231 * LuaCode that is not part of any particular variant. To execute a
232 * particular variant, instantiate a LuaFunction and invoke Execute().
233 *
234 * If you pass NULL as destination state, the global state will be used.
235 *
236 * @param pL
237 * Reference to the Lua state
238 * @return
239 * Error message as string, or empty string on success
240 */
241 std::string Evaluate(LuaState* pL=NULL);
242
243 /**
244 * Install this function to a Lua state
245 *
246 * This routine installs the Lua code of this function
247 * definition to the table "faudes" of the specified Lua state.
248 * It also constructs a wrapper function
249 * to dispatch signatures and palces this in the table "faudes".
250 * Effectively, the resulting Lua state is prepared to execute the
251 * Lua function with the same semantics as used for SWIG generated wrappers
252 * of C++ functions.
253 *
254 * If you pass NULL as destination state, the global state will be used.
255 *
256 * @param pL
257 * Reference to the Lua state
258 */
259 void Install(LuaState* pL=NULL) const;
260
261 /**
262 * Install this function to a Lua state.
263 *
264 * Alternative signature for applications that do not use the
265 * the LuaState wrapper class. See also Install(LuaState*).
266 *
267 * @param pLL
268 * Reference to the Lua state
269 */
270 void Install(lua_State* pLL) const;
271
272
273 /*
274 * Register LuaExtension with the run-time-interface.
275 *
276 * This static convenience method registers all LuaFunctionDefinitions found
277 * in an extension file with the FunctionRegistry. Thus, after registration
278 * you can use the Lua function via the run-time-interface as if they
279 * where C++ functions.
280 *
281 * Note: if you also want to use the provided functions within a Lua interpreter,
282 * you must also install the extension to a lua state. This can be done on
283 * a per-file basis by LuaState::Install(const std::string&) or for the any
284 * functions registered by LuaState::Reset().
285 *
286 *
287 * @param rFilename
288 * Source file (typically .flx)
289 */
290 static void Register(const std::string& rFilename);
291
292
293protected:
294
295 /**
296 * Std faudes type interface: assignment.
297 *
298 * @param rSrc
299 * Source to copy from
300 */
301 virtual void DoCopy(const LuaFunctionDefinition& rSrc);
302
303 /**
304 * Std faudes type interface: test equality
305 *
306 * @param rOther
307 * Other object to compare with.
308 * @return
309 * True on match.
310 */
311 virtual bool DoEqual(const LuaFunctionDefinition& rOther) const;
312
313 /**
314 * Read configuration data of this object from TokenReader.
315 * Actual reading is done by DoReadCore.
316 *
317 * The section defaults to "LuaFunctionDefinition", context ignored.
318 *
319 * @param rTr
320 * TokenReader to read from
321 * @param rLabel
322 * Section to read
323 * @param pContext
324 * Read context to provide contextual information (ignored)
325 *
326 * @exception Exception
327 * - Token mismatch (id 50, 51, 52)
328 * - IO error (id 1)
329 */
330 virtual void DoRead(TokenReader& rTr, const std::string& rLabel = "", const Type* pContext=0);
331
332 /**
333 * Read configuration data of this object from TokenReader.
334 *
335 * This method reads members only, it does not read the section.
336 *
337 * @param rTr
338 * TokenReader to read from
339 *
340 * @exception Exception
341 * - Token mismatch (id 50, 51, 52)
342 * - IO error (id 1)
343 */
344 virtual void DoReadCore(TokenReader& rTr);
345
346 /**
347 * Write configuration data of this object to TokenWriter.
348 *
349 * The section defaults to "LuaFunctionDefinition", context ignored.
350 *
351 * @param rTw
352 * Reference to TokenWriter
353 * @param rLabel
354 * Label of section to write
355 * @param pContext
356 * Write context to provide contextual information
357 *
358 * @exception Exception
359 * - IO errors (id 2)
360 */
361 virtual void DoWrite(TokenWriter& rTw, const std::string& rLabel="",const Type* pContext=0) const;
362
363 /**
364 * Write configuration data of this object to TokenWriter.
365 *
366 * This method writes plain member data, the section lables are not
367 * written.
368 *
369 * @param rTw
370 * Reference to TokenWriter
371 *
372 * @exception Exception
373 * - IO errors (id 2)
374 */
375 virtual void DoWriteCore(TokenWriter& rTw) const;
376
377
378 /**
379 * Copy prototype object
380 *
381 * @param pFunc
382 * Function instance
383 *
384 */
385 virtual void Prototype(Function* pFunc);
386
387 /** Typed prototype instance */
389
390 /** Lua code */
391 std::string mLuaCode;
392
393 /** Lua file */
394 std::string mLuaFile;
395
396 /** Default lua state*/
398
399};
400
401
402/**
403 * Wrapper class to maintain a Lua state.
404 *
405 * This class is still under construction. It aims for a sensible collection
406 * of operations that we may want to execute on a Lua state from the libFAUDES
407 * perspective. The current implementation provides static members that directly
408 * operate on a lua_State as well as a more comfortable interface that
409 * operates on thre wrapped faudes::LusState.
410 *
411 * @ingroup LuabindingsPlugin
412 */
413
415public:
416 /**
417 * Constructor
418 */
419 LuaState(void);
420
421 /**
422 * Destructor
423 */
424 ~LuaState(void);
425
426 /**
427 * Access Lua state.
428 */
429 lua_State* LL(void);
430
431 /**
432 * Convenience global Lua state.
433 */
434 static LuaState* G(void);
435
436 /**
437 * Reinitialize Lua state.
438 *
439 * This method reconstructs the internal Lua state.
440 * Any references become invalid. Any LuaFunctiondefinitions from
441 * the FunctionRegistry will be (re-)installed to the new state.
442 */
443 void Reset(void);
444
445 /**
446 * Install LuaExtension to Lua state.
447 *
448 * This function instantiates a LuaFunctionDefinition objects from
449 * the file and uses the Install member function to install each function
450 * to the specified lua state. Thus, after the extension has been installed,
451 * the respective Lua functions can be invoked within Lua as if they where
452 * C++ function with SWIG generated wrappers.
453 *
454 * Note: if you want to use the extension via the run-time-interface, you
455 * must also register them with the FunctionRegistry; see also the static method
456 * LuaFunctionDefinition::Register(const std::string&).
457 *
458 * @param rFilename
459 * Source file (typically .flx)
460 */
461 void Install(const std::string& rFilename);
462
463 /**
464 * Initialze.
465 *
466 * Loads std libraries and libFAUDES wrappers.
467 *
468 * Note: this static version is provided for applications
469 * that maintain their lua state themselves. If yo use
470 * the wrapper class LuaState, you dont need explicit
471 * initialisation.
472 *
473 * @param pLL
474 * Lua state
475 */
476 static void Initialize(lua_State* pLL);
477
478 /**
479 * Install LuaExtension to Lua state.
480 *
481 * Note: this static version is provided for applications
482 * that maintain their lua state themselves. If yo use
483 * the wrapper class LuaState, you should use the Install(const std::string&) method.
484 *
485 * @param pLL
486 * Target lua state
487 * @param rFilename
488 * Source file
489 * @ingroup LuabindingsPlugin
490 */
491 static void Install(lua_State* pLL, const std::string& rFilename);
492
493 /**
494 * Push faudes typed object on the Lua stack.
495 *
496 * This method uses SWIG generated constructors to instantiate new Lua userdata
497 * object of the same type as the specified data. It than invokes
498 * the faudes Copy method to assign a copy.
499 *
500 * @param fdata
501 * Data to push
502 * @exception Exception
503 * - Lua Error (id 49)
504 *
505 */
506 void Push(const Type* fdata);
507
508 /**
509 * Push faudes typed object on the Lua stack.
510 *
511 * This static version is meant for applications that maintain
512 * their Lus state themselves. See also Push(const Type&)
513 *
514 * @param pLL
515 * Lua state
516 * @param fdata
517 * Data to push
518 * @exception Exception
519 * - Lua Error (id 49)
520 *
521 */
522 static void Push(lua_State* pLL, const Type* fdata);
523
524 /**
525 * Pop faudes typed object from Lua stack.
526 *
527 * This method uses SWIG generated type casts to retrieve the
528 * faudes object from the userdata on the top of the stack.
529 * It then uses the faudes NewCpy() method to instantiate a copy,
530 * to be owned by the caller.
531 *
532 *
533 * @return
534 * Destination for pop data
535 * @exception Exception
536 * - Lua Error (id 49)
537 *
538 */
539 Type* Pop(void);
540
541 /**
542 * Pop faudes typed object from Lua stack.
543 *
544 * This static version is meant for applications that maintain
545 * their Lua state themselves. See also Pop(const Type&)
546 *
547 * @param pLL
548 * Lua state
549 * @return
550 * Destination for pop data
551 * @exception Exception
552 * - Lua Error (id 49)
553 *
554 */
555 static Type* Pop(lua_State* pLL);
556
557 /**
558 * Get/set global data
559 *
560 * This method provides access to global variables.
561 * To set a variable, provide a non-NULL fdata parameter.
562 * If you obmitt the fdata paraneter, the default will indicate a
563 * get operation. Here, the value is returned as a copy and
564 * owned by the caller.
565 *
566 * An expection is thrown if the variable either does not exist,
567 * or cannot be converted to a faudes::Type.
568 *
569 * @param gname
570 * Name of global variable
571 * @param fdata
572 * Data to set
573 * @exception Exception
574 * - Lua Error (id 49)
575 *
576 */
577 Type* Global(const std::string& gname, const Type* fdata=0);
578
579 /**
580 * Get/set global data
581 *
582 * This static version is meant for applications that maintain
583 * their Lua state themselves. See also Globat(const std::string&, const Type*)
584 *
585 * @param pLL
586 * Lua state
587 * @param gname
588 * Name of global variable
589 * @param fdata
590 * Data to set
591 * @exception Exception
592 * - Lua Error (id 49)
593 *
594 */
595 static Type* Global(lua_State* pLL, const std::string& gname, const Type* fdata=0);
596
597 /**
598 * Evaluate Lua expression.
599 *
600 * This method runs the Lua-interpreter on the specified expression.
601 * In the case of an error, an exception will be thrown.
602 *
603 * @exception Exception
604 * - Lua Error (id 49)
605 *
606 */
607 void Evaluate(const std::string& expr);
608
609 /**
610 * Evaluate Lua expression.
611 *
612 * This static version is meant for applications that maintain
613 * their Lua state themselves. See also Evaluate(const std::string&)
614 *
615 * @param pLL
616 * Lua state
617 * @param expr
618 * Expression to evaluate
619 * @exception Exception
620 * - Lua Error (id 49)
621 *
622 */
623 static void Evaluate(lua_State* pLL, const std::string& expr);
624
625 /**
626 * Complete Lua identifier
627 *
628 * This method uses a variation of Mike Pall's advaced readline
629 * support patch to fugure possible completions if a string
630 * to match a valid identifyer.
631 *
632 * @param word
633 * String to complete
634 * @return
635 * List of completions, first entry is longest common prefix.
636 */
637 std::list< std::string > Complete(const std::string& word);
638
639 /**
640 * Complete Lua identifier
641 *
642 * This static version is meant for applications that maintain
643 * their Lua state themselves. See also Evaluate(const std::string&)
644 *
645 * @param pLL
646 * Lua state
647 * @param word
648 * String to complete
649 * @return
650 * List of completions, first entry is longest common prefix.
651 */
652 static std::list< std::string > Complete(lua_State* pLL, const std::string& word);
653
654
655private:
656
657 // disable copy constructor
659 // lua state
660 lua_State* mpLL;
661 // open/close lua state
662 void Open(void);
663 void Close(void);
664};
665
666
667/**
668 * A LuaFunction is a faudes-function that executes a luafaudes script.
669 *
670 * LuaFunction is derived from Function and implements the DoTypeCheck and DoExecute
671 * interface to run the lua code as supplied by the corresponding function defintion.
672 * Thus, it is considered an error to set the function definition to an object that
673 * does not cast to a LuaFunctionDefinition.
674 *
675 * @ingroup LuabindingsPlugin
676 */
677
679
680 public:
681 /**
682 * Constructor.
683 * For the function to be operational, a valid reference to the corresponding
684 * LuaFunctionDefinition is required. The only exception is the prototype function
685 * object used in the LuaFunctionDefinition itself.
686 */
688
689 /** Destructor */
691
692 /**
693 * Construct on heap.
694 * Create a new instance of this function class and return pointer.
695 * The new instance will use the same function definition as this instance.
696 *
697 * @return
698 * Pointer to faudes::Function instance.
699 *
700 */
701 virtual LuaFunction* New() const;
702
703
704 /**
705 * Set function definition.
706 * Normally, functions are provided with a function definition on construction.
707 * The only exception are prototype objects used in function definitions themselfs
708 * and in the function registry.
709 *
710 * @param fdef
711 * Function definition to set.
712 *
713 */
714 void Definition(const FunctionDefinition* fdef);
715
716
717 /**
718 * Get function definition.
719 *
720 * @return
721 * Function definition used by this function.
722 *
723 */
724 const LuaFunctionDefinition* Definition(void) const;
725
726
727 /**
728 * Syntax check lua code.
729 *
730 * This routine does all it needs to run the script,
731 * except to invoke the specified function. The reasoning is, that
732 * the script may hang and, thus, never return. A consequence
733 * is, that you must set a variant and you must supply parameter
734 * values befor checking. You may use AllocateValues() and FreeValues()
735 * for this purpose. Errors are indicated by an exception.
736 *
737 * Note that the LuaFunctionDefinition provides a convenience wrapper
738 * that runs the check on all variants and cares about value allocation.
739 *
740 * @exception Exception
741 * - No such variant (id 47)
742 * - Error in Lua script (id 49)
743 */
744 void SyntaxCheck(void);
745
746 /**
747 * Evaluate lua code.
748 *
749 * This routine avaluates the associated Lua code literally, i.e.
750 * no arguments are passed, no specific function is invoked.
751 * See also Execute().
752 *
753 * @exception Exception
754 * - Error in Lua script (id 49)
755 */
756 void Evaluate(void);
757
758
759 /**
760 * Set lua state
761 *
762 * Sets the lua state which this function will use for execution.
763 * If set to NULL (e.g. on consruction), the
764 * function definition's default state will be used. If
765 * this is not set either, the global state is used.
766 *
767 * @param l
768 * Lua state
769 */
770 void L(LuaState* l);
771
772 /**
773 * Get default lua state
774 *
775 * @return
776 * Lua state
777 */
778 LuaState* L(void);
779
780 protected:
781
782 /*
783 * Do set variant from function definition.
784 *
785 * For LuaFunctions, we accept the special variant -1 for
786 * as "no variant", just run the script on execution.
787 *
788 * @param n
789 * Variant index
790 *
791 * @exception Exception
792 * - No function definition available (id 47)
793 * - No such variant (id 48)
794 */
795 virtual void DoVariant(int n);
796
797
798 /**
799 * Method to test the type of an assigned parameter with the
800 * specified faudes::Signature (i.e. their TypeDefinition label).
801 *
802 * Note: this method is called by Function::Execute() before actual function
803 * execution via DoExecute(). It may be used to perform a dynamic cast in
804 * preparation of DoExecute(). The latter is only called, if all types match.
805 *
806 * @param n
807 * Position of parameter to check
808 * @return
809 * True if type matches signature.
810 *
811 * @exception Exception
812 * - Signature undefined (id 48)
813 * - Parameter number out of range (id 48)
814 */
815 virtual bool DoTypeCheck(int n);
816
817 /**
818 * Executes code as supplied by FunctionDefinition
819 *
820 * @exception Exception
821 * - Exception during lua setup (id 49)
822 * - Any exception during execution of script
823 */
824 virtual void DoExecute();
825
826 /**
827 * Execute stages
828 *
829 * @exception Exception
830 * - Exception during lua setup (id 49)
831 */
832 virtual void DoExecuteA();
833
834 /**
835 * Execute stages
836 *
837 * @exception Exception
838 * - Exception during lua setup (id 49)
839 */
840 virtual void DoExecuteB();
841
842 /**
843 * Execute stages
844 *
845 * @exception Exception
846 * - Exception during lua setup (id 49)
847 * - Any exception during execution of script
848 */
849 virtual void DoExecuteC();
850
851 /**
852 * Execute stages
853 *
854 * @exception Exception
855 * - Exception during lua setup (id 49)
856 */
857 virtual void DoExecuteD();
858
859
860 /**
861 * Execute stages
862 *
863 * @exception Exception
864 * - Exception during lua setup (id 49)
865 */
866 virtual void DoExecuteE();
867
868
869 /** Typed reference to definition */
871
872 /** State of Lua interpreter */
874 lua_State* pLL;
877 void* mFType;
878 std::vector<bool> mLReturn;
879 std::vector<bool> mLParameter;
882};
883
884
885
886
887
888} // namespace
889#endif
890#endif
#define FAUDES_API
#define FAUDES_TYPE_DECLARATION(ftype, ctype, cbase)
Definition cfl_types.h:918
std::vector< bool > mLParameter
const LuaFunctionDefinition * pLuaFuncDef
std::vector< bool > mLReturn
lua_State * mpLL
LuaState(const LuaState &)
void Complete(vGenerator &rGen)

libFAUDES 2.34d --- 2026.03.11 --- c++ api documentaion by doxygen