| |
|
||||||
|
|
|||||||
As a C++ library, libFAUDES provides its data-types and functions by class and function definitions in C++ header files. Thus, the natural way to use the library is to develop a C++ application that includes the headers and links against libFAUDES.
Below, we give a short overview on how to access libFAUDES data-types and functions from a C++ program. More detailed information is provided as follows:
the Build-System Documentation outlines the libFAUDES build process.
the Tutorials illustrate the C++ API by examples;
the C++ API Reference documents all API relevant headers;
the Plug-Ins How-To gives step-by-step instructions on how to organize library extensions;
libFAUDES models sets of states, events and transitions by the classes EventSet, StateSet and TransSet, respectively. The implementation is based on the Standard Template Library (STL), using sorted containers for the internal representation. libFAUDES sets provide access to elements (insert, delete, exists, find etc) including iterators, convenience operators (union, intersection and difference) and file IO.
The below code snipped demonstrates elementary usage of event sets. Detailed documentation can be found in the C++ API Reference Section Container Classes.
EventSet al1; // declare alphabet
al1.Name("MyAlpahbet"); // set name of this alphabet
al1.Insert("alpha"); // insert event alpha
al1.Insert("beta"); // insert event beta
al1.Write("myalph.txt"); // write to file
EventSet al2; // declare another alphabet
al2.Read("other.txt"); // read from file
EventSet intersect = al1 * al2; // compute intersection
libFAUDES implements the five tuple automaton G = (Q, Sigma, delta, Qo, Qm) with
the set of states Q,
the alphabet Sigma,
the transition relation delta,
the sets of initial states Qo and marked states Qm.
by Generator classes. The generator data structure resembles the definition of the automaton by implementing the Generator members as libFAUDES sets. The class provides methods to access the set members individually by a symbolic name or index, to iterate over sets, and for file IO.
The below code snipped demonstrates basic usage. More details can be found in the C++ API Reference Section Generator Classes.
Generator g1; // declare generator
g1.InsState("I"); // introduce idle state
g1.InsState("B"); // introduce busy state
g1.InsEvent("a"); // introduce event a
g1.InsEvent("b"); // introduce event b
g1.SetTransition("I", "a", "B"); // set transition I-(a)->B
g1.SetTransition("B", "b", "I"); // set transition B-(b)->I
g1.SetInitState("I"); // indicate that idle is an initial state
g1.SetMarkedState("I"); // indicate that idle is a marked state
g1.Write(); // show generator on console
g1.Write("very_simple.gen"); // write generator to file
g1.GraphWrite("very_simple.jpg"); // run graphiz' dot to convert to an image
Generator g2;
g2.Read("nice_example.gen"); // read some generator file
libFAUDES comes with a set of general purpose operations on generators, addressing regular expressions, determinism, minimal realisation etc; see the C++ API Reference, Section Generator Functions. Functions related to more specific topics are provided by plug-ins; see Section PlugIns.
As a concise example, we present how to compute a synchronous composition of two generators:
Generator g1("g1.gen"); // declare/read generator g1
Generator g2("g2.gen"); // declare/read generator g1
Generator g1g2; // declare result
Parallel(g1, g2, g1g2); // perform operation
g1g2.Write("tmp_g1g2.gen"); // write result
The respective generators are taken from tutorial 3:
| ||||
|
libFAUDES 2.33l --- 2025.09.16 --- with "omegaaut-synthesis-observer-observability-diagnosis-hiosys-iosystem-multitasking-coordinationcontrol-timed-simulator-iodevice-priorities-luabindings-hybrid-example-pybindings"