36 using namespace Constants;
    52 = 
"Internal error: Feature not supported in this mode.";
    57     std::string str = 
"LOCATION (";
    58     str += uid.getName() + 
", " + invariant.toString() + 
")";
    64     std::string str = 
"EDGE (" + src->toString() + 
" " + dst->toString() + 
")\n";
    65     str += 
"\t" + guard.toString() + 
", " + sync.toString() + 
", " + assign.toString();
    77     string type = uid.getType().get(0).toDeclarationString(); 
    78     str += type + 
" " + uid.getName();
    80     for (uint32_t i = 1; i < uid.getType().size(); ++i) 
    82         if (!uid.getType().getLabel(i).empty())
    84             str += uid.getType().get(i).toDeclarationString();
    86             str += uid.getType().getLabel(i);
    90     if (uid.getType().size()>1)
    91         str = str.substr(0, str.size()-2);
    94     std::list<variable_t>::const_iterator itr;
    97         str += 
"    " + itr->toString();
   100     str += body->toString(
INDENT);
   109     if (uid.getType().isArray())
   111         type = uid.getType().toDeclarationString();
   112         size_t i = type.find(
'[');
   113         str += type.substr(0, (
int)i);
   115         str += uid.getName();
   116         str += type.substr((
int)i , type.size() - (int)i);
   120     str += uid.getType().toDeclarationString() + 
" "   125         str += 
" = " + expr.toString();
   132     bool duplicate = frame.getIndexOf(name) != -1;
   134     fun = &functions.back();
   135     fun->
uid = frame.addSymbol(name, type, fun); 
   142     str += getConstants();
   144     str += getTypeDefinitions();
   146     str += getVariables(global);
   148     str += getFunctions();
   154     list<variable_t>::const_iterator v_itr = 
variables.begin();
   163                 str += 
"// constants\n";
   166             if (v_itr->uid.getType().getKind() == 
CONSTANT)
   168                 str += v_itr->toString();
   182     for (uint32_t i = 0; i < frame.getSize(); ++i)
   184         if (frame[i].getType().getKind() == 
TYPEDEF)
   188                 str += 
"// type definitions\n";
   191             str += frame[i].getType().toDeclarationString() + 
";\n";
   199     list<variable_t>::const_iterator v_itr = 
variables.begin();
   209                 str += 
"// variables\n";
   212             if (v_itr->uid.getType().getKind() != 
CONSTANT)
   214                 str += v_itr->toString();
   225     list<function_t>::const_iterator f_itr;
   228     if (!functions.empty()){
   229         str += 
"// functions\n";
   230         for (f_itr = functions.begin(); f_itr != functions.end(); ++f_itr)
   232             str += f_itr->toString();
   241     std::string str = 
"";
   242     std::map<symbol_t, expression_t>::const_iterator itr;
   243     for (itr = mapping.begin(); itr != mapping.end(); ++itr)
   245         str += itr->first.getName() + 
" = " + itr->second.toString() + 
"\n";
   252     std::string str = 
"";
   253     for (uint32_t i = 0; i < parameters.getSize(); ++i)
   255         str += parameters[i].getType().toDeclarationString()
   256             + 
" " + parameters[i].getName() + 
", ";
   258     if (parameters.getSize() > 0)
   260         str = str.substr(0, str.size() -2);
   267     std::string str = 
"";
   268     std::map<symbol_t, expression_t>::const_iterator itr;
   269     for (uint32_t i = 0; i < parameters.getSize(); ++i)
   271         for (itr = mapping.begin(); itr != mapping.end(); ++ itr)
   273             if ( itr->first == parameters[i])
   275                 str += itr->second.toString();
   280     if (parameters.getSize() > 0)
   282         str = str.substr(0, str.size() -2);
   289     bool duplicate = frame.getIndexOf(name) != -1;
   292     state_t &state = states.back();
   294     state.
locNr = states.size() - 1;
   300         throw TypeException(boost::format(
"$Duplicate_definition_of %1%") % name);
   310     bool duplicate = frame.getIndexOf(name) != -1;
   315     branchpoint.
bpNr = branchpoints.size() - 1;
   319         throw TypeException(boost::format(
"$Duplicate_definition_of %1%") % name);
   327     int32_t nr = 
edges.empty() ? 0 : 
edges.back().nr + 1;
   332         edges.back().srcb = 0;
   336         edges.back().src = 0;
   342         edges.back().dstb = 0;
   346         edges.back().dst = 0;
   350     edges.back().control = control;
   351     edges.back().actname = actname;
   352     edges.back().nr = nr;
   377     int32_t nr = messages.empty() ? 0 : messages.back().
nr + 1;
   381     messages.back().location = loc;
   382     messages.back().isInPrechart = pch;
   383     messages.back().nr = nr;
   384     return messages.back();
   389     int32_t nr = updates.empty() ? 0 : updates.back().
nr + 1;
   392     updates.back().location = loc;
   393     updates.back().isInPrechart = pch;
   394     updates.back().nr = nr;
   395     return updates.back();
   399         bool pch, 
bool isHot)
   401     int32_t nr = conditions.empty() ? 0 : conditions.back().
