|
From: <ba...@us...> - 2008-07-16 07:16:39
|
Revision: 102
http://scstudio.svn.sourceforge.net/scstudio/?rev=102&view=rev
Author: babicaj
Date: 2008-07-16 00:16:36 -0700 (Wed, 16 Jul 2008)
Log Message:
-----------
StartNode can now reference EndNode
Modified Paths:
--------------
trunk/src/data/msc.cpp
trunk/src/data/msc.h
Modified: trunk/src/data/msc.cpp
===================================================================
--- trunk/src/data/msc.cpp 2008-06-18 08:13:32 UTC (rev 101)
+++ trunk/src/data/msc.cpp 2008-07-16 07:16:36 UTC (rev 102)
@@ -26,6 +26,12 @@
}
+void StartNode::add_successor(ReferenceNode* n)
+{
+ m_successors.insert(n);
+ n->set_owner(m_owner);
+}
+
inline Instance* Event::get_instance()
{
return m_area->get_instance();
Modified: trunk/src/data/msc.h
===================================================================
--- trunk/src/data/msc.h 2008-06-18 08:13:32 UTC (rev 101)
+++ trunk/src/data/msc.h 2008-07-16 07:16:36 UTC (rev 102)
@@ -348,9 +348,13 @@
* Base abstract class for node of HMsc
*/
class HMscNode:public MscElement{
+
std::string m_label;
protected:
+
+ HMsc* m_owner;
+
/**
* This is an abstract class
*/
@@ -381,6 +385,16 @@
{
return m_label;
}
+
+ HMsc* get_owner()
+ {
+ return m_owner;
+ }
+
+ void set_owner(HMsc* owner)
+ {
+ m_owner = owner;
+ }
};
@@ -414,7 +428,13 @@
* Succesors of StartNode.
*/
ReferenceNodePSet m_successors;
-
+
+ /**
+ * EndNode which this StartNode is connected to,
+ * undefined if there isn't any such connection.
+ */
+ EndNodePtr m_end;
+
public:
StartNode()
@@ -437,10 +457,7 @@
/**
* Adds successor.
*/
- void add_successor(ReferenceNode* n)
- {
- m_successors.insert(n);
- }
+ void add_successor(ReferenceNode* n);
/**
* Removes successor.
@@ -449,6 +466,16 @@
{
m_successors.erase(n);
}
+
+ EndNodePtr get_end()
+ {
+ return m_end;
+ }
+
+ void set_end(EndNodePtr end)
+ {
+ m_end = end;
+ }
};
/**
@@ -472,9 +499,15 @@
HMsc()
{
StartNodePtr start(new StartNode);
+ start->set_owner(this);
m_start = start;
}
+ HMsc(HMsc* original)
+ {
+ m_original = original;
+ }
+
/**
* Initializes m_label
*/
@@ -505,6 +538,8 @@
class ReferenceNode:public HMscNode
{
private:
+
+
/**
* Succesors of ReferenceNode.
@@ -565,6 +600,7 @@
{
m_successors.insert(n);
n->m_predecessors.insert(this);
+ n->set_owner(m_owner);
}
/**
@@ -598,6 +634,7 @@
EndNodePtr set_end()
{
EndNodePtr end(new EndNode);
+ end->set_owner(m_owner);
return m_end = end;
}
@@ -644,6 +681,23 @@
}
/**
+ * Tries to overcast m_msc into BMscPtr.
+ *
+ * If not successfull undefined BMscPtr is returned.
+ */
+ BMscPtr get_bmsc()
+ {
+ BMscPtr p;
+ try
+ {
+ p = m_msc;
+ return p;
+ }
+ catch(std::bad_cast& c){}
+ return p;
+ }
+
+ /**
* Returns true iff m_end is defined.
*/
bool is_end_node()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|