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>
180 print(std::ostream& out,
const char* sep):
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; }
252 void printForDot(std::ostream &os,
bool ranked,
bool erd,
bool cEdged);
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);
300 SignalFlow(_title, ta), distancesUpToDate(false), taSystem(ta) {}
312 virtual void printForDot(std::ostream &os,
bool ranked,
bool erd,
int32_t visitDefaultStatement(DefaultStatement *stat)
Definition: signalflow.cpp:753
const char * name
Definition: signalflow.h:70
virtual void printVarsWriteForDot(std::ostream &os)
Definition: signalflow.cpp:153
std::map< const char *, procs_t, less_str > str2procs_t
Definition: signalflow.h:77
Definition: statement.h:180
int32_t visitReturnStatement(ReturnStatement *stat)
Definition: signalflow.cpp:783
void addVariableNeedle(const char *var)
adds a variable needle to I/O map
Definition: signalflow.cpp:1520
strs_t varsIUT
Definition: signalflow.h:233
Definition: statement.h:75
void updateDistances()
Recalculates the distances to needles.
Definition: signalflow.cpp:1792
int32_t visitEmptyStatement(EmptyStatement *stat)
System visitor pattern extracts read/write information from UCode.
Definition: signalflow.cpp:691
void setVerbose(int verbose)
Definition: signalflow.h:129
bool paramsExpanded
Definition: signalflow.h:90
strs_t variables
Definition: signalflow.h:85
instance_t * cP
Definition: signalflow.h:87
SignalFlow(const char *_title, TimedAutomataSystem &ta)
Analyse the system and extract I/O information:
Definition: signalflow.cpp:50
int32_t visitSwitchStatement(SwitchStatement *stat)
Definition: signalflow.cpp:741
virtual void printVarsForDot(std::ostream &os, bool ranked, bool erd)
Definition: signalflow.cpp:120
Definition: statement.h:193
virtual ~SignalFlow()
All strings are from TASystem (don't dispose TASystem before SignalFlow).
Definition: signalflow.cpp:789
A reference to a symbol.
Definition: symbols.h:107
strs_t chansBad
Definition: signalflow.h:232
std::map< const proc_t *, strs_t > proc2strs_t
Definition: signalflow.h:65
void addIntChans(const procs_t &procs, strs_t &result, strs_t &exclude)
Takes the internal channels of each process from procs list and adds them to the result list...
Definition: signalflow.cpp:850
std::ostream & operator<<(std::ostream &os, const SignalFlow::strs_t &s)
Definition: signalflow.h:189
strs_t outChans
Definition: signalflow.h:71
int32_t visitExprStatement(ExprStatement *stat)
Definition: signalflow.cpp:696
Statement class for the iterator loop-construction.
Definition: statement.h:91
int32_t visitBreakStatement(BreakStatement *stat)
Definition: signalflow.cpp:768
strs_t varsBad
Definition: signalflow.h:233
Partitions the system into environment and IUT according to TRON assumptions.
Definition: signalflow.h:228
int32_t visitForStatement(ForStatement *stat)
Definition: signalflow.cpp:708
const char * infix
Definition: signalflow.h:178
str2procs_t transmitters
Definition: signalflow.h:84
int32_t visitCaseStatement(CaseStatement *stat)
Definition: signalflow.cpp:747
print(std::ostream &out, const char *sep)
Definition: signalflow.h:180
strs_t processes
Definition: signalflow.h:85
Definition: statement.h:202
procs_t procs
Definition: signalflow.h:83
Definition: statement.h:55
Definition: statement.h:222
Partial instance of a template.
Definition: system.h:331
Definition: statement.h:152
Class SignalFlow is for analysing UPPAAL specifications and extracting the timed automata input/outpu...
Definition: signalflow.h:56
bool operator()(const char *s1, const char *s2) const
Definition: signalflow.h:60
void operator()(const T &x)
Definition: signalflow.h:182
DistanceCalculator(const char *_title, TimedAutomataSystem &ta)
Definition: signalflow.h:299
Definition: statement.h:211
bool out
Definition: signalflow.h:90
std::set< const char *, const less_str > strs_t
Definition: signalflow.h:64
std::map< const char *, strs_t > str2strs_t
Definition: signalflow.h:67
virtual void printChansSeparateForDot(std::ostream &os, bool ranked, bool erd)
Definition: signalflow.cpp:290
procs_t procsBad
Definition: signalflow.h:231
bool inp
Definition: signalflow.h:90
Definition: statement.h:105
~Partitioner()
Definition: signalflow.cpp:797
procs_t procsEnv
Definition: signalflow.h:231
void visitProcess(instance_t &)
Definition: signalflow.cpp:420
void addChan(const std::string &, strs_t &, str2procs_t &)
Definition: signalflow.cpp:394
void addVar(const symbol_t &, str2strs_t &, str2procs_t &)
Definition: signalflow.cpp:407
void printForDot(std::ostream &os, bool ranked, bool erd, bool cEdged)
Print I/O information in DOT format into given output stream.
Definition: signalflow.cpp:1213
uint32_t getDistance(const char *element)
Finds a distance measure for given element.
Definition: signalflow.cpp:1772
Definition: statement.h:127
int32_t visitContinueStatement(ContinueStatement *stat)
Definition: signalflow.cpp:773
Definition: statement.h:172
Definition: statement.h:65
std::stack< exprref_t > valparams
Definition: signalflow.h:93
void popIO()
Definition: signalflow.h:103
str2strs_t rdVars
Definition: signalflow.h:72
TimedAutomataSystem & taSystem
Definition: signalflow.h:292
virtual void printVarsReadForDot(std::ostream &os)
Definition: signalflow.cpp:175
virtual void printForDot(std::ostream &os, bool ranked, bool erd, bool cEdged)
Print I/O information in DOT format into given output stream.
Definition: signalflow.cpp:326
Definition: statement.h:162
int partition(const strs_t &inputs, const strs_t &outputs)
Definition: signalflow.cpp:1071
void fillWithEnvProcs(strs_t &procs)
Definition: signalflow.cpp:1507
Definition: signalflow.h:69
A reference to an expression.
Definition: expression.h:68
int32_t visitWhileStatement(WhileStatement *stat)
Definition: signalflow.cpp:716
void printForTron(std::ostream &os)
Print I/O information in TRON format into given output stream.
Definition: signalflow.cpp:66
virtual void printProcsForDot(std::ostream &os, bool erd)
Definition: signalflow.cpp:101
str2procs_t receivers
Definition: signalflow.h:84
std::map< const symbol_t, expression_t > exprref_t
Definition: signalflow.h:78
strs_t chansOut
Definition: signalflow.h:234
bool sync
Definition: signalflow.h:90
bool checkParams(const symbol_t &s)
Definition: signalflow.cpp:359
Partitioner(const char *_title, TimedAutomataSystem &ta)
Definition: signalflow.h:246
const char * cChan
Definition: signalflow.h:88
void visitExpression(const expression_t &)
Definition: signalflow.cpp:444
int32_t visitAssertStatement(UTAP::AssertStatement *stat)
Definition: signalflow.cpp:778
Definition: signalflow.h:59
std::stack< exprref_t > refparams
Definition: signalflow.h:92
virtual ~DistanceCalculator()
Definition: signalflow.cpp:1761
strs_t channels
Definition: signalflow.h:85
int32_t visitBlockStatement(BlockStatement *stat)
Definition: signalflow.cpp:729
Definition: statement.h:46
void addIntVars(const procs_t &procs, strs_t &result, strs_t &exclude)
Takes the variables of each process from procs list and adds them to the result list.
Definition: signalflow.cpp:896
proc_t(const char *_name)
Definition: signalflow.h:74
void addProcessNeedle(const char *proc)
adds a variable needle to I/O map
Definition: signalflow.cpp:1553
int verbosity
Definition: signalflow.h:81
virtual void printVarsForDot(std::ostream &os, bool ranked, bool erd)
Definition: signalflow.cpp:1726
int32_t visitDoWhileStatement(DoWhileStatement *stat)
Definition: signalflow.cpp:722
std::ostream & os
Definition: signalflow.h:177
Definition: statement.h:116
virtual void printChansOnEdgesForDot(std::ostream &os)
Definition: signalflow.cpp:197
proc2strs_t outEdges
Definition: signalflow.h:73
int32_t visitIfStatement(IfStatement *stat)
Definition: signalflow.cpp:758
bool need
Definition: signalflow.h:179
void fillWithIUTProcs(strs_t &procs)
Definition: signalflow.cpp:1513
std::stack< std::pair< bool, bool > > ioStack
Definition: signalflow.h:91
int32_t visitIterationStatement(IterationStatement *stat)
Definition: signalflow.cpp:702
DistanceCalculator is used in TargetFirst heuristic search order of Uppaal.
Definition: signalflow.h:266
virtual void printProcsForDot(std::ostream &os, bool erd)
Definition: signalflow.cpp:1699
strs_t varsEnv
Definition: signalflow.h:233
strs_t inChans
Definition: signalflow.h:71
strs_t chansIntEnv
Definition: signalflow.h:232
std::set< proc_t * > procs_t
Definition: signalflow.h:76
strs_t observable
Definition: signalflow.h:232
void printViolation(const proc_t *process, const char *variable)
Definition: signalflow.cpp:805
strs_t chansInp
Definition: signalflow.h:234
const char * rule
Definition: signalflow.h:235
procs_t procsIUT
Definition: signalflow.h:231
print – template for pretty printing lists.
Definition: signalflow.h:175
str2strs_t wtVars
Definition: signalflow.h:72
void addProcs(const strs_t &chans, const str2procs_t &index, procs_t &result, procs_t &exclude)
Adds processes to the result which use the channels from chans list according to index.
Definition: signalflow.cpp:817
const char * title
Definition: signalflow.h:82
strs_t chansIntIUT
Definition: signalflow.h:232
virtual void printForDot(std::ostream &os, bool ranked, bool erd, bool cEdged)
Print I/O information in DOT format into given output stream.
Definition: signalflow.cpp:1784
std::string chanString
Definition: signalflow.h:89
void addProcsByVars(const strs_t &vars, procs_t &procs, procs_t &exclude)
Take all variables and add all accessing processes to the list.
Definition: signalflow.cpp:945
void pushIO()
Definition: signalflow.h:100
proc_t * cTA
Definition: signalflow.h:86