nr + 1;
   404     for (
unsigned int i(0); i<anchors.size(); ++i){
   405         conditions.back().anchors.push_back(static_cast<instanceLine_t*>(anchors[i].getData()));
   407     conditions.back().location = loc;
   408     conditions.back().isInPrechart = pch;
   409     conditions.back().nr = nr;
   410     conditions.back().isHot = isHot;
   411     return conditions.back();
   417     deque<message_t>::iterator itr;
   420     for (itr = messages.begin(); itr != messages.end(); ++itr)
   422         d.push_back(itr->nr);
   429     deque<condition_t>::iterator itr;
   432     for (itr = conditions.begin(); itr != conditions.end(); ++itr)
   434         d.push_back(itr->nr);
   441     deque<update_t>::iterator itr;
   444     for (itr = updates.begin(); itr != updates.end(); ++itr)
   446         d.push_back(itr->nr);
   470     deque<int>::iterator m_itr;
   471     deque<int>::iterator c_itr;
   472     deque<int>::iterator u_itr;
   474     vector<simregion_t> simregions;
   484     for (m_itr = m_nr.begin(); m_itr!=m_nr.end(); ++m_itr)
   496         if (getCondition(target, y, s.
condition))
   498             for (c_itr = c_nr.begin(); c_itr != c_nr.end(); ++c_itr)
   507         else if (getCondition(source, y, s.
condition))
   509             for (c_itr = c_nr.begin(); c_itr != c_nr.end(); ++c_itr)
   518         if (getUpdate(target, y, s.
update))
   520             for (u_itr = u_nr.begin(); u_itr != u_nr.end(); ++u_itr)
   529         else if (getUpdate(source, y, s.
update))
   531             for (u_itr = u_nr.begin(); u_itr != u_nr.end(); ++u_itr)
   541         simregions.push_back(s);
   548     for (c_itr = c_nr.begin(); c_itr != c_nr.end(); ++c_itr)
   556             for (u_itr = u_nr.begin(); u_itr != u_nr.end(); ++u_itr)
   566         simregions.push_back(s);
   573     for (u_itr = u_nr.begin(); u_itr != u_nr.end(); ++u_itr)
   578         simregions.push_back(s);
   596     deque<condition_t>::iterator i;
   597     vector<instanceLine_t*>::iterator j;
   599     for (i = conditions.begin(); i != conditions.end(); ++i)
   604             vector<instanceLine_t*>& anchors = condition.
anchors;
   605             for (j = anchors.begin(); j != anchors.end(); ++j)
   610                     simCondition = &condition;
   625     deque<update_t>::iterator i;
   626     for (i = updates.begin(); i != updates.end(); ++i)
   647     vector<instanceLine_t*>::const_iterator j;
   650     for (j = instances.begin(); j != instances.end(); ++j)
   652         if (getUpdate(*j, y, simUpdate))
   659     const vector<expression_t> &arguments1)
   665     arguments = arguments1.size();
   668     for (
size_t i = 0; i < arguments1.size(); i++)
   679     vector<simregion_t> i_simregions;
   680     vector<simregion_t>::const_iterator itr;
   681     vector<simregion_t>::iterator itr1;
   682     vector<instanceLine_t*>::const_iterator it;
   685     for (itr = simregions.begin(); itr != simregions.end(); ++itr) {
   689             i_simregions.push_back(*itr);
   695             i_simregions.push_back(*itr);
   703                 if (instance->
instanceNr == this->instanceNr) {
   704                     i_simregions.push_back(*itr);
   725     if (this->message->nr != -1)
   727         return this->message->location;
   729     if (this->condition->nr != -1)
   731         return this->condition->location;
   733     if (this->update->nr != -1)
   735         return this->update->location;
   742     if (this->message && this->message->nr != -1)
   744         return this->message->isInPrechart;
   746     if (this->condition && this->condition->nr != -1)
   748         return this->condition->isInPrechart;
   750     if (this->update && this->update->nr != -1)
   752         return this->update->isInPrechart;
   758     std::deque<message_t>::iterator i;
   759     for (i = messages.begin(); i != messages.end(); ++i) {
   761             this->message = &(*i);
   768     std::deque<condition_t>::iterator i;
   769     for (i = conditions.begin(); i != conditions.end(); ++i) {
   771             this->condition = &(*i);
   778     std::deque<update_t>::iterator i;
   779     for (i = updates.begin(); i != updates.end(); ++i) {
   781             this->update = &(*i);
   789     if (message->nr != -1) {
   790         s += (
"m:" + message->label.toString() + 
" ");
   792     if (condition->nr != -1) {
   793         std::string b = (condition->isHot) ? 
" HOT " : 
"";
   794         s += (
"c:" + b + (condition->label.toString()) + 
" ");
   796     if (update->nr != -1) {
   797         s += (
"u:" + update->label.toString() + 
" ");
   799     s = s.substr(0, s.size()-1);
   806     std::vector<simregion_t>::iterator sim;
   807     for (sim = simregions.begin(); sim != simregions.end(); ++sim) {
   808         if (sim->nr == s.
nr) {
   809             simregions.erase(sim);
   815     std::vector<simregion_t>::iterator sim;
   816     for (sim = simregions.begin(); sim != simregions.end(); ++sim) {
   817         if (sim->nr == s.
nr) {
   835     std::vector<simregion_t>::const_iterator sim;
   836     std::vector<simregion_t>::const_iterator fsim;
   837     for (sim = simregions.begin(); sim != simregions.end(); ++sim)
   839         if (! sim->isInPrechart())
   853     std::vector<simregion_t>::const_iterator sim;
   854     for (sim = simregions.begin(); sim != simregions.end(); ++sim)
   856         if (! sim->isInPrechart())
   865     std::vector<simregion_t>::const_iterator s;
   866     std::vector<simregion_t>::iterator sim;
   867     int xsize = simregions.size();
   871     std::vector<simregion_t> ycopy = std::vector<simregion_t>(y.
simregions);
   872     for (s = simregions.begin(); s != simregions.end(); ++s)
   874         for (sim = ycopy.begin(); sim != ycopy.end(); ++sim)
   876             if (sim->nr == s->nr)
   883     return (ycopy.empty()) ? 
true : 
false;
   896     return (strcasecmp(this->mode.c_str(), 
"invariant") == 0);
   901     std::ostringstream stream;
   902     stream << 
"chan priority ";
   903     string head_s = head.toString();
   904     if (head_s.size() == 0) head_s = 
"default";
   907     std::list<entry>::const_iterator itr;
   908     for (itr = tail.begin(); itr != tail.end(); ++itr)
   910         if (itr->first == 
'<') stream << 
" ";
   911         stream << itr->first << 
" ";
   912         stream << itr->second.toString();
   972         const bool isTA, 
const string& typeLSC, 
const string& mode)
   982     templ.
templ = &templ;
   987     templ.dynamic = 
false;
   989     templ.type = typeLSC;
  1003     templ.
templ = &templ;
  1008     templ.dynamic = 
true;
  1010     templ.isDefined = 
false;
  1018         std::list<template_t>::iterator it;
  1028     std::list<template_t>::iterator it;
  1030         if (it->uid.getName() == name)
  1039     const vector<expression_t> &arguments)
  1053     for (
size_t i = 0; i < arguments.size(); i++)
  1063     const vector<expression_t> &arguments)
  1077     for (
size_t i = 0; i < arguments.size(); i++)
  1088     std::list<instance_t>::iterator itr;
  1091         if (itr->uid == instance.
uid) {
  1138     var->
expr = initial;
  1147     var = 
addVariable(function->variables, frame, type, name);
  1148     var->
expr = initial;
  1156     bool duplicate = frame.
getIndexOf(name) != -1;
  1168         throw TypeException(boost::format(
"$Duplicate_definition_of %1%") % name);
  1176     std::list<UTAP::variable_t>::iterator v_itr;
  1200     for (
size_t i = 0; i < frame.
getSize(); i++)
  1202         type_t type = frame[i].getType();
  1210         void *data = frame[i].getData();
  1226             visitor.
visitState(*static_cast<state_t*>(data));
  1244     auto visit_template = [&visitor](
template_t& t) {
  1247             visit(visitor, t.frame);
  1248             for (
auto& edge: t.edges)
  1250             for (
auto& message: t.messages)
  1252             for (
auto& update: t.updates)
  1254             for (
auto& condition: t.conditions)
  1269         type_t type = frame.getType();
  1270         void *data = frame.getData();
  1324     priorities.
head = chan;
  1330     assert(separator == 
',' || separator == 
'<');
  1393     uint32_t position, uint32_t offset, uint32_t line, 
const std::string& path)
  1395     positions.
add(position, offset, line, path);
  1400     return positions.find(position);
  1404                                    const std::string& context)
  1406     errors.emplace_back(positions.find(position.
start),
  1407                         positions.find(position.
end),
  1408                         position, msg, context);
  1412                                      const std::string& context)
  1414     warnings.emplace_back(positions.find(position.
start),
  1415                           positions.find(position.
end),
  1416                           position, msg, context);
  1433     return !errors.empty();
  1438     return !warnings.empty();
 
const std::vector< simregion_t > getSimregions()
returns the simregions of an LSC scenario. 
 
symbol_t uid
The symbol of the variables. 
 
std::list< instance_t > instances
 
void recordStrictInvariant()
Record that the system has some strict invariant. 
 
Partial instance of a template. 
 
std::string toString() const
 
void recordStopWatch()
Record that the system stops a clock. 
 
struct template_t * templ
 
bool hasGuardOnRecvBroadcast
 
void addProgressMeasure(declarations_t *, expression_t guard, expression_t measure)
 
std::list< variable_t > variables
Variables. 
 
instanceLine_t * anchor
Pointer to anchor instance line. 
 
symbol_t uid
The symbol of the location. 
 
edge_t & addEdge(symbol_t src, symbol_t dst, bool type, const std::string &actname)
Add edge to template. 
 
virtual void visitProgressMeasure(progress_t &)
 
instance_t & addInstance(const std::string &name, instance_t &instance, frame_t params, const std::vector< expression_t > &arguments)
 
void addPosition(uint32_t position, uint32_t offset, uint32_t line, const std::string &path)
 
void erase(simregion_t s)
 
void addQuery(const query_t &query)
 
bool hasPriorityDeclaration() const
Returns true if system has some priority declaration. 
 
bool hasStrictLowControlledGuards
 
bool isInPrechart() const
 
virtual void visitInstanceLine(instanceLine_t &)
 
uint32_t getSize() const
Returns the number of symbols in this frame. 
 
std::string toString() const
 
bool hasStrictInvariants() const
Returns true if system has some strict invariant. 
 
static const char *const invalid_type
 
bool contains(simregion_t s)
 
bool getUpdate(instanceLine_t *instance, int y, update_t *&simUpdate)
gets the update on the given instance at y location, returns false if there isn't any ...
 
std::vector< simregion_t > getSimregions(const std::vector< simregion_t > &simregions)
return the simregions anchored to this instance, ordered by location number 
 
virtual void visitSystemAfter(TimedAutomataSystem *)
 
instance_t & addLscInstance(const std::string &name, instance_t &instance, frame_t params, const std::vector< expression_t > &arguments)
 
void addGantt(declarations_t *, gantt_t &)
 
std::list< template_t > dynamicTemplates
 
condition_t & addCondition(std::vector< symbol_t > anchors, int loc, bool pch, bool isHot)
Add condition to template. 
 
int nr
Placement in input file. 
 
Information about a location. 
 
std::string getFunctions() const
 
void setBeforeUpdate(expression_t)
 
std::string writeParameters() const
 
std::list< template_t > templates
 
sync_use_t
Synchronization usage options: I/O (with ? or !) or CSP (plain) 
 
std::vector< simregion_t > simregions
 
static type_t createInstance(frame_t, position_t=position_t())
Creates a new instance type. 
 
std::string getName() const
Returns the name (identifier) of this symbol. 
 
expression_t getAfterUpdate()
 
static deque< int > conditions_nr(deque< condition_t > conditions)
 
void addError(position_t, const std::string &msg, const std::string &ctx="")
 
std::string getTypeDefinitions() const
 
int32_t locNr
Location number in template. 
 
void addWarning(position_t, const std::string &msg, const std::string &ctx="")
 
std::list< entry > tail_t
 
bool equals(const cut_t &y) const
 
int nr
Placement in input file. 
 
static vector< edge_t > edges
 
frame_t parameters
The parameters. 
 
int32_t instanceNr
InstanceLine number in template. 
 
static type_t createPrimitive(Constants::kind_t, position_t=position_t())
Create a primitive type. 
 
virtual void visitUpdate(update_t &)
 
bool getCondition(instanceLine_t *instance, int y, condition_t *&simCondition)
gets the condition on the given instance, at y location, returns false if there isn't any ...
 
std::vector< template_t * > dynamicTemplatesVec
 
Information about an edge. 
 
expression_t exponentialRate
 
expression_t beforeUpdate
 
static type_t createLscInstance(frame_t, position_t=position_t())
Creates a new lsc instance type. 
 
std::string getVariables(bool global) const
 
static vector< string > variables
 
virtual ~TimedAutomataSystem()
 
update_t & addUpdate(symbol_t anchor, int loc, bool pch)
Add update to template. 
 
Information about an update. 
 
std::string toString() const
 
const std::vector< error_t > & getErrors() const
 
virtual void visitFunction(function_t &)
 
static const char *const unsupported
 
virtual void visitVariable(variable_t &)
 
expression_t head
First expression in priority declaration. 
 
void copyFunctionsFromTo(template_t *from, template_t *to) const
 
instanceLine_t & addInstanceLine()
Add another instance line to template. 
 
std::list< instance_t > & getProcesses()
Returns the processes of the system. 
 
message_t & addMessage(symbol_t src, symbol_t dst, int loc, bool pch)
Add message to template. 
 
virtual bool visitTemplateBefore(template_t &)
 
void remove(symbol_t s)
removes the given symbol 
 
Information about an instance line. 
 
void setMessage(std::deque< message_t > &messages, int nr)
 
void beginChanPriority(expression_t chan)
 
virtual void visitMessage(message_t &)
 
virtual void visitInstance(instance_t &)
 
int getLoc() const
May be empty. 
 
virtual void visitSystemBefore(TimedAutomataSystem *)
 
void addChanPriority(char separator, expression_t chan)
 
static frame_t createFrame()
Creates and returns a new root-frame. 
 
void setProcPriority(const char *name, int priority)
Sets process priority for process name. 
 
expression_t invariant
The invariant. 
 
template_t * getDynamicTemplate(const std::string &name)
 
std::list< gantt_t > ganttChart
 
void recordStrictLowerBoundOnControllableEdges()
Record that the system has guards on controllable edges with strict lower bounds. ...
 
queries_t & getQueries()
Returns the queries enclosed in the model. 
 
Base type for variables, clocks, etc. 
 
type_t stripArray() const
Removes any leading prefixes, RANGE, REF, LABEL and ARRAY types and returns the result. 
 
void setModified(bool mod)
 
const std::vector< error_t > & getWarnings() const
 
void setUpdate(std::deque< update_t > &updates, int nr)
 
std::string writeMapping() const
 
Channel priority information. 
 
update_t * update
May be empty. 
 
bool addFunction(type_t type, const std::string &, function_t *&)
Add function declaration. 
 
std::vector< instanceLine_t * > anchors
Pointer to anchor instance lines. 
 
bool isInPrechart() const
 
void setAfterUpdate(expression_t)
 
bool isInvariant()
return true if the LSC is of invariant mode 
 
Exception indicating a type error. 
 
virtual void visitGanttChart(gantt_t &)
 
static type_t createProcessSet(type_t instance, position_t=position_t())
Creates a new processset type. 
 
Information about a branchpoint. 
 
virtual void visitEdge(edge_t &)
 
std::list< iodecl_t > iodecl
 
virtual void visitProcess(instance_t &)
 
expression_t expr
The initialiser. 
 
std::map< symbol_t, expression_t > mapping
The arguments. 
 
type_t getType() const
Returns the type of this symbol. 
 
static deque< int > messages_nr(deque< message_t > messages)
 
state_t & addLocation(const std::string &, expression_t inv, expression_t er)
Add another location to template. 
 
virtual void visitTemplateAfter(template_t &)
 
std::map< std::string, int > procPriority
 
void add(uint32_t position, uint32_t offset, uint32_t line, const std::string &path)
Add information about a line to the container. 
 
symbol_t uid
The symbol of the function. 
 
Information about a message. 
 
void addProcess(instance_t &instance)
 
std::string toString() const
 
bool hasStopWatch() const
Returns true if the system stops any clock. 
 
void accept(SystemVisitor &)
 
A reference to an expression. 
 
variable_t * addVariable(declarations_t *, type_t type, const std::string &, expression_t initial)
 
instanceLine_t * dst
Pointer to destination instance line. 
 
Information about a function. 
 
variable_t * addVariableToFunction(function_t *, frame_t, type_t, const std::string &, expression_t initital)
 
void addParameters(instance_t &inst, frame_t params, const std::vector< expression_t > &arguments)
 
std::vector< template_t * > & getDynamicTemplates()
 
virtual void visitIODecl(iodecl_t &)
 
condition_t * condition
May be empty. 
 
void copyVariablesFromTo(template_t *from, template_t *to) const
 
template_t & addTemplate(const std::string &, frame_t params, const bool isTA=true, const std::string &type="", const std::string &mode="")
Creates and returns a new template. 
 
void setCondition(std::deque< condition_t > &conditions, int nr)
 
void * getData()
Returns the user data of this symbol. 
 
std::list< instance_t > processes
 
std::list< progress_t > progress
Progress measures. 
 
std::string toString(bool global=false) const
The following methods are used to write the declarations in an XML file. 
 
instanceLine_t * src
Pointer to source instance line. 
 
branchpoint_t & addBranchpoint(const std::string &)
Add another branchpoint to template. 
 
static deque< int > updates_nr(deque< update_t > updates)
 
expression_t getBeforeUpdate()
 
std::pair< char, expression_t > entry
 
static void visit(SystemVisitor &visitor, frame_t frame)
 
bool is(Constants::kind_t kind) const
Returns true if the type has kind kind or if type is a prefix, RANGE or REF type and the getChild()...
 
symbol_t addSymbol(const std::string &name, type_t, void *user=NULL)
Adds a symbol of the given name and type to the frame. 
 
std::string writeArguments() const
 
int getProcPriority(const char *name) const
Returns process priority for process name. 
 
std::list< template_t > & getTemplates()
Returns the templates of the system. 
 
bool isLocation() const
Shortcut for is(LOCATION). 
 
std::list< instance_t > lscInstances
 
template_t & addDynamicTemplate(const std::string &, frame_t params)
 
const std::list< chan_priority_t > & getChanPriorities() const
 
virtual void visitState(state_t &)
 
declarations_t & getGlobals()
Returns the global declarations of the system. 
 
std::string getConstants() const
 
void removeProcess(instance_t &instance)
 
int nr
Placement in input file. 
 
std::vector< query_t > queries_t
 
int32_t getIndexOf(const std::string &name) const
Returns the index of the symbol with the given name. 
 
Information about a condition. 
 
static type_t createProcess(frame_t, position_t=position_t())
Creates a new process type. 
 
Constants::kind_t getKind() const
Returns the kind of type object. 
 
bool hasStrictLowerBoundOnControllableEdges() const
Returns true if the system has guards on controllable edges with strict lower bounds. 
 
const Positions::line_t & findPosition(uint32_t position) const
 
std::string toString() const
 
std::list< chan_priority_t > & getMutableChanPriorities()
 
virtual void visitTypeDef(symbol_t)
 
std::string toString() const
 
virtual void visitCondition(condition_t &)
 
void add(symbol_t)
Add all symbols from the given frame. 
 
std::list< chan_priority_t > chanPriorities