| |
libFAUDES
Sections
Index
|
tp_1_tgenerator.cpp File ReferenceDetailed DescriptionTutorial, class faudes::tGenerator.This tutorial demonstrates basic maintenance of tGenerator objects
/** @file tp_1_tgenerator.cpp Tutorial, class faudes::tGenerator. This tutorial demonstrates basic maintenance of tGenerator objects @ingroup Tutorials @include tp_1_tgenerator.cpp */ #include "libfaudes.h" #include "tp_include.h" // make the faudes namespace available to our program using namespace faudes; ///////////////// // main program ///////////////// int main() { /*************************************************************** * constructor and file io * ***************************************************************/ // At first we create an empty tGenerator object tGenerator g1; // We create a tGenerator by reading a tGenerator file tGenerator g2("data/tsimplemachine.gen"); // We create a tGenerator by reading a Generator file (no timing, no control) tGenerator g3("data/simplemachine.gen"); // We read a tGenerator from a cGenerator file (no timing) g1.Read("data/csimplemachine.gen"); // We copy a Generator to a tGenerator (no timing, no control) tGenerator g4; Generator g5("data/simplemachine.gen"); g5.Copy(g4); // We write the tGenerator to a files g1.Write("tmp_tsimplemachine1.gen"); g2.Write("tmp_tsimplemachine2.gen"); g3.Write("tmp_tsimplemachine3.gen"); g4.Write("tmp_tsimplemachine4.gen"); // See result on console std::cout << "######################################\n"; std::cout << "# tc simple machine (\n"; g2.DWrite(); std::cout << "######################################\n"; /*************************************************************** * access to controllability status of events * * (using cGenerator methods) ***************************************************************/ // Retrieve an EventSet containing all the controllabe events EventSet cevents = g2.ControllableEvents(); // See result on console std::cout << "######################################\n"; std::cout << "# controllabel events\n"; cevents.DWrite(); std::cout << "######################################\n"; /*************************************************************** * access timing * ***************************************************************/ // insert a clock to tcsimplemachine g2.InsClock("cRepair"); // read clocks from tcsimplemachine and set them for csimplemachine ClockSet clocks = g2.Clocks(); // report std::cout << "######################################\n"; std::cout << "# tcsimple machine clocks \n"; clocks.DWrite(); std::cout << "######################################\n"; // add constraints to invariant TimeConstraint inv; inv.Insert("cRepair",ElemConstraint::LessEqual,20); g2.InsInvariant("down", inv); // add constraints to guard and a reset TransSet::Iterator tit=g2.FindTransition("down","lambda","idle"); if(tit==g2.TransRelEnd()) {}; // not found TimeConstraint guard; guard.Insert("cRepair",ElemConstraint::GreaterEqual,10); g2.InsGuard(*tit, guard); ClockSet resets; resets.Insert("cRepair"); g2.InsResets(*tit, resets); // fix name g2.Name("tc simple machine with timed repair"); // report std::cout << "######################################\n"; std::cout << "# tcsimple machine with timed repair \n"; g2.DWrite(); g2.ActiveClocks().DWrite(); std::cout << "######################################\n"; // copy to g1 and remove a clock g1=g2; g1.DelClock("cBusy"); // report std::cout << "######################################\n"; std::cout << "# tcsimple machine with untimed busy \n"; g1.DWrite(); g1.ActiveClocks().DWrite(); std::cout << "######################################\n"; // read clocks from tcsimplemachine and set them for csimplemachine std::cout << "######################################\n"; std::cout << "# csimple machine (active clocks) \n"; g3.InsClocks(g2.ActiveClocks()); std::cout << g3.Clocks().ToString() << "\n"; // read invriants from tcsimplemachine and set them for csimplemachine std::cout << "######################################\n"; std::cout << "# csimple machine (invariants) \n"; StateSet::Iterator sit; for(sit=g2.StatesBegin(); sit!=g2.StatesEnd(); sit++) { TimeConstraint invariant = g2.Invariant(*sit); std::string state = g2.StateName(*sit); std::cout << state << " inv " << invariant.ToString() << "\n"; g3.Invariant(state, invariant); } // read guards and resets from tcsimplemachine and set them for csimplemachine std::cout << "######################################\n"; std::cout << "# csimple machine (guards and resets) \n"; TransSet::Iterator stit, dtit; for(stit=g2.TransRelBegin(); stit!= g2.TransRelEnd(); stit++) { std::cout << "src transition: " << g2.TStr(*stit) << "\n"; std::cout << "guard: " << g2.Guard(*stit).ToString() << "\n"; std::cout << "resets: " << g2.Resets(*stit).ToString() << "\n"; dtit=g3.FindTransition(g2.StateName(stit->X1),g2.EventName(stit->Ev),g2.StateName(stit->X2)); g3.Guard(*dtit,g2.Guard(*stit)); g3.Resets(*dtit,g2.Resets(*stit)); } std::cout << "######################################\n"; std::cout << "# csimple machine with timing \n"; g3.DWrite(); std::cout << "######################################\n"; // check validiy (internal names and symboltables) if(g3.Valid()) std::cout << "############# valid #################\n"; return 0; }
Function Documentation
|
libFAUDES 2.13a c++ source docu by doxygen 1.5.6