|
From: <ob...@us...> - 2013-01-26 10:45:56
|
Revision: 1553
http://scstudio.svn.sourceforge.net/scstudio/?rev=1553&view=rev
Author: obouda
Date: 2013-01-26 10:45:44 +0000 (Sat, 26 Jan 2013)
Log Message:
-----------
merged from branch internal-structure-refactoring
Modified Paths:
--------------
trunk/src/check/order/acyclic_checker.cpp
trunk/src/check/pseudocode/msc_duplicators.cpp
trunk/src/check/pseudocode/utils.cpp
trunk/src/check/pseudocode/visual_closure_initiator.cpp
trunk/src/data/Z120/Context.cpp
trunk/src/data/Z120/z120_save.cpp
trunk/src/data/beautify/instance_sequencer.cpp
trunk/src/data/beautify/layout_optimizer.cpp
trunk/src/data/dfs_area_traverser.cpp
trunk/src/data/dfs_events_traverser.cpp
trunk/src/data/dfs_instance_events_traverser.cpp
trunk/src/data/exporttex/exportTex.cpp
trunk/src/data/modelchecking/divine.cpp
trunk/src/data/msc.cpp
trunk/src/data/msc.h
trunk/src/data/mscgen/MscgenContext.cpp
trunk/src/data/pcap/pcap_handler.cpp
trunk/src/data/time_relevant_ordering/dfs_backward_traverser.cpp
trunk/src/membership/diff_impl.cpp
trunk/src/membership/membership_additional.cpp
trunk/src/membership/membership_alg.cpp
trunk/src/membership/membership_base.h
trunk/src/membership/membership_time.cpp
trunk/src/montecarlo/montecarlo.cpp
Property Changed:
----------------
trunk/
trunk/src/data/Z120/z120_load.cpp
trunk/src/data/msc_types.h
trunk/tests/pcap/
trunk/tests/z120_test/CMakeLists.txt
trunk/tests/z120_test/z120_test.cpp
trunk/tests/z120_test/z120_test00.mpr
trunk/tests/z120_test/z120_test01.mpr
trunk/tests/z120_test/z120_test02.mpr
trunk/tests/z120_test/z120_test03.mpr
trunk/tests/z120_test/z120_test04.mpr
trunk/tests/z120_test/z120_test05.mpr
trunk/tests/z120_test/z120_test06.mpr
trunk/tests/z120_test/z120_test07.mpr
trunk/tests/z120_test/z120_test08.mpr
trunk/tests/z120_test/z120_test09.mpr
trunk/tests/z120_test/z120_test10.mpr
trunk/tests/z120_test/z120_test11.mpr
trunk/tests/z120_test/z120_test12.mpr
trunk/tests/z120_test/z120_test13.mpr
trunk/tests/z120_test/z120_test14.mpr
trunk/tests/z120_test/z120_test15.mpr
trunk/tests/z120_test/z120_test16.mpr
trunk/tests/z120_test/z120_test17.mpr
trunk/tests/z120_test/z120_test18.mpr
trunk/tests/z120_test/z120_test19.mpr
trunk/tests/z120_test/z120_test20.mpr
trunk/tests/z120_test/z120_test21.mpr
trunk/tests/z120_test/z120_test22.mpr
trunk/tests/z120_test/z120_test23.mpr
trunk/tests/z120_test/z120_test24.mpr
trunk/tests/z120_test/z120_test25.mpr
trunk/tests/z120_test/z120_test26.mpr
trunk/tests/z120_test/z120_test27.mpr
trunk/tests/z120_test/z120_test28.mpr
trunk/tests/z120_test/z120_test29.mpr
trunk/tests/z120_test/z120_test30.mpr
trunk/tests/z120_test/z120_test31.mpr
trunk/tests/z120_test/z120_test32.mpr
trunk/tests/z120_test/z120_test33.mpr
trunk/tests/z120_test/z120_test34.mpr
trunk/tests/z120_test/z120_test35.mpr
trunk/tests/z120_test/z120_test36.mpr
trunk/tests/z120_test/z120_test37.mpr
trunk/third-party-sw/http_parser/
trunk/third-party-sw/libosip2-3.6.0/
Property changes on: trunk
___________________________________________________________________
Added: svn:mergeinfo
+ /branches/internal-structure-refactoring:1540-1552
/branches/refactoring:1332-1337,1339,1341
Modified: trunk/src/check/order/acyclic_checker.cpp
===================================================================
--- trunk/src/check/order/acyclic_checker.cpp 2013-01-26 09:58:06 UTC (rev 1552)
+++ trunk/src/check/order/acyclic_checker.cpp 2013-01-26 10:45:44 UTC (rev 1553)
@@ -58,11 +58,11 @@
for(it = bmsc->get_instances().begin(); it != bmsc->get_instances().end(); it++)
{
ConnectionNode *dummy;
- EventAreaPtr eap = (*it)->get_first();
+ EventAreaPtr eap = (*it)->get_first_area();
while(eap)
{
if(eap->is_empty())
- eap = eap->get_next();
+ eap = eap->get_next_area();
else
break;
}
@@ -70,7 +70,7 @@
{
StrictOrderArea *seap = dynamic_cast<StrictOrderArea*>(eap.get());
if(seap)
- start->add_successor(seap->get_first()->get_attribute("ACC_node", dummy));
+ start->add_successor(seap->get_first_event()->get_attribute("ACC_node", dummy));
else
{
CoregionArea *ceap = dynamic_cast<CoregionArea*>(eap.get());
Modified: trunk/src/check/pseudocode/msc_duplicators.cpp
===================================================================
--- trunk/src/check/pseudocode/msc_duplicators.cpp 2013-01-26 09:58:06 UTC (rev 1552)
+++ trunk/src/check/pseudocode/msc_duplicators.cpp 2013-01-26 10:45:44 UTC (rev 1553)
@@ -446,7 +446,7 @@
{
CoregionEvent* preceding_new = dynamic_cast<CoregionEvent*>(m_duplicator->get_event_copy(preceding));
preceding_new->add_successor(coreg_new);
- // std::cerr << "creating coreg rel " << preceding_new << " -> " << coreg_new << std::endl;
+ // std::cerr << "creating coreg rel " << preceding_new << " -> " << coreg_new << std::endl;
}
}
}
@@ -767,7 +767,7 @@
NormalConstraintsCreatorListener::NormalConstraintsCreatorListener(BMscGraphDuplicator* duplicator):
m_duplicator(duplicator)
-{
+{
}
@@ -778,18 +778,18 @@
ReferenceNode** ref_node_a;
TimeRelationRefNodePtrSet relations;
TimeRelationRefNodePtrSet::iterator rel_it;
-
-
+
+
if(!ref_node_b){
return;
}
-
+
ref_node_original = dynamic_cast<ReferenceNode*>(n->get_original());
relations = ref_node_original->get_time_relations_top();
-
+
for(rel_it=relations.begin();rel_it!=relations.end();rel_it++){
-
+
//tries to access the map value for *rel_it
//if the value does not exist, map creates new entry
ref_node_a = &m_relations_to_close[*rel_it];
@@ -797,9 +797,9 @@
{
//time relation was already discovered
//duplicate time relation
- //the relaton should be between ref_node_a an ref_node_b
+ //the relaton should be between ref_node_a an ref_node_b
TimeRelationRefNode* rel_copy = new TimeRelationRefNode((*rel_it).get());
-
+
//checking wheter relation is connected to top or bottom of ref_node_a
bool bottom_a = (*rel_it).get()->is_bottom_node_a();
bool bottom_b = (*rel_it).get()->is_bottom_node_b();
@@ -823,23 +823,23 @@
relations = ref_node_original->get_time_relations_bottom();
for(rel_it=relations.begin();rel_it!=relations.end();rel_it++){
-
+
//tries to access the map value for key *rel_it
- //if the value does not exist, map creates new entry
+ //if the value does not exist, map creates new entry
ref_node_a = &m_relations_to_close[*rel_it];
-
+
if(*ref_node_a)
{
//time relation was already discovered
//duplicate time relation
- //the relaton should be between ref_node_a an ref_node_b
+ //the relaton should be between ref_node_a an ref_node_b
TimeRelationRefNode* rel_copy = new TimeRelationRefNode((*rel_it).get());
//checking wheter relation is connected to top or bottom of ref_node_a
bool top_a = (*rel_it).get()->is_top_node_a();
bool top_b = (*rel_it).get()->is_top_node_b();
//we know that one of top_a top_b is false
- //(relation is connected to bottom of this node)
+ //(relation is connected to bottom of this node)
top_a = (top_a || top_b);
rel_copy->glue_ref_node_a(!top_a,*ref_node_a);
@@ -854,7 +854,7 @@
}
}
}
-
+
NormalConstraintsCreatorListener::~NormalConstraintsCreatorListener()
{
}
@@ -863,7 +863,7 @@
HighLevelConstraintsCreatorListener::HighLevelConstraintsCreatorListener(BMscGraphDuplicator* duplicator):
m_duplicator(duplicator)
-{
+{
}
void HighLevelConstraintsCreatorListener::on_white_node_found(HMscNode* n)
@@ -871,13 +871,13 @@
ReferenceNode* ref_node = dynamic_cast<ReferenceNode*>(n) ;
//TODO find the HMSC time consraints which can be duplicated and duplicate them
// the following code is only temporary
- if(ref_node && ref_node->get_hmsc().get() &&
+ if(ref_node && ref_node->get_hmsc().get() &&
!(ref_node->get_time_relations_top().empty() && ref_node->get_time_relations_bottom().empty()))
{
throw FoundNontransformableConstraintException();
// throw std::runtime_error("High-level constraint- cannot create alternative.");
}
-
+
}
HighLevelConstraintsCreatorListener::~HighLevelConstraintsCreatorListener()
@@ -900,7 +900,7 @@
traverser.add_white_node_found_listener(&listener);
traverser.traverse(hmsc);
-
+
//should find the time constraints which can be duplicated and duplicate them
found_nontransformable_constraint = false;
traverser.remove_all_listeners();
@@ -914,13 +914,13 @@
// traverser.get_reached_elements();
// throw std::runtime_error("");
}
-
+
NormalConstraintsCreatorListener listener3(this);
traverser.remove_all_listeners();
traverser.cleanup_traversing_attributes();
traverser.add_white_node_found_listener(&listener3);
traverser.traverse(new_hmsc);
-
+
}
return new_hmsc;
}
@@ -1050,12 +1050,12 @@
{
ReferenceNode* a = (ReferenceNode*) get_copy((*it)->get_ref_node_a());
ReferenceNode* b = (ReferenceNode*) get_copy((*it)->get_ref_node_b());
-
+
if(!a || !b) return ; // do nothing until both reference nodes are duplicated
relation_copy = new TimeRelationRefNode((*it).get());
set_copy(it->get(),relation_copy.get());
-
+
// if its the same, false, true ??
if(a==b)
{
@@ -1234,7 +1234,7 @@
}
for(e=path.begin();e!=path.end();e++)
(*e)->remove_attribute<bool>("path_new_elem");
-
+
for(e=path.begin();e!=path.end();e++)
{
ReferenceNode* ref_node = dynamic_cast<ReferenceNode*>(*e);
@@ -1268,7 +1268,7 @@
}
ReferenceNode* a = (ReferenceNode*) get_copy((*it)->get_ref_node_a());
ReferenceNode* b = (ReferenceNode*) get_copy((*it)->get_ref_node_b());
-
+
relation_copy = new TimeRelationRefNode((*it).get());
set_copy(it->get(),relation_copy.get(),persist_original);
//std::cerr<<"gluing time relation between: "<<a<<" | "<<b<< "value: "<<it->get()->get_interval_set()<<std::endl;
@@ -1320,17 +1320,15 @@
std::map<BMsc*,int> bmsc_to_count;
BMscDuplicator duplicator2;
std::list<BMscPtr> created_bmscs;
-
+
InstancePtrList instances;
InstancePtrList::iterator inst_it;
InstancePtrList new_instances;
InstancePtrList::iterator new_inst_it;
Instance* new_instance;
- EventAreaPtr start_area;
- EventAreaPtr current_area;
MscElementPList remaining_elements;
MscElementPList duplicator_modified_elements;
-
+
m_modified_elements.clear();
MscElementPList::const_iterator f;
@@ -1339,97 +1337,92 @@
ReferenceNode* ref_node;
- if(path.size() == 0)
+ if (path.size() == 0)
{
return new_bmsc_ptr;
}
- for(g=path.begin();g!=path.end();g++)
+ for (g = path.begin(); g != path.end(); g++)
{
ref_node = dynamic_cast<ReferenceNode*>(*g);
- if(ref_node)
+ if (ref_node)
{
original_bmsc = ref_node->get_bmsc();
- if(original_bmsc.get()==0) {
- return new_bmsc_ptr;
+ if (original_bmsc.get() == 0) {
+ return new_bmsc_ptr;
}
}
}
- for(e=path.rbegin();e!=path.rend();e++)
+ for (e = path.rbegin(); e != path.rend(); e++)
{
ref_node = dynamic_cast<ReferenceNode*>(*e);
- if(ref_node)
+ if (ref_node)
{
original_bmsc = ref_node->get_bmsc();
//check whether the original_bmsc already occured
stored_copy = &(used_bmscs[original_bmsc]);
- if((*stored_copy).get())
+ if (stored_copy->get())
{
- //the original_bmsc was already duplicated
- //make new copy and use stored_copy
- (*stored_copy) = duplicator2.duplicate_bmsc(*stored_copy);
+ //the original_bmsc was already duplicated
+ //make new copy and use stored_copy
+ (*stored_copy) = duplicator2.duplicate_bmsc(*stored_copy);
bmsc_to_count[original_bmsc.get()]++;
- }else{
- // the original_bmsc has not occured yet
- //make new copies of original_bmsc and store the second one
- (*stored_copy) = duplicator2.duplicate_bmsc(original_bmsc);
+ }
+ else
+ {
+ // the original_bmsc has not occured yet
+ // make new copies of original_bmsc and store the second one
+ (*stored_copy) = duplicator2.duplicate_bmsc(original_bmsc);
bmsc_to_count[original_bmsc.get()] = 1;
}
created_bmscs.push_front(*stored_copy);
- m_ref_node_to_occurence[ref_node]= bmsc_to_count[original_bmsc.get()];
- }else if(!(dynamic_cast<NodeRelation*>(*e)
- || dynamic_cast<ConnectionNode*>(*e)
- || dynamic_cast<ConditionNode*>(*e)
- || dynamic_cast<StartNode*>(*e)
- || dynamic_cast<EndNode*>(*e)))
- {
+ m_ref_node_to_occurence[ref_node]= bmsc_to_count[original_bmsc.get()];
+ }
+ else if (!(dynamic_cast<NodeRelation*>(*e)
+ || dynamic_cast<ConnectionNode*>(*e)
+ || dynamic_cast<ConditionNode*>(*e)
+ || dynamic_cast<StartNode*>(*e)
+ || dynamic_cast<EndNode*>(*e)))
+ {
throw std::runtime_error("Unknown type");
}
}
std::list<BMscPtr>::iterator bmscs_it;
- for(bmscs_it=created_bmscs.begin();bmscs_it!=created_bmscs.end();bmscs_it++)
+ for (bmscs_it = created_bmscs.begin(); bmscs_it != created_bmscs.end(); bmscs_it++)
{
-
- instances = (*bmscs_it).get()->get_instances();
- for(inst_it = instances.begin();inst_it != instances.end();inst_it++)
- {
+ instances = bmscs_it->get()->get_instances();
+ for (inst_it = instances.begin(); inst_it != instances.end(); inst_it++)
+ {
new_instance = NULL;
new_instances = new_bmsc_ptr.get()->get_instances();
-
- //checking whether the instance with the same instance label as (*inst_it) is already present in new_bmsc
- for(new_inst_it=new_instances.begin();new_inst_it != new_instances.end();new_inst_it++){
- if((*inst_it).get()->get_label().compare((*new_inst_it).get()->get_label())==0)
- new_instance = (*new_inst_it).get();
+
+ // checking whether the instance with the same instance label as (*inst_it) is already present in new_bmsc
+ for (new_inst_it = new_instances.begin(); new_inst_it != new_instances.end(); new_inst_it++)
+ {
+ if (inst_it->get()->get_label().compare(new_inst_it->get()->get_label()) == 0)
+ new_instance = new_inst_it->get();
}
-
- if(new_instance){
- //instance with the same instance label is present in new_bmsc
- //concatenate the instances
- if(!((*inst_it).get()->is_empty()))
- {
- start_area = (*inst_it).get()->get_first();
- current_area = start_area; //TODO check whether I changed everything necessary
- current_area->set_instance(new_instance);
- while(current_area->get_next().get()){
- current_area = current_area->get_next();
- current_area->set_instance(new_instance);
- }
- if(new_instance->is_empty()){
- new_instance->set_first(start_area);
- }else{
- new_instance->get_last().get()->set_next(start_area); //concatenation
- }
- new_instance->set_last(current_area);
- }
- }else{
- //there is no instance with the same label present in new_bmsc
- //add the instance to the new_bmsc
- new_bmsc_ptr.get()->add_instance(*inst_it);
- (*inst_it).get()->set_original(NULL); //there can be more originals of this instance
+
+ if (new_instance)
+ {
+ // instance with the same instance label is present in new_bmsc
+ // concatenate the instances - move the event areas to new_instance
+ const EventAreaPtrList& event_areas = inst_it->get()->get_areas();
+ for (EventAreaPtrList::const_iterator i = event_areas.begin(); i != event_areas.end(); ++i)
+ {
+ new_instance->add_area(*i);
+ }
}
+ else
+ {
+ //there is no instance with the same label present in new_bmsc
+ //add the instance to the new_bmsc
+ new_bmsc_ptr.get()->add_instance(*inst_it);
+ inst_it->get()->set_original(NULL); //there can be more originals of this instance
+ }
}
}
@@ -1448,7 +1441,7 @@
duplicator2.set_m_modified_elements(remaining_elements);
duplicator2.cleanup_attributes();
-
+
return new_bmsc_ptr;
}
Modified: trunk/src/check/pseudocode/utils.cpp
===================================================================
--- trunk/src/check/pseudocode/utils.cpp 2013-01-26 09:58:06 UTC (rev 1552)
+++ trunk/src/check/pseudocode/utils.cpp 2013-01-26 10:45:44 UTC (rev 1553)
@@ -28,15 +28,15 @@
if(strict)
{
if(strict->is_empty())
- get_first_area_events(strict->get_next().get(),e);
+ get_first_area_events(strict->get_next_area().get(),e);
else
- m_succs.insert(strict->get_first().get());
+ m_succs.insert(strict->get_first_event().get());
}
else
{
CoregionArea* coregion = dynamic_cast<CoregionArea*>(area);
if(coregion->is_empty())
- get_first_area_events(coregion->get_next().get(),e);
+ get_first_area_events(coregion->get_next_area().get(),e);
else
{
const CoregionEventPVector& minimals = coregion->get_minimal_events();
@@ -52,7 +52,7 @@
if(e->get_successor().get())
m_succs.insert(e->get_successor().get());
else
- get_first_area_events(e->get_area()->get_next().get(),e);
+ get_first_area_events(e->get_area()->get_next_area().get(),e);
}
@@ -68,7 +68,7 @@
}
}
else
- get_first_area_events(e->get_area()->get_next().get(),e);
+ get_first_area_events(e->get_area()->get_next_area().get(),e);
}
void EventFirstSuccessors::get_successors(Event *e)
Modified: trunk/src/check/pseudocode/visual_closure_initiator.cpp
===================================================================
--- trunk/src/check/pseudocode/visual_closure_initiator.cpp 2013-01-26 09:58:06 UTC (rev 1552)
+++ trunk/src/check/pseudocode/visual_closure_initiator.cpp 2013-01-26 10:45:44 UTC (rev 1553)
@@ -35,15 +35,15 @@
{
if(pred_area->is_empty())
{
- if(!pred_area->is_first())
- make_closure(closure_matrix,succ_index,pred_area->get_previous());
+ if(!pred_area->is_first_area())
+ make_closure(closure_matrix,succ_index,pred_area->get_previous_area());
}
else
{
StrictOrderArea* strict_area = dynamic_cast<StrictOrderArea*>(pred_area);
if(strict_area)
{
- make_closure(closure_matrix,succ_index,get_topology_index(strict_area->get_last().get()));
+ make_closure(closure_matrix,succ_index,get_topology_index(strict_area->get_last_event().get()));
}
else
{
@@ -119,9 +119,9 @@
//complete closure with direct predecessor
make_closure(closure,e,get_topology_index(strict_event->get_predecessor()));
}
- else if(strict_event->get_area()->get_previous())
+ else if(strict_event->get_area()->get_previous_area())
{
- make_closure(closure,e,strict_event->get_area()->get_previous());
+ make_closure(closure,e,strict_event->get_area()->get_previous_area());
}
}
else
@@ -135,9 +135,9 @@
for(pred_rel=predecessors.begin();pred_rel!=predecessors.end();pred_rel++)
make_closure(closure,e,get_topology_index((*pred_rel)->get_predecessor()));
}
- else if(coregion_event->get_area()->get_previous())
+ else if(coregion_event->get_area()->get_previous_area())
{
- make_closure(closure,e,coregion_event->get_area()->get_previous());
+ make_closure(closure,e,coregion_event->get_area()->get_previous_area());
}
}
}
Modified: trunk/src/data/Z120/Context.cpp
===================================================================
--- trunk/src/data/Z120/Context.cpp 2013-01-26 09:58:06 UTC (rev 1552)
+++ trunk/src/data/Z120/Context.cpp 2013-01-26 10:45:44 UTC (rev 1553)
@@ -631,7 +631,7 @@
instance = inst_it->second;
}
- if (instance->get_last() == NULL ||
+ if (instance->get_last_area() == NULL ||
context->coregion_area_finished.find(context->element_name) != context->coregion_area_finished.end())
{
StrictOrderAreaPtr strict(new StrictOrderArea());
@@ -646,7 +646,7 @@
if(context->event_name == "" ||
(event_it = context->future_events.find(context->event_name)) == context->future_events.end())
{
- event = instance->get_last()->add_event();
+ event = instance->get_last_area()->add_event();
}
else
{
@@ -704,7 +704,7 @@
instance = inst_it->second;
}
- if (instance->get_last() == NULL ||
+ if (instance->get_last_area() == NULL ||
context->coregion_area_finished.find(context->element_name) != context->coregion_area_finished.end())
{
StrictOrderAreaPtr strict(new StrictOrderArea());
@@ -719,7 +719,7 @@
if(context->event_name == "" ||
(event_it = context->future_events.find(context->event_name)) == context->future_events.end())
{
- event = instance->get_last()->add_event();
+ event = instance->get_last_area()->add_event();
}
else
{
@@ -766,7 +766,7 @@
instance = inst_it->second;
}
- if (instance->get_last() == NULL ||
+ if (instance->get_last_area() == NULL ||
context->coregion_area_finished.find(context->element_name) != context->coregion_area_finished.end())
{
StrictOrderAreaPtr strict(new StrictOrderArea());
@@ -781,7 +781,7 @@
if(context->event_name == "" ||
(event_it = context->future_events.find(context->event_name)) == context->future_events.end())
{
- event = instance->get_last()->add_event();
+ event = instance->get_last_area()->add_event();
}
else
{
@@ -935,7 +935,7 @@
}
//add new strict area to instance if it is needed
- if (instance->get_last() == NULL ||
+ if (instance->get_last_area() == NULL ||
context->coregion_area_finished.find(context->element_name) != context->coregion_area_finished.end())
{
StrictOrderAreaPtr strict(new StrictOrderArea());
@@ -950,7 +950,7 @@
if(context->event_name == "" ||
(event_it = context->future_events.find(context->event_name)) == context->future_events.end())
{
- event = instance->get_last()->add_event();
+ event = instance->get_last_area()->add_event();
}
else
{
@@ -1039,7 +1039,7 @@
else
{
InstancePtr instance = context->instances.find(context->element_name)->second;
- EventPtr e = instance->get_last()->add_event();
+ EventPtr e = instance->get_last_area()->add_event();
event1 = boost::dynamic_pointer_cast<CoregionEvent>(e);
context->future_events.insert(std::make_pair(*it, event1));
Property changes on: trunk/src/data/Z120/z120_load.cpp
___________________________________________________________________
Deleted: svn:mergeinfo
-
Modified: trunk/src/data/Z120/z120_save.cpp
===================================================================
--- trunk/src/data/Z120/z120_save.cpp 2013-01-26 09:58:06 UTC (rev 1552)
+++ trunk/src/data/Z120/z120_save.cpp 2013-01-26 10:45:44 UTC (rev 1553)
@@ -502,8 +502,8 @@
stream << VALID_NAME((*ipos)->get_label()) << ": instance;" << std::endl;
// walk through event areas
- for(EventAreaPtr area = (*ipos)->get_first();
- area != NULL; area = area->get_next())
+ for(EventAreaPtr area = (*ipos)->get_first_area();
+ area != NULL; area = area->get_next_area())
{
print_element_attributes(stream, area);
@@ -511,7 +511,7 @@
if(strict_area != NULL)
{
// walk through events
- for(StrictEventPtr event = strict_area->get_first();
+ for(StrictEventPtr event = strict_area->get_first_event();
event != NULL; event = event->get_successor())
{
// check if the label needs to be printed
Modified: trunk/src/data/beautify/instance_sequencer.cpp
===================================================================
--- trunk/src/data/beautify/instance_sequencer.cpp 2013-01-26 09:58:06 UTC (rev 1552)
+++ trunk/src/data/beautify/instance_sequencer.cpp 2013-01-26 10:45:44 UTC (rev 1553)
@@ -128,14 +128,14 @@
{
double max_width = inst->get_width();
EventAreaPtr area;
- area = inst->get_first();
+ area = inst->get_first_area();
while(area)
{
CoregionArea* coregion;
coregion = dynamic_cast<CoregionArea*>(area.get());
if(coregion)
max_width = (coregion->get_width() > max_width) ? coregion->get_width() : max_width;
- area = area->get_next();
+ area = area->get_next_area();
}
return max_width;
@@ -496,7 +496,7 @@
for(InstancePtrList::const_iterator it = instances.begin(); it != instances.end(); it++)
{
EventAreaPtr area;
- area = it->get()->get_first();
+ area = it->get()->get_first_area();
while(area)
{
@@ -504,7 +504,7 @@
coregion = dynamic_cast<CoregionArea*>(area.get());
if(coregion)
coregion->set_width(m_cor_width_value);
- area = area->get_next();
+ area = area->get_next_area();
}
}
@@ -741,14 +741,14 @@
(*it)->set_width((Size)m_head_width_value);
EventAreaPtr area;
- area = (*it)->get_first();
+ area = (*it)->get_first_area();
while(area)
{
CoregionArea* coregion;
coregion = dynamic_cast<CoregionArea*>(area.get());
if(coregion)
coregion->set_width((Size)m_cor_width_value);
- area = area->get_next();
+ area = area->get_next_area();
}
}
Modified: trunk/src/data/beautify/layout_optimizer.cpp
===================================================================
--- trunk/src/data/beautify/layout_optimizer.cpp 2013-01-26 09:58:06 UTC (rev 1552)
+++ trunk/src/data/beautify/layout_optimizer.cpp 2013-01-26 10:45:44 UTC (rev 1553)
@@ -496,7 +496,7 @@
// traverse coregions and set the constraints between event e and coregion edges
EventAreaPtr area;
- area = (m_instances.at(i)).get()->get_first();
+ area = (m_instances.at(i)).get()->get_first_area();
while(area)
{
CoregionArea* coregion = dynamic_cast<CoregionArea*>(area.get());
@@ -508,7 +508,7 @@
add_absolute_distance_constraint(m_lp, e1, begin, m_successor_distance+crossing);
add_absolute_distance_constraint(m_lp, (begin+1), e1, m_successor_distance+crossing);
}
- area = area->get_next();
+ area = area->get_next_area();
}
}
}
@@ -583,11 +583,11 @@
}
int level;
- for(InstancePtrList::const_iterator instanc=bmsc->get_instances().begin(); instanc!=bmsc->get_instances().end(); instanc++)
+ for(InstancePtrList::const_iterator instance = bmsc->get_instances().begin(); instance != bmsc->get_instances().end(); instance++)
{
level = 0;
StrictEventPtr strictTmp;
- area = (*instanc)->get_first();
+ area = (*instance)->get_first_area();
while(area)
{
CoregionArea* coregion = dynamic_cast<CoregionArea*>(area.get());
@@ -633,13 +633,13 @@
if(!strict->is_empty())
{
if(level != 0)
- add_relative_distance_constraint(m_lp, level, indexer.get_event_index(strict->get_first()), m_successor_distance);
+ add_relative_distance_constraint(m_lp, level, indexer.get_event_index(strict->get_first_event()), m_successor_distance);
- level = indexer.get_event_index(strict->get_last());
- strictTmp = strict->get_last();
+ level = indexer.get_event_index(strict->get_last_event());
+ strictTmp = strict->get_last_event();
}
}
- area = area->get_next();
+ area = area->get_next_area();
}
}
@@ -672,7 +672,7 @@
for(InstancePtrList::const_iterator it=instances.begin(); it!=instances.end(); it++)
{
- area = (*it)->get_first();
+ area = (*it)->get_first_area();
while(area)
{
coregion = dynamic_cast<CoregionArea*>(area.get());
@@ -682,7 +682,7 @@
coregion->set_attribute("id",start_index);
start_index +=2;
}
- area = area->get_next();
+ area = area->get_next_area();
}
}
@@ -816,14 +816,14 @@
(*it)->remove_attribute<unsigned>("be_id");
EventAreaPtr area;
- area = (*it)->get_first();
+ area = (*it)->get_first_area();
while(area)
{
CoregionArea* coregion;
coregion = dynamic_cast<CoregionArea*>(area.get());
if(coregion)
coregion->remove_attribute<unsigned>("id");
- area = area->get_next();
+ area = area->get_next_area();
}
}
}
@@ -982,7 +982,7 @@
{
double original_length = (*it)->get_height();
EventAreaPtr area;
- area = (*it)->get_last();
+ area = (*it)->get_last_area();
Coordinate max_y = 0;
while(area)
{
@@ -990,11 +990,11 @@
StrictOrderArea* strict_area = dynamic_cast<StrictOrderArea*>(area.get());
if(strict_area)
{
- if(strict_area->get_last())
+ if(strict_area->get_last_event())
{
- if(!strict_area->get_last()->is_matched())
+ if(!strict_area->get_last_event()->is_matched())
{
- IncompleteMessagePtr in_mess = strict_area->get_last()->get_incomplete_message();
+ IncompleteMessagePtr in_mess = strict_area->get_last_event()->get_incomplete_message();
//dynamic_cast<IncompleteMessagePtr>(strict_area->get_last());
if(in_mess.get())
{
@@ -1005,20 +1005,20 @@
if (act != NULL)
{
double tmp_height = act->get_height();
- max_y = var[indexer.get_event_index(strict_area->get_last())-1]+m_instance_head_distance+tmp_height;
+ max_y = var[indexer.get_event_index(strict_area->get_last_event())-1]+m_instance_head_distance+tmp_height;
}
// NOTE: a hack for local conditions support - until object model is fixed
LocalCondition* cond = dynamic_cast<LocalCondition*>(in_mess.get());
if (cond != NULL)
{
double tmp_height = cond->get_height();
- max_y = var[indexer.get_event_index(strict_area->get_last())-1]+m_instance_head_distance+tmp_height;
+ max_y = var[indexer.get_event_index(strict_area->get_last_event())-1]+m_instance_head_distance+tmp_height;
}
}
}
}
else
- max_y = var[indexer.get_event_index(strict_area->get_last())-1] + m_instance_head_distance;
+ max_y = var[indexer.get_event_index(strict_area->get_last_event())-1] + m_instance_head_distance;
}
}
else
@@ -1029,7 +1029,7 @@
max_y = var[end] + m_instance_head_distance;
}
if(max_y == 0)
- area = area->get_previous();
+ area = area->get_previous_area();
else
area = NULL;
}
@@ -1121,7 +1121,7 @@
{
double original_length = (*it)->get_height();
EventAreaPtr area;
- area = (*it)->get_last();
+ area = (*it)->get_last_area();
Coordinate max_y = 0;
while(area)
{
@@ -1129,7 +1129,7 @@
StrictOrderArea* strict_area = dynamic_cast<StrictOrderArea*>(area.get());
if(strict_area)
{
- max_y = var[indexer.get_event_index(strict_area->get_last())-1] + m_instance_head_distance;
+ max_y = var[indexer.get_event_index(strict_area->get_last_event())-1] + m_instance_head_distance;
}
else
{
@@ -1139,7 +1139,7 @@
max_y = var[end] + m_instance_head_distance;
}
if(max_y == 0)
- area = area->get_previous();
+ area = area->get_previous_area();
else
area = NULL;
}
Modified: trunk/src/data/dfs_area_traverser.cpp
===================================================================
--- trunk/src/data/dfs_area_traverser.cpp 2013-01-26 09:58:06 UTC (rev 1552)
+++ trunk/src/data/dfs_area_traverser.cpp 2013-01-26 10:45:44 UTC (rev 1553)
@@ -31,7 +31,7 @@
if(strict)
{
if(!strict->is_empty())
- traverse_strict_event(strict->get_first().get());
+ traverse_strict_event(strict->get_first_event().get());
}
else
{
@@ -49,11 +49,11 @@
const InstancePtrList& instances = bmsc->get_instances();
for(instance=instances.begin(); instance!=instances.end(); instance++)
{
- EventArea* area = (*instance)->get_first().get();
+ EventArea* area = (*instance)->get_first_area().get();
while(area)
{
traverse_area(area);
- area = area->get_next().get();
+ area = area->get_next_area().get();
}
}
cleanup_traversing_attributes();
Modified: trunk/src/data/dfs_events_traverser.cpp
===================================================================
--- trunk/src/data/dfs_events_traverser.cpp 2013-01-26 09:58:06 UTC (rev 1552)
+++ trunk/src/data/dfs_events_traverser.cpp 2013-01-26 10:45:44 UTC (rev 1553)
@@ -35,7 +35,7 @@
const InstancePtrList& instances = bmsc->get_instances();
for(instance=instances.begin(); instance!=instances.end(); instance++)
{
- traverse_area((*instance)->get_first().get(), NULL);
+ traverse_area((*instance)->get_first_area().get(), NULL);
}
cleanup_traversing_attributes();
}
@@ -47,18 +47,18 @@
if(strict)
{
if(strict->is_empty())
- traverse_area(strict->get_next().get(), predecessor);
+ traverse_area(strict->get_next_area().get(), predecessor);
else
if(predecessor != NULL)
- event_successor(predecessor, strict->get_first().get());
- traverse_strict_event(strict->get_first().get());
+ event_successor(predecessor, strict->get_first_event().get());
+ traverse_strict_event(strict->get_first_event().get());
}
else
{
CoregionArea* coregion = dynamic_cast<CoregionArea*>(area);
//Does CoregionArea have any event?
if(coregion->is_empty())
- traverse_area(coregion->get_next().get(), predecessor);
+ traverse_area(coregion->get_next_area().get(), predecessor);
else
{
const CoregionEventPVector& minimals = coregion->get_minimal_events();
@@ -85,7 +85,7 @@
traverse_strict_event(event->get_successor().get());
}
else
- traverse_area(event->get_area()->get_next().get(), event);
+ traverse_area(event->get_area()->get_next_area().get(), event);
event_finished(event);
}
@@ -110,7 +110,7 @@
}
}
else
- traverse_area(event->get_area()->get_next().get(), event);
+ traverse_area(event->get_area()->get_next_area().get(), event);
event_finished(event);
}
Modified: trunk/src/data/dfs_instance_events_traverser.cpp
===================================================================
--- trunk/src/data/dfs_instance_events_traverser.cpp 2013-01-26 09:58:06 UTC (rev 1552)
+++ trunk/src/data/dfs_instance_events_traverser.cpp 2013-01-26 10:45:44 UTC (rev 1553)
@@ -34,14 +34,14 @@
if(event->get_successor().get())
traverse_strict_event(event->get_successor().get());
else
- traverse_area(event->get_area()->get_next().get());
+ traverse_area(event->get_area()->get_next_area().get());
event_finished(event);
}
}
void DFSInstanceEventsTraverser::traverse(Instance* instance)
{
- traverse_area(instance->get_first().get());
+ traverse_area(instance->get_first_area().get());
cleanup_traversing_attributes();
}
@@ -62,7 +62,7 @@
}
}
else
- traverse_area(event->get_area()->get_next().get());
+ traverse_area(event->get_area()->get_next_area().get());
event_finished(event);
}
}
Modified: trunk/src/data/exporttex/exportTex.cpp
===================================================================
--- trunk/src/data/exporttex/exportTex.cpp 2013-01-26 09:58:06 UTC (rev 1552)
+++ trunk/src/data/exporttex/exportTex.cpp 2013-01-26 10:45:44 UTC (rev 1553)
@@ -1420,7 +1420,7 @@
Coordinate send_padding = 0;
InstancePtr inst = receive_event->get_instance();
- for(EventAreaPtr area = inst->get_first(); area != NULL; area = area->get_next())
+ for(EventAreaPtr area = inst->get_first_area(); area != NULL; area = area->get_next_area())
{
CoregionAreaPtr coregion_area = boost::dynamic_pointer_cast<CoregionArea>(area);
if(coregion_area != NULL)
@@ -1623,14 +1623,13 @@
edge_point((*ipos)->get_line_begin().get_x(),(*ipos)->get_width());
- for(EventAreaPtr area = (*ipos)->get_first();
- area != NULL; area = area->get_next())
+ for(EventAreaPtr area = (*ipos)->get_first_area(); area != NULL; area = area->get_next_area())
{
StrictOrderAreaPtr strict_area = boost::dynamic_pointer_cast<StrictOrderArea>(area);
if(strict_area != NULL)
{
// walk through events
- for(StrictEventPtr event = strict_area->get_first();
+ for(StrictEventPtr event = strict_area->get_first_event();
event != NULL; event = event->get_successor())
{
insert_event(event,inst_start);
Modified: trunk/src/data/modelchecking/divine.cpp
===================================================================
--- trunk/src/data/modelchecking/divine.cpp 2013-01-26 09:58:06 UTC (rev 1552)
+++ trunk/src/data/modelchecking/divine.cpp 2013-01-26 10:45:44 UTC (rev 1553)
@@ -73,16 +73,16 @@
if(current_instance->has_events())
{
//Find a minimal event - is it a send event?
- EventArea *area = current_instance->get_first().get();
+ EventArea *area = current_instance->get_first_area().get();
while(area->is_empty())
- area = area->get_next().get();
+ area = area->get_next_area().get();
StrictOrderArea *strict = dynamic_cast<StrictOrderArea*>(area);
if(strict)
{
- if(strict->get_first()->is_send())
+ if(strict->get_first_event()->is_send())
send_found = true;
}
else
@@ -185,7 +185,7 @@
EventArea* current_area;
StrictOrderArea* strict_area;
CoregionArea* coregion_area;
- current_area = current_instance->get_first().get();
+ current_area = current_instance->get_first_area().get();
std::stringstream ss;
unsigned node_number, dummy;
@@ -198,7 +198,7 @@
strict_area = dynamic_cast<StrictOrderArea*>(current_area);
if(strict_area)
{
- StrictEventPtr strict_event = strict_area->get_first();
+ StrictEventPtr strict_event = strict_area->get_first_event();
while(strict_event)
{
ss.str("");
@@ -394,7 +394,7 @@
current_state = current_state + "_" + state_string;
}//coregion area
- current_area = current_area->get_next().get();
+ current_area = current_area->get_next_area().get();
minimal_events = false;
}//all areas
if(!m_states_only)
Modified: trunk/src/data/msc.cpp
===================================================================
--- trunk/src/data/msc.cpp 2013-01-26 09:58:06 UTC (rev 1552)
+++ trunk/src/data/msc.cpp 2013-01-26 10:45:44 UTC (rev 1553)
@@ -25,7 +25,7 @@
{
InstancePtrList::iterator it;
- it = m_instances.begin();
+ it = m_instances.begin();
while(it!= m_instances.end())
if((*it)->get_label() == label)
it = m_instances.erase(it);
@@ -301,6 +301,52 @@
////////////////////////////////////
+GeneralEvent::GeneralEvent(GeneralEvent* original) :
+ MscElementTmpl<GeneralEvent>(original), Commentable(),
+ m_area(NULL), m_position(original->m_position)
+{
+ // FIXME: does it make sense to set m_position, when m_area is set to NULL?
+ AbsoluteTimePtrList::iterator it;
+ for(it = original->m_absolut_time.begin(); it != original->m_absolut_time.end(); it++)
+ {
+ AbsoluteTimePtr abs = new AbsoluteTime(it->get());
+ m_absolut_time.push_back(abs);
+ }
+}
+
+Instance* GeneralEvent::get_instance() const
+{
+ if (m_area != NULL) {
+ return m_area->get_instance();
+ }
+ else {
+ return NULL;
+ }
+}
+
+void GeneralEvent::add_absolut_time(MscTimeIntervalSetD absolut_time)
+{
+ AbsoluteTimePtr abs = new AbsoluteTime(absolut_time);
+ m_absolut_time.push_back(abs);
+}
+
+void GeneralEvent::remove_absolut_time(const MscTimeIntervalSetD& absolute_time)
+{
+ std::list<AbsoluteTimePtr>::iterator pos;
+
+ for(pos = m_absolut_time.begin(); pos != m_absolut_time.end(); pos++)
+ {
+ if((*pos)->get_interval_set() == absolute_time)
+ break;
+ }
+
+ if(pos != m_absolut_time.end())
+ m_absolut_time.erase(pos);
+}
+
+
+////////////////////////////////////
+
Event::Event(Event* original) : MscElementTmpl<Event>(original), Commentable(),
m_position(original->m_position),
m_message()
@@ -390,7 +436,7 @@
for(unsigned int i = 0; i < predecessors_rel.size(); i++)
{
predecessor = predecessors_rel[i]->get_predecessor();
-
+
//set relations among event's successors and predecessors
for(unsigned j = 0; j < successors_rel.size(); j++)
{
@@ -515,15 +561,7 @@
void Instance::add_area(EventAreaPtr area)
{
- if(!is_empty())
- {
- m_last->set_next(area);
- }
- else
- {
- m_first = area;
- }
- m_last = area;
+ m_event_areas.push_back(boost::intrusive_ptr<EventArea>(area));
area->set_instance(this);
}
@@ -532,7 +570,7 @@
if(!area)
return false;
if(area->is_empty())
- return any_event(area->get_next());
+ return any_event(area->get_next_area());
else
return true;
}
@@ -582,8 +620,7 @@
/////////////////////////////////////////////////////////////////////////////
-#ifdef _TIME_H_
-TimeConstraint::TimeConstraint():
+TimeConstraint::TimeConstraint():
MscElementTmpl<TimeConstraint>(),
m_interval_set(), m_width(0)
{
@@ -813,6 +850,4 @@
{
}
-#endif
-
// $Id$
Modified: trunk/src/data/msc.h
===================================================================
--- trunk/src/data/msc.h 2013-01-26 09:58:06 UTC (rev 1552)
+++ trunk/src/data/msc.h 2013-01-26 10:45:44 UTC (rev 1553)
@@ -52,6 +52,7 @@
class EndNode;
class StartNode;
class Instance;
+class GeneralEvent;
class Event;
class StrictEvent;
class CoregionEvent;
@@ -64,13 +65,13 @@
class CoregionArea;
class SuccessorNode;
class PredecessorNode;
-#ifdef _TIME_H_
+// time extensions
class TimeConstraint;
class AbsoluteTime;
class TimeRelation;
class TimeRelationEvent;
class TimeRelationRefNode;
-#endif
+// end time extensions
typedef boost::intrusive_ptr<MscElement> MscElementPtr;
@@ -133,8 +134,7 @@
typedef std::set<HMscNodePtr> HMscNodePtrSet;
-#ifdef _TIME_H_
-
+// time extensions
typedef boost::intrusive_ptr<TimeRelation> TimeRelationPtr;
typedef boost::intrusive_ptr<TimeRelationEvent> TimeRelationEventPtr;
typedef std::list<TimeRelationEventPtr> TimeRelationEventPtrList;
@@ -147,7 +147,7 @@
typedef std::list<AbsoluteTimePtr> AbsoluteTimePtrList;
typedef boost::intrusive_ptr<TimeConstraint> TimeConstraintPtr;
typedef std::list<TimeConstraintPtr> TimeConstraintPtrList;
-#endif
+// end time extensions
enum MarkType {NONE, MARKED, ADDED, REMOVED, NOT_COVER, NOT_FULL_COVER, PATH};
@@ -376,8 +376,10 @@
if(ptr->m_counter-- == 1)
#endif
#endif
+ {
// the last pointer is being released, delete the objet
delete ptr;
+ }
}
}
@@ -1000,12 +1002,11 @@
*/
MscPtr m_msc;
-#ifdef _TIME_H_
+ // time extensions
TimeRelationRefNodePtrSet m_time_relation_set_top;
TimeRelationRefNodePtrSet m_time_relation_set_bottom;
+ // end time extensions
-#endif
-
public:
ReferenceNode() : HMscNode(), PredecessorNode(), SuccessorNode()
@@ -1062,7 +1063,7 @@
return boost::dynamic_pointer_cast<BMsc>(m_msc);
}
-#ifdef _TIME_H_
+ // time extensions
//TODO ask Ondra why I cannot do this
// void empty_time_relations(){
@@ -1132,8 +1133,9 @@
{
return m_time_relation_set_bottom;
}
-#endif
+ // end time extensions
+
};
/**
@@ -1266,7 +1268,7 @@
class SCMSC_EXPORT Instance:public MscElementTmpl<Instance>
{
-protected:
+private:
/**
* Label of instance -- name of concrete instance
@@ -1284,16 +1286,11 @@
InstanceAxisForm m_form;
/**
- * EventAreas which occure at instance as first one.
+ * List of event areas the instance consists of.
*/
- EventAreaPtr m_first;
+ EventAreaPtrList m_event_areas;
/**
- * EventAreas which occure at instance as last one.
- */
- EventAreaPtr m_last;
-
- /**
* BMsc which this instance belongs to
*
* @warning boost::intrusive_ptr mustn't be used because of possible cyclic dependency
@@ -1305,6 +1302,10 @@
Size m_width;
+ /**
+ * Finds out whether there is any event in a given area or in any area following the given one.
+ * TODO: refactor out
+ */
bool any_event(EventAreaPtr area);
public:
@@ -1316,6 +1317,7 @@
MscElementTmpl<Instance>(),
m_label(label),
m_kind(kind),
+ m_event_areas(),
m_width(10)
{
}
@@ -1324,6 +1326,7 @@
m_label(original->get_label()),
m_kind(original->get_label()),
m_form(original->get_form()),
+ m_event_areas(),
m_line_begin(original->get_line_begin()),
m_line_end(original->get_line_end()),
m_width(original->get_width())
@@ -1340,22 +1343,47 @@
}
/**
- * Set the first EventArea
+ * Gets the first event area, or boost intrusive NULL-pointer if there is no event area on the instance.
+ * TODO: find out whether it is still used after refactoring
*/
- void set_first(const EventAreaPtr& a)
+ const EventAreaPtr get_first_area() const
{
- m_first = a;
+ if (!m_event_areas.empty()) {
+ return m_event_areas.front();
+ }
+ else {
+ return boost::intrusive_ptr<EventArea>();
+ }
}
/**
- * Getter for m_first.
+ * Gets the last event area, or boost intrusive NULL-pointer if there is no event area on the instance.
+ * TODO: find out whether it is still used after refactoring
*/
- const EventAreaPtr& get_first() const
+ const EventAreaPtr get_last_area() const
{
- return m_first;
+ if (!m_event_areas.empty()) {
+ return m_event_areas.back();
+ }
+ else {
+ return boost::intrusive_ptr<EventArea>();
+ }
}
/**
+ * Inserts a new event area at the end of the instance.
+ */
+ void add_area(EventAreaPtr area);
+
+ /**
+ * Returns the list of event areas.
+ */
+ const EventAreaPtrList& get_areas() const
+ {
+ return m_event_areas;
+ }
+
+ /**
* Getter for m_label.
*/
const std::wstring& get_label() const
@@ -1368,16 +1396,6 @@
m_label = label;
}
- void set_last(const EventAreaPtr& a)
- {
- m_last = a;
- }
-
- const EventAreaPtr& get_last() const
- {
- return m_last;
- }
-
/**
* Getter for m_bmsc
*/
@@ -1428,18 +1446,16 @@
m_width = width;
}
- void add_area(EventAreaPtr area);
-
bool is_empty() const
{
- return !m_last.get();
+ return (get_last_area().get() == NULL);
}
/** \brief Returns true iff the instance contains at least one event
*/
bool has_events()
{
- return any_event(this->get_first());
+ return (!is_empty() && any_event(this->get_first_area()));
}
};
@@ -1675,6 +1691,8 @@
typedef boost::intrusive_ptr<LocalAction> LocalActionPtr;
+
+
/**
* \brief Local condition on an instance in Basic MSC.
*/
@@ -1698,7 +1716,215 @@
typedef boost::intrusive_ptr<LocalCondition> LocalConditionPtr;
+
+
/**
+ * \brief A common ancestor for all event classes.
+ *
+ * Every event, bound with an MscElement which triggers the event, should specialize the GeneralEventTmpl
+ * template class with the according MscElement type, i.e. a MscMessage, LocalAction, ...
+ *
+ * FIXME: should an event be a subtype of MscElementTmpl? (seems so to enable marking the event etc.)
+ * TODO: rename to Event after the old Event removal
+ */
+class SCMSC_EXPORT GeneralEvent : public MscElementTmpl<GeneralEvent>, public Commentable
+{
+protected:
+ /**
+ * Event area which this Event belongs to.
+ *
+ * @warning boost::intrusive_ptr mustn't be used because of possible cyclic dependency
+ */
+ EventArea* m_area;
+
+ /**
+ * Relative position of the event within the respective event area.
+ */
+ MscPoint m_position;
+
+ /**
+ * Time relations attached to this event.
+ */
+ TimeRelationEventPtrList m_time_relations;
+
+ /**
+ * Absolute times attached to this event.
+ */
+ AbsoluteTimePtrList m_absolut_time;
+
+
+ GeneralEvent()
+ : MscElementTmpl<GeneralEvent>(), Commentable(),
+ m_area(NULL), m_position()
+ {
+ }
+
+ /**
+ * Duplicates the event. Instantiates new absolute time objects attached to this event.
+ */
+ GeneralEvent(GeneralEvent* original);
+
+
+public:
+
+ /**
+ * Returns the event area this event belongs to.
+ */
+ EventArea* get_area() const
+ {
+ return m_area;
+ }
+
+ /**
+ * Sets the event area this event belongs to.
+ */
+ void set_area(EventArea* area)
+ {
+ m_area = area;
+ }
+
+ /**
+ * Returns the instance this event belongs to. Just a shortcut for get_area()->get_instance().
+ */
+ Instance* get_instance() const;
+
+ /**
+ * Returns relative position of the event within the respective event area.
+ */
+ const MscPoint& get_position() const
+ {
+ return m_position;
+ }
+
+ /**
+ * Sets relative position of the event within the respective event area.
+ */
+ void set_position(const MscPoint& position)
+ {
+ m_position = position;
+ }
+
+
+ // TIME EXTENSION
+
+ void add_time_relation(const TimeRelationEventPtr& relation)
+ {
+ m_time_relations.push_back(relation);
+ }
+
+ void remove_time_relation(const TimeRelationEventPtr& relation)
+ {
+ TimeRelationEventPtrList::iterator pos =
+ std::find(m_time_relations.begin(), m_time_relations.end(), relation);
+
+ if(pos != m_time_relations.end())
+ m_time_relations.erase(pos);
+ }
+
+ void set_time_relations(const TimeRelationEventPtrList& list)
+ {
+ m_time_relations=list;
+ }
+
+ const TimeRelationEventPtrList& get_time_relations() const
+ {
+ return m_time_relations;
+ }
+
+ void clear_time_relations()
+ {
+ m_time_relations.clear();
+ }
+
+ // FIXME: remove? ask Lubos for the original purpose
+//TODO ask Ondra why I cannot do this
+// void empty_time_relations()
+// {
+// TimeRelationEventPtrList::iterator it;
+// for(it = m_time_relations.begin();it!=m_time_relations.end();it++){
+// it->get()->clear_interval_set();
+// }
+// }
+
+ // TODO: rename to *_absolute_*
+ void add_absolut_time(MscTimeIntervalSetD absolut_time);
+
+ void remove_absolut_time(const MscTimeIntervalSetD& absolute_time);
+
+ void set_absolut_time(const std::list<AbsoluteTimePtr>& list)
+ {
+ m_absolut_time = list;
+ }
+
+ const AbsoluteTimePtrList& get_absolut_times() const
+ {
+ return m_absolut_time;
+ }
+
+ void clear_absolut_times()
+ {
+ m_absolut_time.clear();
+ }
+
+};
+
+
+/**
+ * \brief The template for an event on an instance area.
+ *
+ * Every event should be bound with an MscElement which triggers the event, i.e. a MscMessage, LocalAction, ...
+ * This is what the TMscElement template argument stands for.
+ *
+ * TODO: rename to EventTmpl after the old Event removal
+ */
+template <class TMscElement>
+class SCMSC_EXPORT GeneralEventTmpl : GeneralEvent
+{
+private:
+ /**
+ * The MSC element attached to this event.
+ */
+ boost::intrusive_ptr<TMscElement> m_element;
+
+public:
+
+ GeneralEventTmpl()
+ : GeneralEvent(),
+ m_element()
+ {
+ }
+
+ /**
+ * Duplicates the event. Instantiates new absolute time objects attached to this event.
+ */
+ GeneralEventTmpl(GeneralEventTmpl<TMscElement>* original)
+ : GeneralEvent(original),
+ m_element(original->m_element)
+ {
+ }
+
+ /**
+ * Returns the MSC element attached to this event.
+ */
+ const boost::intrusive_ptr<TMscElement>& get_element() const
+ {
+ return m_element;
+ }
+
+ /**
+ * Sets the MSC element attached to this event.
+ */
+ void set_element(const boost::intrusive_ptr<TMscElement>& element)
+ {
+ m_element = element;
+ }
+
+};
+
+
+
+// TODO: remove
+/**
* \brief Event which occurs in EventArea.
*/
class SCMSC_EXPORT Event:
@@ -1717,10 +1943,10 @@
MscMessagePtr m_message;
-#ifdef _TIME_H_
- TimeRelationEventPtrList m_time_relations;
- AbsoluteTimePtrList m_absolut_time;
-#endif
+ // time extensions
+ TimeRelationEventPtrList m_time_relations;
+ AbsoluteTimePtrList m_absolut_time;
+ // end time extensions
Event() : MscElementTmpl<Event>(), Commentable(),
m_position(),
@@ -1731,7 +1957,7 @@
/**
* @param original - original Event of this Event
*/
- Event(Event* original);
+ Event(Event* original);
CompleteMessage* get_complete() const
{
@@ -1762,7 +1988,7 @@
return m_message;
}
-#ifdef _TIME_H_
+ // time extensions
void add_time_relation(const TimeRelationEventPtr& relation)
{
m_time_relations.push_back(relation);
@@ -1805,13 +2031,13 @@
void add_absolut_time(MscTimeIntervalSetD absolut_time);
void remove_absolut_time(const MscTimeIntervalSetD& absolute_time);
void set_absolut_time(const std::list<AbsoluteTimePtr>& list);
- const AbsoluteTimePtrList& get_absolut_times() const;
+ const AbsoluteTimePtrList& get_absolut_times() const;
void clear_absolut_times()
{
m_absolut_time.clear();
}
-#endif
+ // end time extensions
/**
* Return instance of CompleteMessage in case m_message contains the instance,
@@ -1928,6 +2154,7 @@
+// TODO: remove
template <class TArea>
class EventTmpl:public Event
{
@@ -2029,7 +2256,9 @@
}
/**
- * Getter for predecessor.
+ * Returns the previous event in the same event area, or NULL-pointer
+ * if this is the first event in the area.
+ * TODO: refactor out usages of this method where possible, use iteration instead
*/
StrictEvent* get_predecessor() const
{
@@ -2039,15 +2268,15 @@
/**
* Setter for m_successor.
*/
- void set_successor(const StrictEventPtr& successor)
+ void set_successor(const StrictEventPtr& event)
{
if(!is_last())
{
- m_successor->m_predecessor = successor.get();
+ m_successor->m_predecessor = event.get();
}
- successor->m_predecessor = this;
- successor->m_successor = m_successor;
- m_successor = successor;
+ event->m_predecessor = this;
+ event->m_successor = m_successor;
+ m_successor = event;
}
void remove_successor()
@@ -2061,15 +2290,15 @@
}
}
- void set_predecessor(const StrictEventPtr& predecessor)
+ void set_predecessor(const StrictEventPtr& event)
{
if(!is_first())
{
- m_predecessor->m_successor = predecessor.get();
+ get_predecessor()->m_successor = event.get();
}
- predecessor->m_successor = this;
- predecessor->m_predecessor = m_predecessor;
- m_predecessor = predecessor.get();
+ event->m_successor = this;
+ event->m_predecessor = get_predecessor();
+ m_predecessor = event.get();
}
void remove_predecessor()
@@ -2085,12 +2314,12 @@
int is_first() const
{
- return m_predecessor==NULL;
+ return (get_predecessor() == NULL);
}
int is_last() const
{
- return m_successor==NULL;
+ return (m_successor == NULL);
}
};
@@ -2231,22 +2460,10 @@
*
* For details about EventArea organization at Instance see Instance.
*/
-class SCMSC_EXPORT EventArea:public MscElementTmpl<EventArea>
+class SCMSC_EXPORT EventArea : public MscElementTmpl<EventArea>
{
protected:
- /**
- * Following EventArea in Instance.
- */
- EventAreaPtr m_next;
-
- /**
- * Previous EventArea
- *
- * @warning boost::intrusive_ptr mustn't be used because of possible cyclic dependency
- */
- EventArea* m_previous;
-
Coordinate m_begin_height;
Coordinate m_end_height;
@@ -2262,8 +2479,6 @@
public:
EventArea() : MscElementTmpl<EventArea>(),
- m_next(),
- m_previous(NULL),
m_begin_height(0),
m_end_height(0),
m_width(10),
@@ -2275,8 +2490,6 @@
* Constructor.
*/
EventArea(EventArea* original) : MscElementTmpl<EventArea>(original),
- m_next(),
- m_previous(NULL),
m_begin_height(original->m_begin_height),
m_end_height(original->m_end_height),
m_width(original->m_width),
@@ -2287,20 +2500,38 @@
virtual ~EventArea(){}
/**
- * Set EventArea's successor
+ * Returns the next event area on the same instance, or intrusive NULL-pointer if this is the last one.
+ * TODO: refactor out usages of this method where possible, use iteration instead
*/
- void set_next(const EventAreaPtr& n)
+ const EventAreaPtr& get_next_area() const
{
- m_next = n;
- n->m_previous = this;
+ static const EventAreaPtr null_ptr;
+ const EventAreaPtrList event_areas = get_instance()->get_areas();
+ for (EventAreaPtrList::const_iterator i = event_areas.begin(); i != event_areas.end(); ++i) {
+ if (i->get() == this) {
+ ++i;
+ return (i == event_areas.end() ? null_ptr : *i); // NULL if this is the last event area on the instance
+ }
+ }
+ assert(false); // the event area should always be present in the event area list of the instance
+ return null_ptr;
}
/**
- * Getter for m_next
+ * Returns the previous event area on the same instance, or intrusive NULL-pointer if this is the first one.
+ * TODO: refactor out usages of this method where possible, use iteration instead
*/
- const EventAreaPtr& get_next() const
+ EventArea* get_previous_area() const
{
- return m_next;
+ const EventAreaPtrList event_areas = get_instance()->get_areas();
+ for (EventAreaPtrList::const_reverse_iterator i = event_areas.rbegin(); i != event_areas.rend(); ++i) {
+ if (i->get() == this) {
+ ++i;
+ return (i == event_areas.rend() ? NULL : i->get()); // NULL if this is the first event area on the instance
+ }
+ }
+ assert(false); // the event area should always be present in the event area list of the instance
+ return NULL;
}
/**
@@ -2317,24 +2548,16 @@
}
/**
- * Getter for m_previous
+ * Returns true iff the event area doesn't contain any Events.
*/
- EventArea* get_previous() const
- {
- return m_previous;
- }
-
- /**
- * Returns true iff doesn't contain any Events.
- */
virtual bool is_empty() const = 0;
/**
- * Return true iff this Area is first at instance
+ * Return true iff this event area is the first on the instance.
*/
- bool is_first() const
+ bool is_first_area() const
{
- return m_previous==NULL;
+ return (get_previous_area() == NULL);
}
const Coordinate& get_begin_height() const
@@ -2375,9 +2598,10 @@
/**
* Adds event into this area. The added event is returned.
*/
- virtual EventPtr add_event()=0;
+ virtual EventPtr add_event() = 0;
};
+
/**
* \brief EventArea whose events are ordered linearly as they follow each other.
*
@@ -2385,19 +2609,15 @@
* successors and predecessors defined directly in elements of this list
* (not using std::list).
*/
-class SCMSC_EXPORT StrictOrderArea:public EventArea
+class SCMSC_EXPORT StrictOrderArea : public EventArea
{
-
/**
- * First of Events which occure in this area.
+ * The list of events in the area.
+ * TODO: change to list of GeneralEvents
+ * TODO: rename to m_events
*/
- StrictEventPtr m_first;
+ std::list<boost::intrusive_ptr<StrictEvent> > ref_m_events;
- /**
- * Last of Events which occure in this area.
- */
- StrictEventPtr m_last;
-
public:
StrictOrderArea() : EventArea()
@@ -2413,58 +2633,62 @@
}
/**
- * Getter for m_first.
+ * Returns the last event in the area, or intrusive NULL-pointer if the area is empty.
*/
- const StrictEventPtr& get_first() const
+ const StrictEventPtr get_first_event() const
{
- return m_first;
+ if (!ref_m_events.empty()) {
+ return ref_m_events.front();
+ }
+ else {
+ return boost::intrusive_ptr<StrictEvent>();
+ }
}
/**
- * Setter for m_first
- *
- * TODO: throw exception if first parameter has predecessor
+ * Adds an event at the beginning of the area.
*/
- void set_first(const StrictEventPtr& first)
+ void set_first_event(const StrictEventPtr& first)
{
- if(!is_empty())
- m_first->set_predecessor(first);
- m_first = first;
- if(!m_last.get())
- m_last = m_first;
+ if (!ref_m_events.empty()) {
+ get_first_event()->set_predecessor(first); // TODO: remove
+ }
+ ref_m_events.push_front(first);
}
/**
- ...
[truncated message content] |