22 #ifndef UTAP_SIGNALFLOW_HH 23 #define UTAP_SIGNALFLOW_HH 61 return (strcmp(s1,s2)<0);
64 typedef std::set<const char*, const less_str>
strs_t;
66 typedef std::map<const proc_t*, strs_t>
proc2strs_t;
74 proc_t(
const char* _name): name(_name) {}
78 typedef std::map<const symbol_t, expression_t>
exprref_t;
91 std::stack<std::pair<bool, bool> >
ioStack;
96 void addChan(
const std::string &, strs_t &, str2procs_t&);
101 ioStack.push(std::make_pair(inp, out));
104 inp = ioStack.top().first;
105 out = ioStack.top().second;
146 virtual void printForDot(std::ostream &os,
bool ranked,
bool erd,
175 struct print:
public std::unary_function<T, void>
181 os(out), infix(sep), need(false) {}
184 if (need) os << infix;
185 os << x; need =
true;
197 SignalFlow::procs_t::const_iterator p=ps.begin(), e=ps.end();
198 if (p!=e) { os << (*p)->name; ++p; }
199 while (p!=e) { os <<
", " << (*p)->name; ++p; }
250 int partition(
const strs_t& inputs,
const strs_t& outputs);
251 int partition(std::istream& ioinfo);
252 void printForDot(std::ostream &os,
bool ranked,
bool erd,
bool cEdged)
override;
253 void printViolation(
const proc_t* process,
const char* variable);
255 void fillWithIUTProcs(
strs_t& procs);
270 bool distancesUpToDate;
277 dist_t(
int h,
int c,
int d): hops(h), complexity(c), distance(d) {}
278 dist_t(): hops(0), complexity(1), distance(0) {}
281 typedef std::map<const char*, dist_t, less_str> str2dist_t;
283 str2dist_t distances;
285 void updateDistancesFromVariable(
const char* name,
286 const dist_t* distance);
287 void updateDistancesFromProcess(
const char* name,
288 const dist_t* distance);
289 int calcComplexity(
const char* process);
296 void printVarsForDot(std::ostream &os,
bool ranked,
bool erd)
override;
300 SignalFlow(_title, ta), distancesUpToDate(false), taSystem(ta) {}
303 void addVariableNeedle(
const char* var);
305 void addProcessNeedle(
const char* proc);
307 void updateDistances();
309 uint32_t getDistance(
const char* element);
312 void printForDot(std::ostream &os,
bool ranked,
bool erd,
313 bool cEdged)
override;
print(std::ostream &out, const char *sep)
virtual void printChansOnEdgesForDot(std::ostream &os)
Class SignalFlow is for analysing UPPAAL specifications and extracting the timed automata input/outpu...
Partial instance of a template.
int32_t visitWhileStatement(WhileStatement *stat) override
int32_t visitBreakStatement(BreakStatement *stat) override
void visitExpression(const expression_t &)
DistanceCalculator is used in TargetFirst heuristic search order of Uppaal.
int32_t visitCaseStatement(CaseStatement *stat) override
virtual void printVarsReadForDot(std::ostream &os)
virtual void printForDot(std::ostream &os, bool ranked, bool erd, bool cEdged)
Print I/O information in DOT format into given output stream.
virtual ~SignalFlow()
All strings are from TASystem (don't dispose TASystem before SignalFlow).
int32_t visitIfStatement(IfStatement *stat) override
void visitProcess(instance_t &)
int32_t visitContinueStatement(ContinueStatement *stat) override
Statement class for the iterator loop-construction.
void addChan(const std::string &, strs_t &, str2procs_t &)
int32_t visitDefaultStatement(DefaultStatement *stat) override
std::stack< std::pair< bool, bool > > ioStack
int32_t visitEmptyStatement(EmptyStatement *stat) override
System visitor pattern extracts read/write information from UCode.
virtual void printProcsForDot(std::ostream &os, bool erd)
std::set< proc_t * > procs_t
bool operator()(const char *s1, const char *s2) const
int32_t visitBlockStatement(BlockStatement *stat) override
Partitions the system into environment and IUT according to TRON assumptions.
std::map< const char *, strs_t > str2strs_t
Partitioner(const char *_title, TimedAutomataSystem &ta)
std::ostream & operator<<(std::ostream &os, const SignalFlow::strs_t &s)
std::set< const char *, const less_str > strs_t
virtual void printChansSeparateForDot(std::ostream &os, bool ranked, bool erd)
std::stack< exprref_t > valparams
std::stack< exprref_t > refparams
virtual void printVarsForDot(std::ostream &os, bool ranked, bool erd)
int32_t visitIterationStatement(IterationStatement *stat) override
std::map< const proc_t *, strs_t > proc2strs_t
print – template for pretty printing lists.
bool checkParams(const symbol_t &s)
int32_t visitReturnStatement(ReturnStatement *stat) override
std::map< const symbol_t, expression_t > exprref_t
proc_t(const char *_name)
SignalFlow(const char *_title, TimedAutomataSystem &ta)
Analyse the system and extract I/O information:
void addVar(const symbol_t &, str2strs_t &, str2procs_t &)
void printForTron(std::ostream &os)
Print I/O information in TRON format into given output stream.
int32_t visitSwitchStatement(SwitchStatement *stat) override
void operator()(const T &x)
A reference to an expression.
DistanceCalculator(const char *_title, TimedAutomataSystem &ta)
int32_t visitForStatement(ForStatement *stat) override
std::map< const char *, procs_t, less_str > str2procs_t
int32_t visitExprStatement(ExprStatement *stat) override
void setVerbose(int verbose)
int32_t visitDoWhileStatement(DoWhileStatement *stat) override
virtual void printVarsWriteForDot(std::ostream &os)
int32_t visitAssertStatement(UTAP::AssertStatement *stat) override
TimedAutomataSystem & taSystem