|
From: <ma...@us...> - 2010-09-18 19:47:03
|
Revision: 975
http://scstudio.svn.sourceforge.net/scstudio/?rev=975&view=rev
Author: madzin
Date: 2010-09-18 19:46:56 +0000 (Sat, 18 Sep 2010)
Log Message:
-----------
add path returning to membership algorithm
Modified Paths:
--------------
trunk/src/membership/membership_alg.cpp
trunk/src/membership/membership_alg.h
trunk/src/membership/membership_base.h
trunk/src/membership/membership_time.cpp
trunk/tests/membership/CMakeLists.txt
Modified: trunk/src/membership/membership_alg.cpp
===================================================================
--- trunk/src/membership/membership_alg.cpp 2010-09-18 18:06:18 UTC (rev 974)
+++ trunk/src/membership/membership_alg.cpp 2010-09-18 19:46:56 UTC (rev 975)
@@ -83,6 +83,7 @@
BMscGraphDuplicator duplicator;
HMscPtr dup_hmsc;
+ //TODO it is necessary to copy MSC because of path returning.
//dup_hmsc should be MSC graph. Due to that duplicatior throws exception during copying time intervals, membership workes just with MSC graphs.
dup_hmsc = hmsc;
// dup_hmsc = dup_hmsc = duplicator.duplicate(hmsc);
@@ -102,10 +103,10 @@
if(c->get_not_covered_intervals().size() > 0)
{
c->get_mem()->print_report(RS_ERROR, L"Some time interval in the specification is not full covered");
- return NULL;
+ return color_path(c, color_intervals(c, dup_hmsc));
}
- return new HMsc(); //TODO return path in hmsc
+ return color_path(c, dup_hmsc);
}
else
return NULL;
@@ -127,6 +128,9 @@
c->clear_attributed_events();
}
+ //add node to the path which will be printed if the flow meets specification
+ c->push_path(hmsc_node);
+
//checks end node
EndNodePtr end = boost::dynamic_pointer_cast<EndNode > (hmsc_node);
@@ -135,7 +139,10 @@
if (b->is_null(c))
return true;
else
+ {
+ c->top_pop_path();
return false;
+ }
}
ReferenceNodePtr node = boost::dynamic_pointer_cast<ReferenceNode > (hmsc_node);
@@ -147,11 +154,17 @@
{
//when deosn't exist empty path to EndNode
if (b->is_null(c) && !is_node_null(c, node))
+ {
+ c->top_pop_path();
return false;
+ }
//checks if this node with this configuration was checked
if (!look_at_checked_conf(c, node, b))
+ {
+ c->top_pop_path();
return false;
+ }
ConfigurationPtr old_config_I, old_config_II;
@@ -162,6 +175,7 @@
if (!check_node(c, node, membership, b))
{
c->clear_attributed_events();
+ c->top_pop_path();
return false;
}
@@ -171,6 +185,7 @@
if(!check_node_time(c, node, old_config_II))
{
c->clear_attributed_events();
+ c->top_pop_path();
return false;
}
}
@@ -179,6 +194,7 @@
if (!check_node(c, node, receive_ordering, old_config_I))
{
c->clear_attributed_events();
+ c->top_pop_path();
return false;
}
@@ -189,7 +205,10 @@
during the time checking the algorithm has not to travers all events*/
if(!b->compare(old_config_I))
+ {
+ c->top_pop_path();
return false;
+ }
c->clear_attributed_events();
@@ -216,6 +235,7 @@
}
}
+ c->top_pop_path();
return false;
}
@@ -602,6 +622,8 @@
*/
HMscPtr search_bmsc(MembershipContext* c, BMscPtr bmsc, BMscPtr bmsc_f)
{
+ c->print_msc_path(false);
+
//creates HMSC
HMscPtr hmsc = new HMsc(L"membership");
@@ -881,3 +903,24 @@
return false;
}
+
+HMscPtr color_path(MembershipContext* c, HMscPtr msc)
+{
+ if(!c->get_print_path())
+ return msc;
+
+ while(c->get_path_size() > 0)
+ c->top_pop_path()->set_marked();
+
+ return msc;
+}
+
+HMscPtr color_intervals(MembershipContext* c, HMscPtr msc)
+{
+ std::vector<TimeRelationPtr> relations = c->get_not_covered_intervals();
+
+ for(unsigned int i = 0; i < relations.size(); i++)
+ relations[i]->set_marked();
+
+ return msc;
+}
Modified: trunk/src/membership/membership_alg.h
===================================================================
--- trunk/src/membership/membership_alg.h 2010-09-18 18:06:18 UTC (rev 974)
+++ trunk/src/membership/membership_alg.h 2010-09-18 19:46:56 UTC (rev 975)
@@ -96,4 +96,10 @@
//! check each successor of hmsc_node
bool check_next(MembershipContext* c, HMscNodePtr hmsc_node, ConfigurationPtr b);
+//! makes path colored
+HMscPtr color_path(MembershipContext* c, HMscPtr msc);
+
+//! makes not full covered intervals colored
+HMscPtr color_intervals(MembershipContext* c, HMscPtr msc);
+
#endif
Modified: trunk/src/membership/membership_base.h
===================================================================
--- trunk/src/membership/membership_base.h 2010-09-18 18:06:18 UTC (rev 974)
+++ trunk/src/membership/membership_base.h 2010-09-18 19:46:56 UTC (rev 975)
@@ -58,12 +58,15 @@
std::map<CoregionAreaPtr, std::vector<CoregionOrderingPtr> > checked_orderings; //! checked possibilities of coregion ordering
std::map<CoregionAreaPtr, CoregionOrderingPtr> coregion_ordering; //! save ordering of coregion events in appropriate coregion
BMscIntervalSetMatrix* time_matrix; //! matrix of all time intervals among events in bmsc
- std::vector<MscTimeIntervalSetD> not_full_covered_intervals; //! intervals in specification which are not full covered
+ std::vector<TimeRelationPtr> not_full_covered_intervals; //! intervals in specification which are not full covered
+ std::stack<HMscNodePtr> path; //! store information about the path if the flow meets the specification
+ bool print_path; //! store whether the path will be printed
public:
MembershipContext()
{
max_id = 0;
+ print_path = true;
}
void set_mem(MembershipAlg* m)
@@ -235,15 +238,42 @@
return time_matrix;
}
- void add_not_covered_interval(MscTimeIntervalSetD hmsc_inter)
+ void add_not_covered_interval(TimeRelationPtr hmsc_inter)
{
not_full_covered_intervals.push_back(hmsc_inter);
}
- const std::vector<MscTimeIntervalSetD> get_not_covered_intervals()
+ const std::vector<TimeRelationPtr> get_not_covered_intervals()
{
return not_full_covered_intervals;
}
+
+ void push_path(HMscNodePtr node)
+ {
+ path.push(node);
+ }
+
+ HMscNodePtr top_pop_path()
+ {
+ HMscNodePtr node = path.top();
+ path.pop();
+ return node;
+ }
+
+ int get_path_size()
+ {
+ return path.size();
+ }
+
+ void print_msc_path(bool value)
+ {
+ print_path = value;
+ }
+
+ bool get_print_path()
+ {
+ return print_path;
+ }
};
//! store information about the position of checking algorithm on instance
Modified: trunk/src/membership/membership_time.cpp
===================================================================
--- trunk/src/membership/membership_time.cpp 2010-09-18 18:06:18 UTC (rev 974)
+++ trunk/src/membership/membership_time.cpp 2010-09-18 19:46:56 UTC (rev 975)
@@ -126,7 +126,7 @@
return false;
else
if(result != bmsc_inter)
- c->add_not_covered_interval(hmsc_inter);
+ c->add_not_covered_interval(relation);
return true;
}
@@ -373,7 +373,7 @@
return false;
else
if(result != bmsc_inter)
- c->add_not_covered_interval(hmsc_inter);
+ c->add_not_covered_interval(*it);
}
}
@@ -485,7 +485,7 @@
return false;
else
if(result != bmsc_inter)
- c->add_not_covered_interval(hmsc_inter);
+ c->add_not_covered_interval(*it_vec);
}
map_bottom_conf = c->find_bottom_time_ref(*it_vec);
@@ -502,7 +502,7 @@
return false;
else
if(result != bmsc_inter)
- c->add_not_covered_interval(hmsc_inter);
+ c->add_not_covered_interval(*it_vec);
}
}
@@ -536,7 +536,7 @@
return false;
else
if(result != bmsc_inter)
- c->add_not_covered_interval(hmsc_inter);
+ c->add_not_covered_interval(*it_vec);
}
map_top_conf = c->find_top_time_ref(*it_vec);
@@ -553,7 +553,7 @@
return false;
else
if(result != bmsc_inter)
- c->add_not_covered_interval(hmsc_inter);
+ c->add_not_covered_interval(*it_vec);
}
}
Modified: trunk/tests/membership/CMakeLists.txt
===================================================================
--- trunk/tests/membership/CMakeLists.txt 2010-09-18 18:06:18 UTC (rev 974)
+++ trunk/tests/membership/CMakeLists.txt 2010-09-18 19:46:56 UTC (rev 975)
@@ -189,28 +189,28 @@
ADD_TEST(membership_test-80 ${MEMBERSHIP_TEST_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_bmsc28.mpr ${CMAKE_CURRENT_SOURCE_DIR}/test_bmsc28_2.mpr 1)
-ADD_TEST(membership_test-81 ${MEMBERSHIP_TEST_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_bmsc28.mpr ${CMAKE_CURRENT_SOURCE_DIR}/test_bmsc28_3.mpr 0) # + warning
+ADD_TEST(membership_test-81 ${MEMBERSHIP_TEST_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_bmsc28.mpr ${CMAKE_CURRENT_SOURCE_DIR}/test_bmsc28_3.mpr 1) # + warning
-ADD_TEST(membership_test-82 ${MEMBERSHIP_TEST_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_bmsc28.mpr ${CMAKE_CURRENT_SOURCE_DIR}/test_bmsc28_4.mpr 0) # + warning
+ADD_TEST(membership_test-82 ${MEMBERSHIP_TEST_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_bmsc28.mpr ${CMAKE_CURRENT_SOURCE_DIR}/test_bmsc28_4.mpr 1) # + warning
#tests for new time algorithm
ADD_TEST(membership_test-83 ${MEMBERSHIP_TEST_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_hmsc29.mpr ${CMAKE_CURRENT_SOURCE_DIR}/test_bmsc29_1.mpr 1)
-ADD_TEST(membership_test-84 ${MEMBERSHIP_TEST_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_hmsc29.mpr ${CMAKE_CURRENT_SOURCE_DIR}/test_bmsc29_2.mpr 0) # + warning
+ADD_TEST(membership_test-84 ${MEMBERSHIP_TEST_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_hmsc29.mpr ${CMAKE_CURRENT_SOURCE_DIR}/test_bmsc29_2.mpr 1) # + warning
ADD_TEST(membership_test-85 ${MEMBERSHIP_TEST_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_hmsc30.mpr ${CMAKE_CURRENT_SOURCE_DIR}/test_bmsc30_1.mpr 1)
-ADD_TEST(membership_test-86 ${MEMBERSHIP_TEST_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_hmsc30.mpr ${CMAKE_CURRENT_SOURCE_DIR}/test_bmsc30_2.mpr 0) # + warning
+ADD_TEST(membership_test-86 ${MEMBERSHIP_TEST_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_hmsc30.mpr ${CMAKE_CURRENT_SOURCE_DIR}/test_bmsc30_2.mpr 1) # + warning
ADD_TEST(membership_test-87 ${MEMBERSHIP_TEST_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_hmsc31.mpr ${CMAKE_CURRENT_SOURCE_DIR}/test_bmsc31_1.mpr 1)
ADD_TEST(membership_test-88 ${MEMBERSHIP_TEST_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/time_hard_bmsc01.mpr ${CMAKE_CURRENT_SOURCE_DIR}/time_hard_bmsc_pat01.mpr 1)
-ADD_TEST(membership_test-89 ${MEMBERSHIP_TEST_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/time_hard_bmsc02.mpr ${CMAKE_CURRENT_SOURCE_DIR}/time_hard_bmsc_pat01.mpr 0) # + warning
+ADD_TEST(membership_test-89 ${MEMBERSHIP_TEST_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/time_hard_bmsc02.mpr ${CMAKE_CURRENT_SOURCE_DIR}/time_hard_bmsc_pat01.mpr 1) # + warning
ADD_TEST(membership_test-90 ${MEMBERSHIP_TEST_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/time_hard_bmsc03.mpr ${CMAKE_CURRENT_SOURCE_DIR}/time_hard_bmsc_pat01.mpr 0)
-ADD_TEST(membership_test-91 ${MEMBERSHIP_TEST_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/time_hard_bmsc04.mpr ${CMAKE_CURRENT_SOURCE_DIR}/time_hard_bmsc_pat02.mpr 0) # + warning
+ADD_TEST(membership_test-91 ${MEMBERSHIP_TEST_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/time_hard_bmsc04.mpr ${CMAKE_CURRENT_SOURCE_DIR}/time_hard_bmsc_pat02.mpr 1) # + warning
ADD_TEST(membership_test-92 ${MEMBERSHIP_TEST_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/time_hard_bmsc05.mpr ${CMAKE_CURRENT_SOURCE_DIR}/time_hard_bmsc_pat02.mpr 0)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|