|
From: <ma...@us...> - 2011-08-08 18:32:45
|
Revision: 1176
http://scstudio.svn.sourceforge.net/scstudio/?rev=1176&view=rev
Author: madzin
Date: 2011-08-08 18:32:38 +0000 (Mon, 08 Aug 2011)
Log Message:
-----------
Modify absolute time in the msc.h structure. Create new class for absolute time and organize time constraints in class TimeConstraint. Modify algorithms to be able work with new structure. Fix some bugs in Find Flow algorithm and add some test results.
Modified Paths:
--------------
trunk/src/check/time/tightening.h
trunk/src/check/time/time_consistency.h
trunk/src/data/Z120/z120_save.cpp
trunk/src/data/msc.cpp
trunk/src/data/msc.h
trunk/src/membership/membership_alg.cpp
trunk/src/membership/membership_base.h
trunk/src/membership/membership_time.cpp
Added Paths:
-----------
trunk/tests/membership/bmsc_absolute_pat1_1.mpr.result
trunk/tests/membership/bmsc_absolute_pat1_2.mpr.result
trunk/tests/membership/bmsc_absolute_pat2_4.mpr.result
trunk/tests/membership/bmsc_absolute_pat2_5.mpr.result
Modified: trunk/src/check/time/tightening.h
===================================================================
--- trunk/src/check/time/tightening.h 2011-08-07 18:14:58 UTC (rev 1175)
+++ trunk/src/check/time/tightening.h 2011-08-08 18:32:38 UTC (rev 1176)
@@ -357,7 +357,10 @@
while(copy->get_original()->get_original()!=NULL)
{
- copy = copy->get_original();
+ copy = dynamic_cast<TimeRelation*>(copy->get_original());
+
+ if(copy == NULL)
+ throw std::runtime_error("Error: Internal Error, typecast from TimeConstraint to TimeRelation failed");
}
copy->get_interval_set() = MscTimeIntervalSetD::set_union(copy->get_interval_set(),result(b_matrix.get_number(it->second.first),
b_matrix.get_number(it->second.second)));
Modified: trunk/src/check/time/time_consistency.h
===================================================================
--- trunk/src/check/time/time_consistency.h 2011-08-07 18:14:58 UTC (rev 1175)
+++ trunk/src/check/time/time_consistency.h 2011-08-08 18:32:38 UTC (rev 1176)
@@ -673,7 +673,10 @@
TimeRelation* copy = *it;
while(copy->get_original()->get_original()!=NULL)
{
- copy = copy->get_original();
+ copy = dynamic_cast<TimeRelation*>(copy->get_original());
+
+ if(copy == NULL)
+ throw std::runtime_error("Error: Internal Error, typecast from TimeConstraint to TimeRelation failed");
}
duplicator.get_copy(copy)->set_marked();
}
Modified: trunk/src/data/Z120/z120_save.cpp
===================================================================
--- trunk/src/data/Z120/z120_save.cpp 2011-08-07 18:14:58 UTC (rev 1175)
+++ trunk/src/data/Z120/z120_save.cpp 2011-08-08 18:32:38 UTC (rev 1176)
@@ -386,9 +386,9 @@
}
}
-void print_absolut_time(std::ostream& stream, const MscTimeIntervalSetD& interval)
+void print_absolute_time(std::ostream& stream, AbsoluteTimePtr abs)
{
- const std::list< MscTimeInterval<double> > constraints = interval.get_set();
+ const std::list< MscTimeInterval<double> > constraints = abs->get_interval_set().get_set();
for(std::list< MscTimeInterval<double> >::const_iterator it = constraints.begin();
it != constraints.end(); it++)
@@ -418,9 +418,9 @@
size_t printed = 0;
const TimeRelationEventPtrList& relations = event->get_time_relations();
- const MscTimeIntervalSetDList& absolut_times = event->get_absolut_times();
+ const AbsoluteTimePtrList absolut_times = event->get_absolut_times();
// process all absolut time constraints
- for(MscTimeIntervalSetDList::const_iterator apos = absolut_times.begin();
+ for(AbsoluteTimePtrList::const_iterator apos = absolut_times.begin();
apos != absolut_times.end(); apos++)
{
if(!printed++)
@@ -428,8 +428,10 @@
else
stream << ", ";
+ print_element_attributes(stream, *apos);
+
//do not used the print function of MscTimeInterval due to [@3]
- print_absolut_time(stream, *apos);
+ print_absolute_time(stream, *apos);
}
// process all time relations
Modified: trunk/src/data/msc.cpp
===================================================================
--- trunk/src/data/msc.cpp 2011-08-07 18:14:58 UTC (rev 1175)
+++ trunk/src/data/msc.cpp 2011-08-08 18:32:38 UTC (rev 1176)
@@ -301,6 +301,49 @@
////////////////////////////////////
+Event::Event(Event* original) : MscElementTmpl<Event>(original), Commentable(),
+ m_position(original->m_position),
+ m_message()
+{
+ 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);
+ }
+}
+
+void Event::add_absolut_time(MscTimeIntervalSetD absolut_time)
+{
+ AbsoluteTimePtr abs = new AbsoluteTime(absolut_time);
+ m_absolut_time.push_back(abs);
+}
+
+void Event::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);
+}
+
+void Event::set_absolut_time(const std::list<AbsoluteTimePtr>& list)
+{
+ m_absolut_time = list;
+}
+
+const AbsoluteTimePtrList& Event::get_absolut_times() const
+{
+ return m_absolut_time;
+}
+////////////////////////////////////
+
/*inline StrictOrderArea* StrictEvent::get_strict_order_area()
{
return dynamic_cast<StrictOrderArea*>(m_area);
@@ -511,28 +554,68 @@
/////////////////////////////////////////////////////////////////////////////
#ifdef _TIME_H_
+TimeConstraint::TimeConstraint():
+ MscElementTmpl<TimeConstraint>(),
+ m_interval_set(), m_width(0)
+{
+}
+
+TimeConstraint::TimeConstraint(const MscTimeIntervalSetD& set):
+ MscElementTmpl<TimeConstraint>(),
+ m_interval_set(set), m_width(0)
+{
+}
+
+TimeConstraint::TimeConstraint(TimeConstraint* original):
+ MscElementTmpl<TimeConstraint>(original)
+{
+ if(original)
+ {
+ m_interval_set = original->m_interval_set;
+ m_width = original->get_width();
+ }
+}
+
+TimeConstraint::~TimeConstraint()
+{
+}
+
+const MscTimeIntervalSetD& TimeConstraint::get_interval_set() const
+{
+ return m_interval_set;
+}
+
+MscTimeIntervalSetD& TimeConstraint::get_interval_set()
+{
+ return m_interval_set;
+}
+
+void TimeConstraint::set_interval_set(const MscTimeIntervalSetD& set)
+{
+ m_interval_set = set;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
TimeRelation::TimeRelation(const MscTimeIntervalSetD& set):
- MscElementTmpl<TimeRelation>(),
- m_directed(false), m_interval_set(set), m_measurement(), m_width(0)
+ TimeConstraint(set), m_directed(false), m_measurement()
{
}
TimeRelation::TimeRelation(const std::string& value):
- MscElementTmpl<TimeRelation>(),
- m_directed(false), m_interval_set(), m_measurement(), m_width(0)
+ TimeConstraint(),
+ m_directed(false), m_measurement()
{
assign_label(value);
}
TimeRelation::TimeRelation(TimeRelation* original):
- MscElementTmpl<TimeRelation>(original)
+ TimeConstraint(original)
{
if(original)
{
m_directed = original->is_directed();
- m_interval_set = original->m_interval_set;
m_measurement = original->m_measurement;
- m_width = original->get_width();
}
}
@@ -691,21 +774,6 @@
return text.str();
}
-const MscTimeIntervalSetD& TimeRelation::get_interval_set() const
-{
- return m_interval_set;
-}
-
-MscTimeIntervalSetD& TimeRelation::get_interval_set()
-{
- return m_interval_set;
-}
-
-void TimeRelation::set_interval_set(const MscTimeIntervalSetD& set)
-{
- m_interval_set = set;
-}
-
TimeRelationEvent::TimeRelationEvent(TimeRelationEvent *original):
TimeRelation(original), m_event_origin(NULL), m_event(NULL)
{
Modified: trunk/src/data/msc.h
===================================================================
--- trunk/src/data/msc.h 2011-08-07 18:14:58 UTC (rev 1175)
+++ trunk/src/data/msc.h 2011-08-08 18:32:38 UTC (rev 1176)
@@ -65,6 +65,8 @@
class SuccessorNode;
class PredecessorNode;
#ifdef _TIME_H_
+class TimeConstraint;
+class AbsoluteTime;
class TimeRelation;
class TimeRelationEvent;
class TimeRelationRefNode;
@@ -141,6 +143,10 @@
typedef MscTimeIntervalSet<double> MscTimeIntervalSetD;
typedef std::list<MscTimeIntervalSetD> MscTimeIntervalSetDList;
+typedef boost::intrusive_ptr<AbsoluteTime> AbsoluteTimePtr;
+typedef std::list<AbsoluteTimePtr> AbsoluteTimePtrList;
+typedef boost::intrusive_ptr<TimeConstraint> TimeConstraintPtr;
+typedef std::list<TimeConstraintPtr> TimeConstraintPtrList;
#endif
enum MarkType {NONE, MARKED, ADDED, REMOVED, NOT_COVER, NOT_FULL_COVER, PATH};
@@ -1659,7 +1665,7 @@
#ifdef _TIME_H_
TimeRelationEventPtrList m_time_relations;
- MscTimeIntervalSetDList m_absolut_time;
+ AbsoluteTimePtrList m_absolut_time;
#endif
Event() : MscElementTmpl<Event>(), Commentable(),
@@ -1671,11 +1677,7 @@
/**
* @param original - original Event of this Event
*/
- Event(Event* original) : MscElementTmpl<Event>(original), Commentable(),
- m_position(original->m_position),
- m_message()
- {
- }
+ Event(Event* original);
CompleteMessage* get_complete() const
{
@@ -1746,30 +1748,11 @@
// }
- void add_absolut_time(MscTimeIntervalSetD absolut_time)
- {
- m_absolut_time.push_back(absolut_time);
- }
+ 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;
- void remove_absolut_time(const MscTimeIntervalSetD& absolut_time)
- {
- MscTimeIntervalSetDList::iterator pos =
- std::find(m_absolut_time.begin(), m_absolut_time.end(), absolut_time);
-
- if(pos != m_absolut_time.end())
- m_absolut_time.erase(pos);
- }
-
- void set_absolut_time(const MscTimeIntervalSetDList& list)
- {
- m_absolut_time = list;
- }
-
- const MscTimeIntervalSetDList& get_absolut_times() const
- {
- return m_absolut_time;
- }
-
void clear_absolut_times()
{
m_absolut_time.clear();
@@ -2586,15 +2569,60 @@
};
#ifdef _TIME_H_
-class SCMSC_EXPORT TimeRelation:public MscElementTmpl<TimeRelation>
+class SCMSC_EXPORT TimeConstraint:public MscElementTmpl<TimeConstraint>
{
protected:
- bool m_directed; //! indicates directed constraint, see "origin" keyword
MscTimeIntervalSet<double> m_interval_set;
- std::string m_measurement; //! measurement variable name
Size m_width; //! length of the guide line
+ TimeConstraint();
+ TimeConstraint(const MscTimeIntervalSetD& set);
+ TimeConstraint(TimeConstraint *original);
+ virtual ~TimeConstraint();
+
public:
+ void clear_interval_set(){
+ m_interval_set.clear();
+ }
+
+ const MscTimeIntervalSetD& get_interval_set() const;
+ MscTimeIntervalSetD& get_interval_set();
+ void set_interval_set(const MscTimeIntervalSetD& set);
+
+ Size get_width() const
+ {
+ return m_width;
+ }
+
+ void set_width(const Size& width)
+ {
+ m_width = width;
+ }
+};
+
+class SCMSC_EXPORT AbsoluteTime:public TimeConstraint
+{
+public:
+ AbsoluteTime():TimeConstraint()
+ {
+ }
+
+ AbsoluteTime(MscTimeIntervalSetD set):TimeConstraint(set)
+ {
+ }
+
+ AbsoluteTime(AbsoluteTime* original):TimeConstraint(original)
+ {
+ }
+};
+
+class SCMSC_EXPORT TimeRelation:public TimeConstraint
+{
+protected:
+ bool m_directed; //! indicates directed constraint, see "origin" keyword
+ std::string m_measurement; //! measurement variable name
+
+public:
TimeRelation(const MscTimeIntervalSetD& set);
TimeRelation(const std::string& set);
TimeRelation(TimeRelation *original);
@@ -2617,10 +2645,6 @@
m_interval_set.clear();
}
- const MscTimeIntervalSetD& get_interval_set() const;
- MscTimeIntervalSetD& get_interval_set();
- void set_interval_set(const MscTimeIntervalSetD& set);
-
const std::string& get_measurement() const
{
return m_measurement;
@@ -2630,16 +2654,6 @@
{
m_measurement = measurement;
}
-
- Size get_width() const
- {
- return m_width;
- }
-
- void set_width(const Size& width)
- {
- m_width = width;
- }
};
class SCMSC_EXPORT TimeRelationEvent:public TimeRelation
Modified: trunk/src/membership/membership_alg.cpp
===================================================================
--- trunk/src/membership/membership_alg.cpp 2011-08-07 18:14:58 UTC (rev 1175)
+++ trunk/src/membership/membership_alg.cpp 2011-08-08 18:32:38 UTC (rev 1176)
@@ -1117,7 +1117,7 @@
//! makes not full covered intervals colored
void color_intervals(MembershipContext* c)
{
- std::vector<std::pair<TimeRelationPtr, HMscNodePtr> > relations;
+ std::vector<std::pair<TimeConstraintPtr, HMscNodePtr> > relations;
relations = c->get_result()->get_not_full_covered_intervals();
Modified: trunk/src/membership/membership_base.h
===================================================================
--- trunk/src/membership/membership_base.h 2011-08-07 18:14:58 UTC (rev 1175)
+++ trunk/src/membership/membership_base.h 2011-08-08 18:32:38 UTC (rev 1176)
@@ -139,8 +139,8 @@
class MembershipResult
{
- std::vector<std::pair<TimeRelationPtr, HMscNodePtr> > not_covered_intervals; //! intervals in specification which are not satisfied
- std::vector<std::pair<TimeRelationPtr, HMscNodePtr> > not_full_covered_intervals; //! intervals in specification which are not full covered
+ std::vector<std::pair<TimeConstraintPtr, HMscNodePtr> > not_covered_intervals; //! intervals in specification which are not satisfied
+ std::vector<std::pair<TimeConstraintPtr, HMscNodePtr> > not_full_covered_intervals; //! intervals in specification which are not full covered
std::vector<HMscNodePtr> result_path;
//! Number of references to this object.
@@ -151,8 +151,8 @@
friend void intrusive_ptr_release(const MembershipResult *ptr);
public:
- MembershipResult(std::vector<std::pair<TimeRelationPtr, HMscNodePtr> > not_covered,
- std::vector<std::pair<TimeRelationPtr, HMscNodePtr> > not_full_covered,
+ MembershipResult(std::vector<std::pair<TimeConstraintPtr, HMscNodePtr> > not_covered,
+ std::vector<std::pair<TimeConstraintPtr, HMscNodePtr> > not_full_covered,
std::vector<HMscNodePtr> path)
{
not_covered_intervals.insert(not_covered_intervals.begin(), not_covered.begin(), not_covered.end());
@@ -169,12 +169,12 @@
return std::make_pair(not_covered_intervals.size(), not_full_covered_intervals.size());
}
- std::vector<std::pair<TimeRelationPtr, HMscNodePtr> > get_not_covered_intervals()
+ std::vector<std::pair<TimeConstraintPtr, HMscNodePtr> > get_not_covered_intervals()
{
return not_covered_intervals;
}
- std::vector<std::pair<TimeRelationPtr, HMscNodePtr> > get_not_full_covered_intervals()
+ std::vector<std::pair<TimeConstraintPtr, HMscNodePtr> > get_not_full_covered_intervals()
{
return not_full_covered_intervals;
}
@@ -219,8 +219,8 @@
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
BMscIntervalSetComponentMatrix* time_matrix; //! matrix of all time intervals among events in bmsc
- std::vector<std::pair<TimeRelationPtr, HMscNodePtr> > not_covered_intervals; //! intervals in specification which are not satisfied
- std::vector<std::pair<TimeRelationPtr, HMscNodePtr> > not_full_covered_intervals; //! intervals in specification which are not full covered
+ std::vector<std::pair<TimeConstraintPtr, HMscNodePtr> > not_covered_intervals; //! intervals in specification which are not satisfied
+ std::vector<std::pair<TimeConstraintPtr, HMscNodePtr> > 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
@@ -230,7 +230,7 @@
std::stack<std::vector<TimeRelationRefNodePtr> > ref_node_time_stack;
std::map<TimeRelationRefNodePtr, std::vector<MembershipTimeRelationPtr> > ref_node_time; //! key is a time relation in hmsc specification and set of MembershipTimeRelationPtr which hold possible events for the comparison.
- std::stack<std::map<Event*, MscTimeIntervalSetDList> > absolute_time;
+ std::stack<std::map<Event*, AbsoluteTimePtrList> > absolute_time;
enum checkingTimeMode checking_time_mode;
enum DiffType diff_type;
@@ -432,22 +432,22 @@
return time_matrix;
}
- void add_not_full_covered_interval(TimeRelationPtr inter, HMscNodePtr node)
+ void add_not_full_covered_interval(TimeConstraintPtr inter, HMscNodePtr node)
{
not_full_covered_intervals.push_back(std::make_pair(inter, node));
}
- const std::vector<std::pair<TimeRelationPtr, HMscNodePtr> > get_not_full_covered_intervals()
+ const std::vector<std::pair<TimeConstraintPtr, HMscNodePtr> > get_not_full_covered_intervals()
{
return not_full_covered_intervals;
}
- void add_not_covered_interval(TimeRelationPtr inter, HMscNodePtr node)
+ void add_not_covered_interval(TimeConstraintPtr inter, HMscNodePtr node)
{
not_covered_intervals.push_back(std::make_pair(inter,node));
}
- const std::vector<std::pair<TimeRelationPtr, HMscNodePtr> > get_not_covered_intervals()
+ const std::vector<std::pair<TimeConstraintPtr, HMscNodePtr> > get_not_covered_intervals()
{
return not_covered_intervals;
}
@@ -587,10 +587,10 @@
}
- void add_absolute_time(Event* e, MscTimeIntervalSetDList list)
+ void add_absolute_time(Event* e, AbsoluteTimePtrList list)
{
- std::pair<std::map<Event*, MscTimeIntervalSetDList>::iterator, bool> map_return;
- MscTimeIntervalSetDList::iterator list_it;
+ std::pair<std::map<Event*, AbsoluteTimePtrList>::iterator, bool> map_return;
+ AbsoluteTimePtrList::iterator list_it;
//it's tricky one, the return value returns a pair of iteratior and a bool value whether the element was added
//in both cases the first of return pair is a iterator to the element in the map
@@ -605,7 +605,7 @@
}
}
- std::stack<std::map<Event*, MscTimeIntervalSetDList> > get_absolute_time()
+ std::stack<std::map<Event*, AbsoluteTimePtrList> > get_absolute_time()
{
return absolute_time;
}
@@ -658,7 +658,7 @@
void push_time_stacks()
{
std::map<TimeRelationEventPtr, std::vector<MembershipTimeRelationPtr> > r_time;
- std::map<Event*, MscTimeIntervalSetDList> a_time;
+ std::map<Event*, AbsoluteTimePtrList> a_time;
std::vector<TimeRelationRefNodePtr> ref_time;
relative_time.push(r_time);
Modified: trunk/src/membership/membership_time.cpp
===================================================================
--- trunk/src/membership/membership_time.cpp 2011-08-07 18:14:58 UTC (rev 1175)
+++ trunk/src/membership/membership_time.cpp 2011-08-08 18:32:38 UTC (rev 1176)
@@ -18,10 +18,10 @@
#include "membership/membership_time.h"
std::set<MembershipTimeRelationPtr> merge_relative_time_constraints(MembershipContext* c);
-std::map<Event*, MscTimeIntervalSetDList> merge_absolute_time_constraints(MembershipContext* c);
+std::map<Event*, AbsoluteTimePtrList> merge_absolute_time_constraints(MembershipContext* c);
std::set<MembershipTimeRelationPtr> merge_ref_node_time_constraints(MembershipContext* c);
bool check_time(MembershipContext* c, std::set<MembershipTimeRelationPtr>& relative_time,
- std::map<Event*, MscTimeIntervalSetDList>& absolute_time,
+ std::map<Event*, AbsoluteTimePtrList>& absolute_time,
std::set<MembershipTimeRelationPtr> ref_node_time);
void print_bmsc(MembershipContext* c)
@@ -62,7 +62,7 @@
{
std::set<MembershipTimeRelationPtr> relative_time;
- std::map<Event*, MscTimeIntervalSetDList> absolute_time;
+ std::map<Event*, AbsoluteTimePtrList> absolute_time;
std::set<MembershipTimeRelationPtr> ref_node_time;
relative_time = merge_relative_time_constraints(c);
@@ -98,10 +98,10 @@
return relative_time;
}
-std::map<Event*, MscTimeIntervalSetDList> merge_absolute_time_constraints(MembershipContext* c)
+std::map<Event*, AbsoluteTimePtrList> merge_absolute_time_constraints(MembershipContext* c)
{
- std::map<Event*, MscTimeIntervalSetDList> absolute_time, temp;
- std::stack<std::map<Event*, MscTimeIntervalSetDList> > stack;
+ std::map<Event*, AbsoluteTimePtrList> absolute_time, temp;
+ std::stack<std::map<Event*, AbsoluteTimePtrList> > stack;
stack = c->get_absolute_time();
@@ -110,7 +110,7 @@
temp = stack.top();
stack.pop();
- std::map<Event*, MscTimeIntervalSetDList>::iterator it, temp_it;
+ std::map<Event*, AbsoluteTimePtrList>::iterator it, temp_it;
for(temp_it = temp.begin(); temp_it != temp.end(); temp_it++)
{
it = absolute_time.find(temp_it->first);
@@ -141,7 +141,7 @@
}
bool check_time_absolute_mode(MembershipContext* c, std::set<MembershipTimeRelationPtr>& relative_time,
- std::map<Event*, MscTimeIntervalSetDList>& absolute_time,
+ std::map<Event*, AbsoluteTimePtrList>& absolute_time,
std::set<MembershipTimeRelationPtr> ref_node_time)
{
std::map<TimeRelationRefNodePtr, std::vector<MembershipTimeRelationPtr> > ref_node_time_map;
@@ -195,8 +195,11 @@
MscTimeIntervalSetD bmsc_inter, hmsc_inter, result;
//TODO when a time constraints is not only a one interval
- MscTimeIntervalSetD start_i = *(start_e->get_absolut_times().begin());
- MscTimeIntervalSetD end_i = *(end_e->get_absolut_times().begin());
+ AbsoluteTimePtr abs_start = *(start_e->get_absolut_times().begin());
+ AbsoluteTimePtr abs_end = *(end_e->get_absolut_times().begin());
+ MscTimeIntervalSetD start_i = abs_start->get_interval_set();
+ MscTimeIntervalSetD end_i = abs_end->get_interval_set();
+
bmsc_inter = get_continous_interval(c, start_i, end_i);
hmsc_inter = map_it->first->get_interval_set();
@@ -214,21 +217,21 @@
//absolute time constraints checking
if(absolute_time.size() > 0)
{
- std::map<Event*, MscTimeIntervalSetDList>::iterator absolute_it;
+ std::map<Event*, AbsoluteTimePtrList>::iterator absolute_it;
MscTimeIntervalSetD bmsc_inter, hmsc_absolute, result;
//TODO only first list interval is taken to the consideration
for(absolute_it = absolute_time.begin(); absolute_it != absolute_time.end(); absolute_it++)
{
- bmsc_inter = absolute_it->first->get_absolut_times().front();
- hmsc_absolute = *(absolute_it->second.begin());
+ bmsc_inter = absolute_it->first->get_absolut_times().front()->get_interval_set();
+ hmsc_absolute = (*(absolute_it->second.begin()))->get_interval_set();
result = MscTimeIntervalSetD::set_intersection(hmsc_absolute, bmsc_inter);
if(result.is_empty())
- c->add_not_covered_interval(map_it->first, NULL);
+ c->add_not_covered_interval(*(absolute_it->second.begin()), NULL);
else
if(result != bmsc_inter)
- c->add_not_full_covered_interval(map_it->first, NULL);
+ c->add_not_full_covered_interval(*(absolute_it->second.begin()), NULL);
}
}
@@ -241,9 +244,12 @@
Event* start_e = *(*relative_it)->get_start().begin();
Event* end_e = *(*relative_it)->get_end().begin();
- MscTimeIntervalSetD start_i = *(start_e->get_absolut_times().begin());
- MscTimeIntervalSetD end_i = *(end_e->get_absolut_times().begin());
+ AbsoluteTimePtr start_abs = *(start_e->get_absolut_times().begin());
+ AbsoluteTimePtr end_abs = *(end_e->get_absolut_times().begin());
+ MscTimeIntervalSetD start_i = start_abs->get_interval_set();
+ MscTimeIntervalSetD end_i = end_abs->get_interval_set();
+
bmsc_inter = get_continous_interval(c, start_i, end_i);
hmsc_inter = (*relative_it)->get_interval_set();
@@ -260,7 +266,7 @@
}
bool check_time_relative_mode(MembershipContext* c, std::set<MembershipTimeRelationPtr>& relative_time,
- std::map<Event*, MscTimeIntervalSetDList>& absolute_time,
+ std::map<Event*, AbsoluteTimePtrList>& absolute_time,
std::set<MembershipTimeRelationPtr> ref_node_time)
{
BMscPtr bmsc_f = c->get_bmsc();
@@ -337,7 +343,7 @@
}
//add time relation between events with absolute time comstrainst to possible minimal events
- std::map<Event*, MscTimeIntervalSetDList>::iterator map_it;
+ std::map<Event*, AbsoluteTimePtrList>::iterator map_it;
for(map_it = absolute_time.begin(); map_it != absolute_time.end(); map_it++)
{
for(second = bmsc_minimal_events.begin(); second != bmsc_minimal_events.end(); second++)
@@ -444,21 +450,21 @@
{
Event* minimal = get_min_event(c, bmsc_minimal_events);
- std::map<Event*, MscTimeIntervalSetDList>::iterator absolute_it;
+ std::map<Event*, AbsoluteTimePtrList>::iterator absolute_it;
MscTimeIntervalSetD bmsc_inter, hmsc_absolute, result;
for(absolute_it = absolute_time.begin(); absolute_it != absolute_time.end(); absolute_it++)
{
bmsc_inter = c->get_time_matrix()->operator()(minimal, absolute_it->first);
//TODO only first interval from the list is taken to comparison, don't know why the list is pressen and not only a interval.
- hmsc_absolute = *(absolute_it->second.begin());
+ hmsc_absolute = (*(absolute_it->second.begin()))->get_interval_set();
result = MscTimeIntervalSetD::set_intersection(hmsc_absolute, bmsc_inter);
if(result.is_empty())
- c->add_not_covered_interval(map_it->first, NULL);
+ c->add_not_covered_interval(*(absolute_it->second.begin()), NULL);
else
if(result != bmsc_inter)
- c->add_not_full_covered_interval(map_it->first, NULL);
+ c->add_not_full_covered_interval(*(absolute_it->second.begin()), NULL);
}
}
@@ -487,7 +493,7 @@
}
bool check_time(MembershipContext* c, std::set<MembershipTimeRelationPtr>& relative_time,
- std::map<Event*, MscTimeIntervalSetDList>& absolute_time,
+ std::map<Event*, AbsoluteTimePtrList>& absolute_time,
std::set<MembershipTimeRelationPtr> ref_node_time)
{
switch(c->get_checking_time_mode())
@@ -790,9 +796,12 @@
return 3;
}
- MscTimeIntervalSetD a = *(first->get_absolut_times().begin());
- MscTimeIntervalSetD b = *(second->get_absolut_times().begin());
+ AbsoluteTimePtr a_abs = *(first->get_absolut_times().begin());
+ AbsoluteTimePtr b_abs = *(second->get_absolut_times().begin());
+ MscTimeIntervalSetD a = a_abs->get_interval_set();
+ MscTimeIntervalSetD b = b_abs->get_interval_set();
+
inter = get_continous_interval(c, a, b);
}
else
Added: trunk/tests/membership/bmsc_absolute_pat1_1.mpr.result
===================================================================
--- trunk/tests/membership/bmsc_absolute_pat1_1.mpr.result (rev 0)
+++ trunk/tests/membership/bmsc_absolute_pat1_1.mpr.result 2011-08-08 18:32:38 UTC (rev 1176)
@@ -0,0 +1,50 @@
+Flow "Page_1" not found. Unsatisfied time constraint(s) (red intervals are not satisfied, blue intervals are partialy satisfied):
+mscdocument bmsc_spec_absolute1;
+msc Page_1;
+inst PC;
+inst Router;
+inst Server;
+PC: instance;
+out c,0 to Router;
+time [@0];
+out a,1 to Router;
+out a,2 to Router;
+in b,3 from Router;
+out c,4 to Router;
+time [@15];
+endinstance;
+Router: instance;
+in c,0 from PC;
+time [@0];
+out a,5 to Server;
+out b,6 to Server;
+time /* NOT_COVER */
+[@5];
+in a,1 from PC;
+time [@10];
+in b,7 from Server;
+time [@11];
+in a,2 from PC;
+time [@11];
+in b,8 from Server;
+time [@13];
+in a,9 from Server;
+out b,3 to PC;
+time [@14];
+in a,10 from Server;
+in c,4 from PC;
+time [@15];
+endinstance;
+Server: instance;
+in a,5 from Router;
+time [@7];
+in b,6 from Router;
+time [@9];
+out b,7 to Router;
+out b,8 to Router;
+time [@13];
+out a,9 to Router;
+out a,10 to Router;
+time [@14];
+endinstance;
+endmsc;
Added: trunk/tests/membership/bmsc_absolute_pat1_2.mpr.result
===================================================================
--- trunk/tests/membership/bmsc_absolute_pat1_2.mpr.result (rev 0)
+++ trunk/tests/membership/bmsc_absolute_pat1_2.mpr.result 2011-08-08 18:32:38 UTC (rev 1176)
@@ -0,0 +1,60 @@
+Flow "Page_1" not found. Unsatisfied time constraint(s) (red intervals are not satisfied, blue intervals are partialy satisfied):
+mscdocument bmsc_spec_absolute2;
+msc Page_1;
+inst PC;
+inst Router;
+inst Server;
+PC: instance;
+out c,0 to Router;
+time [@0];
+out a,1 to Router;
+time [@10];
+out a,2 to Router;
+time [@11];
+in b,3 from Router;
+time [@15];
+out c,4 to Router;
+time [@15];
+endinstance;
+Router: instance;
+in c,0 from PC;
+time [@0];
+label e0;
+out a,5 to Server;
+time/* NOT_COVER */
+ e1 [0,1];
+label e1;
+out b,6 to Server;
+in a,1 from PC;
+time [@10];
+in b,7 from Server;
+time [@11];
+in a,2 from PC;
+time [@11];
+label e2;
+in b,8 from Server;
+time e3 [0,1];
+label e3;
+in a,9 from Server;
+out b,3 to PC;
+time [@14];
+in a,10 from Server;
+time [@14];
+in c,4 from PC;
+time [@15];
+endinstance;
+Server: instance;
+in a,5 from Router;
+time [@7];
+in b,6 from Router;
+time [@9];
+out b,7 to Router;
+time [@10];
+out b,8 to Router;
+time [@13];
+out a,9 to Router;
+time [@14];
+out a,10 to Router;
+time [@14];
+endinstance;
+endmsc;
Added: trunk/tests/membership/bmsc_absolute_pat2_4.mpr.result
===================================================================
--- trunk/tests/membership/bmsc_absolute_pat2_4.mpr.result (rev 0)
+++ trunk/tests/membership/bmsc_absolute_pat2_4.mpr.result 2011-08-08 18:32:38 UTC (rev 1176)
@@ -0,0 +1,53 @@
+Flow "Page_1" not found. Unsatisfied time constraint(s) (red intervals are not satisfied, blue intervals are partialy satisfied):
+mscdocument bmsc_spec_absolute4;
+msc Page_1;
+inst PC;
+inst Router;
+inst Server;
+PC: instance;
+out c,0 to Router;
+time [@0];
+out a,1 to Router;
+out a,2 to Router;
+in b,3 from Router;
+out c,4 to Router;
+time [@15];
+endinstance;
+Router: instance;
+in c,0 from PC;
+time [@0];
+label e0;
+out a,5 to Server;
+time e1 [0,1];
+label e1;
+out b,6 to Server;
+in a,1 from PC;
+time [@10];
+in b,7 from Server;
+time [@11];
+in a,2 from PC;
+time [@11];
+label e2;
+in b,8 from Server;
+time/* NOT_COVER */
+ e3 [2,4];
+label e3;
+in a,9 from Server;
+out b,3 to PC;
+in a,10 from Server;
+in c,4 from PC;
+time [@15];
+endinstance;
+Server: instance;
+in a,5 from Router;
+time [@7];
+in b,6 from Router;
+time [@9];
+out b,7 to Router;
+out b,8 to Router;
+time [@13];
+out a,9 to Router;
+out a,10 to Router;
+time [@14];
+endinstance;
+endmsc;
Added: trunk/tests/membership/bmsc_absolute_pat2_5.mpr.result
===================================================================
--- trunk/tests/membership/bmsc_absolute_pat2_5.mpr.result (rev 0)
+++ trunk/tests/membership/bmsc_absolute_pat2_5.mpr.result 2011-08-08 18:32:38 UTC (rev 1176)
@@ -0,0 +1,53 @@
+Flow "Page_1" not found. Unsatisfied time constraint(s) (red intervals are not satisfied, blue intervals are partialy satisfied):
+mscdocument bmsc_spec_absolute5;
+msc Page_1;
+inst PC;
+inst Router;
+inst Server;
+PC: instance;
+out c,0 to Router;
+time [@0];
+out a,1 to Router;
+out a,2 to Router;
+in b,3 from Router;
+out c,4 to Router;
+time [@15];
+endinstance;
+Router: instance;
+in c,0 from PC;
+time [@0];
+label e0;
+out a,5 to Server;
+time e1 [0,1];
+label e1;
+out b,6 to Server;
+in a,1 from PC;
+time [@10];
+in b,7 from Server;
+time [@11];
+in a,2 from PC;
+time [@11];
+label e2;
+in b,8 from Server;
+time e3 [0,1];
+label e3;
+in a,9 from Server;
+out b,3 to PC;
+in a,10 from Server;
+in c,4 from PC;
+time /* NOT_COVER */
+[@18];
+endinstance;
+Server: instance;
+in a,5 from Router;
+time [@7];
+in b,6 from Router;
+time [@9];
+out b,7 to Router;
+out b,8 to Router;
+time [@13];
+out a,9 to Router;
+out a,10 to Router;
+time [@14];
+endinstance;
+endmsc;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|