|
From: <koc...@us...> - 2008-04-07 18:47:25
|
Revision: 11
http://scstudio.svn.sourceforge.net/scstudio/?rev=11&view=rev
Author: kocianon
Date: 2008-04-07 11:47:17 -0700 (Mon, 07 Apr 2008)
Log Message:
-----------
Added Paths:
-----------
trunk/src/data/livenodedetection.cc
Added: trunk/src/data/livenodedetection.cc
===================================================================
--- trunk/src/data/livenodedetection.cc (rev 0)
+++ trunk/src/data/livenodedetection.cc 2008-04-07 18:47:17 UTC (rev 11)
@@ -0,0 +1,124 @@
+/*
+ * scstudio - Sequence Chart Studio
+ * http://scstudio.sourceforge.net
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License version 2.1, as published by the Free Software Foundation.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * Copyright (c) 2008 Jindra Babica <ba...@ma...>
+ *
+ * $Id: $
+ */
+
+#include <list>
+#include <string>
+#include <map>
+#include "msc.h"
+
+
+class GraphNode {
+private:
+ ReferenceNodePtr m_ReferenceNodePtrNode;
+public:
+ boolean visited;
+ list<GraphNode> graphNodeList;
+ GraphNode(ReferenceNodePtr ref) : m_ReferenceNodePtrNode(ref), visited(false) {}
+
+};
+
+using namespace std;
+
+//
+//
+//
+ReferenceNodePtr main(int argc, char** argv) {
+
+ list<GraphNode> GraphNodeList;
+ list<GraphNode> GraphNodeEndList;
+ queue<GraphNode> m_GraphNodeQueue;
+
+
+ list<ReferenceNodePtr> m_ReferenceNodePtrList;
+ list<ReferenceNodePtr> m_returnList;
+
+ StartNodePtr m_StartNodePrt;
+ HMscPtr m_HMscPtr;
+
+ GraphNode m_GraphNodeFront;
+ GraphNode m_GraphNodeSuccessor;
+
+ m_StartNodePrt = m_HMscPtr->m_start;
+ m_ReferenceNodePtrList = m_StartNodePrt->m_nodes;
+
+ list<m_mapDependences> m_listMapDependences;
+ map<ReferenceNodePtr,list<GraphNode>> m_mapReferenceNodePtrChild;
+
+ /**
+ *
+ * creating GraphNodes and tab of relations
+ */
+
+ list<ReferenceNodePtr>::iterator itReferenceNodePtr;
+ for (itReferenceNodePtr = m_ReferenceNodePtrList.begin(); itReferenceNodePtr != m_ReferenceNodePtrList.end(); itReferenceNodePtr++ ){
+ GraphNode m_newGraphNode = GraphNode(*itReferenceNodePtr);
+ GraphNodeList.push_back(m_newGraphNode);
+ if(*itReferenceNodePtr->m_end!=null)
+ GraphNodeEndList.push_back(m_newGraphNode);
+
+ list<ReferenceNodePtr>::iterator itReferenceNodePtrChild;
+ for (itReferenceNodePtrChild = itReferenceNodePtr->m_successors.begin(); itReferenceNodePtrChild != itReferenceNodePtr->m_successors.end(); itReferenceNodePtrChild++ ){
+ if(m_mapReferenceNodePtrChild.find(*itReferenceNodePtrChild)==m_mapReferenceNodePtrChild.end){
+ m_mapReferenceNodePtrChild.insert(pair<ReferenceNodePtr,GraphNode>(*itReferenceNodePtrChild,null))
+ }
+ // dont like selfish relations
+ if(*itReferenceNodePtrChild != *itReferenceNodePtr)
+ m_mapReferenceNodePtrChild.find(*itReferenceNodePtrChild)->second.push_back(m_newGraphNode);
+ }
+
+ }
+
+ /**
+ *
+ * setting relations
+ *
+ */
+
+ list<GraphNode>::iterator itGraphNode;
+ for(itGraphNode=GraphNodeList.begin(); itGraphNode != GraphNodeList.end(); itGraphNode++){
+ if(m_mapReferenceNodePtrChild.find((*itGraphNode)->m_ReferenceNodePtrNode)!=m_mapReferenceNodePtrChild.end()){
+ list<GraphNode> m_GraphNodelist = m_mapReferenceNodePtrChild.find((*itGraphNode)->m_ReferenceNodePtrNode)->second;
+ for (itReferenceNodePtr = m_GraphNodelist.begin(); itReferenceNodePtrChild != m_GraphNodelist.end(); itReferenceNodePtr++ ){
+ itGraphNode->graphNodeList.push_back(itReferenceNodePtr);
+ }
+
+ }
+ }
+ /**
+ * finaly nodes to the queue
+ */
+
+ for(itGraphNode = GraphNodeEndList.begin(); itGraphNode != GraphNodeEndList.end(); itGraphNode++){
+ m_GraphNodeQueue.push(*itGraphNode);
+ }
+
+ while(!m_GraphNodeQueue.empty()){
+ m_GraphNodeFront = m_GraphNodeQueue.front();
+ if(!m_GraphNodeFront.visited){
+ m_returnList.push_back(m_GraphNodeFront.graphNodeList);
+ for(itGraphNode = m_GraphNodeFront.graphNodeList.begin(); itGraphNode != m_GraphNodeFront.graphNodeList.end(); itGraphNode++){
+ m_GraphNodeQueue.push(*itGraphNode);
+ }
+ }
+ m_GraphNodeQueue.pop();
+
+ }
+
+ return m_returnList;
+}
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|