|
|
||||||
|
Tutorial, runtime interface. More... #include <iostream> #include "libfaudes.h" Go to the source code of this file.
Detailed DescriptionTutorial, runtime interface. This tutorial demonstrates access to libFAUDES data types and functions via the type- and function registries. The runtime interface addresses the development of applications that transparently propagate libFAUDES extensions to the user. /** @file 7_interface.cpp
Tutorial, runtime interface. This tutorial demonstrates access to
libFAUDES data types and functions via the type- and function
registries. The runtime interface addresses the development
of applications that transparently propagate libFAUDES extensions
to the user.
@ingroup Tutorials
@include 7_interface.cpp
*/
#include <iostream>
#include "libfaudes.h"
using namespace faudes;
int main(){
// ******************** basic ussage of the faudes type interface
// load (do so once on application startup)
LoadRegistry("../include/libfaudes.rti");
// report to console
std::cout << "################################\n";
std::cout << "# tutorial, faudes types \n";
// instatiate an object by faudes type
Type* fobject = NewFaudesObject("System");
// query type of an object
// type test: can we cast this to a plain generator?
Generator gen;
bool isvg= ( gen.Cast(fobject)!=NULL );
if(isvg)
std::cout << " faudes object casts to Generator: ok [expected]\n";
else
std::cout << " faudes object casts to Generator: failed\n";
// type test: can we cast this to an eventset?
EventSet eset;
bool ises = ( eset.Cast(fobject) != NULL ) ;
if(ises)
std::cout << " faudes object cast to EventSet: ok\n";
else
std::cout << " faudes object cast to EventSet: failed [expected]\n";
// Record test case
FAUDES_TEST_DUMP("cast to generator",isvg);
FAUDES_TEST_DUMP("cast to eventset",ises);
// report
std::cout << "################################\n";
// ******************** basic ussage of the function registry
// instatiate some generators via the registry
Type* data0 = NewFaudesObject("Generator");
Type* data1 = NewFaudesObject("Generator");
Type* data2 = NewFaudesObject("Generator");
// load input data from files
data0->Read("./data/simplemachine.gen");
data1->Read("./data/buffer.gen");
// instantiate a function via registry
Function* funct = NewFaudesFunction("Parallel");
// set parameter values (exception on accessing positional parameter out of range)
funct->ParamValue(0,data0);
funct->ParamValue(1,data1);
funct->ParamValue(2,data2);
// execute function (exception on type mismatch)
funct->Execute();
// report to console
std::cout << "################################\n";
std::cout << "# tutorial, rti parallel \n";
data2->Write();
std::cout << "################################\n";
// test case
if(!vgen) {
std::cout << "ERR: res does not cast to Generator\n";
exit(1);
}
if(vgen->Size()!=6) {
std::cout << "ERR: res is expected to have 6 states\n";
exit(1);
}
// record test case
FAUDES_TEST_DUMP("rti parallel",*data2);
// clear registry for below demos
// delete my objects
delete data0;
delete data1;
delete data2;
// ******************** elementary type, String
// create new String instance
String fstring;
// assign from corresponding c type std::string
fstring = "hello faudes types";
// assign to corresponding c type std::string
std::string sstring = fstring;
// file io
fstring.Write("tmp_string.txt");
fstring.Read("tmp_string.txt");
// report to console
std::cout << "################################\n";
std::cout << "# tutorial, rti string \n";
fstring.Write();
std::cout << "################################\n";
// ******************** elementary type, Integer
// create new Integer instance
Integer fint;
// assign from corresponding c type std::int
fint = 42;
// assign to corresponding c type std::int
int sint = fint;
// arithmetic
fint = 2*fint+16;
// file io
fint.Write("tmp_int.txt");
fint.Read("tmp_int.txt");
// report to console
std::cout << "################################\n";
std::cout << "# tutorial, rti integer \n";
fint.Write();
std::cout << "################################\n";
// test case
if(fint!=100) {
std::cout << "ERR: expected 100\n";
exit(1);
}
// ******************** elementary type, Boolean
// create new Integer instance
Boolean fbool;
// assign from corresponding c type std::int
fbool = false;
// assign to corresponding c type std::int
bool sbool = !fbool;
// file io
fbool.Write("tmp_bool.txt");
fbool.Read("tmp_bool.txt");
// report to console
std::cout << "################################\n";
std::cout << "# tutorial, rti bool \n";
fbool.Write();
std::cout << "################################\n";
// ******************** advanced: type definitions and registry
// defining a type with specified faudes type name (and no documentation)
TypeDefinition* tdalphabet = TypeDefinition::Constructor<Alphabet>("EventSet");
// defining a type with type name "System" and documentation from specified file
TypeDefinition* tdgenerator = TypeDefinition::FromFile<System>("data/generator.rti");
// register previously defined types
TypeRegistry::G()->Insert(tdalphabet);
TypeRegistry::G()->Insert(tdgenerator);
// load any additional documentation from file (event set is missing from above)
// dump registry to console
std::cout << "################################\n";
std::cout << "# tutorial, type registry \n";
TypeRegistry::G()->Write();
std::cout << "################################\n";
// use the registry to construct an object by its type name
Type* generator = NewFaudesObject("System");
// test generator object
std::cout << "Faudes object casts to System: OK [expected]\n";
else
std::cout << "Faudes object does not casts to System: ERR [test case error]\n";
// recover faudes type name from object
// delete my objects
delete generator;
// done
std::cout << "################################\n";
return(0);
}
#define FAUDES_TEST_DUMP(mes, dat) Test protocol record macro ("mangle" filename for platform independance) Definition: cfl_helper.h:483 void MergeDocumentation(TokenReader &rTr) Scan token input for type documentation. Definition: cfl_registry.cpp:178 static TypeRegistry * G() Method to access the single global instance of the registry. Definition: cfl_registry.cpp:62 void Insert(TypeDefinition *pTypeDef) Add another type definition to the registry. Definition: cfl_registry.cpp:137 void Write(const Type *pContext=0) const Write configuration data to console. Definition: cfl_types.cpp:139 vGenerator Generator Plain generator, api typedef for generator with no attributes. Definition: cfl_generator.h:3240 TcGenerator< AttributeVoid, AttributeVoid, AttributeCFlags, AttributeVoid > System Convenience typedef for std System. Definition: cfl_cgenerator.h:913 Function * NewFaudesFunction(const std::string &rFunctName) Instantiate faudes function objects by function name. Definition: cfl_registry.cpp:701 void LoadRegistry(const std::string &rPath) Load all registered types and functions. Definition: cfl_registry.cpp:616 const std::string & FaudesTypeName(const Type &rObject) Query type name. Definition: cfl_registry.cpp:702 Type * NewFaudesObject(const std::string &rTypeName) Instantiate faudes typed objects by type name. Definition: cfl_registry.cpp:700 Includes all libFAUDES headers, incl plugings Definition in file 7_interface.cpp. Function Documentation◆ main()
Definition at line 22 of file 7_interface.cpp. libFAUDES 2.32b --- 2024.03.01 --- c++ api documentaion by doxygen |