aboutsummaryrefslogtreecommitdiff
path: root/APEX_1.4/shared/general/HACD/include/dgGraph.h
diff options
context:
space:
mode:
authorgit perforce import user <a@b>2016-10-25 12:29:14 -0600
committerSheikh Dawood Abdul Ajees <Sheikh Dawood Abdul Ajees>2016-10-25 18:56:37 -0500
commit3dfe2108cfab31ba3ee5527e217d0d8e99a51162 (patch)
treefa6485c169e50d7415a651bf838f5bcd0fd3bfbd /APEX_1.4/shared/general/HACD/include/dgGraph.h
downloadphysx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.tar.xz
physx-3.4-3dfe2108cfab31ba3ee5527e217d0d8e99a51162.zip
Initial commit:
PhysX 3.4.0 Update @ 21294896 APEX 1.4.0 Update @ 21275617 [CL 21300167]
Diffstat (limited to 'APEX_1.4/shared/general/HACD/include/dgGraph.h')
-rw-r--r--APEX_1.4/shared/general/HACD/include/dgGraph.h202
1 files changed, 202 insertions, 0 deletions
diff --git a/APEX_1.4/shared/general/HACD/include/dgGraph.h b/APEX_1.4/shared/general/HACD/include/dgGraph.h
new file mode 100644
index 00000000..5280b2c3
--- /dev/null
+++ b/APEX_1.4/shared/general/HACD/include/dgGraph.h
@@ -0,0 +1,202 @@
+/* Copyright (c) <2003-2011> <Julio Jerez, Newton Game Dynamics>
+*
+* This software is provided 'as-is', without any express or implied
+* warranty. In no event will the authors be held liable for any damages
+* arising from the use of this software.
+*
+* Permission is granted to anyone to use this software for any purpose,
+* including commercial applications, and to alter it and redistribute it
+* freely, subject to the following restrictions:
+*
+* 1. The origin of this software must not be misrepresented; you must not
+* claim that you wrote the original software. If you use this software
+* in a product, an acknowledgment in the product documentation would be
+* appreciated but is not required.
+*
+* 2. Altered source versions must be plainly marked as such, and must not be
+* misrepresented as being the original software.
+*
+* 3. This notice may not be removed or altered from any source distribution.
+*/
+
+/****************************************************************************
+*
+* Visual C++ 6.0 created by: Julio Jerez
+*
+****************************************************************************/
+#ifndef __dgGraph__
+#define __dgGraph__
+
+#include "dgTypes.h"
+#include "dgList.h"
+
+template<class dgNodeData, class dgEdgeData> class dgGraphEdge;
+template<class dgNodeData, class dgEdgeData> class dgGraphNode;
+
+
+template<class dgNodeData, class dgEdgeData>
+class dgGraph: public dgList<dgGraphNode<dgNodeData, dgEdgeData> >
+{
+ public:
+ dgGraph (void);
+ ~dgGraph ();
+
+
+ typename dgGraph<dgNodeData, dgEdgeData>::dgListNode* AddNode ();
+ void DeleteNode (typename dgGraph<dgNodeData, dgEdgeData>::dgListNode* const node);
+
+ void Trace () const;
+};
+
+template<class dgNodeData, class dgEdgeData>
+class dgGraphNode: public dgList<dgGraphEdge<dgNodeData, dgEdgeData> >
+{
+ public:
+ dgGraphNode ();
+ ~dgGraphNode ();
+
+ typename dgGraphNode<dgNodeData, dgEdgeData>::dgListNode* AddEdge(typename dgGraph<dgNodeData, dgEdgeData>::dgListNode* const node);
+ void DeleteHalfEdge(typename dgGraphNode<dgNodeData, dgEdgeData>::dgListNode* const edge);
+ void DeleteEdge(typename dgGraphNode<dgNodeData, dgEdgeData>::dgListNode* const edge);
+
+ void Trace () const;
+
+ dgNodeData m_nodeData;
+};
+
+template<class dgNodeData, class dgEdgeData>
+class dgGraphEdge
+{
+ public:
+ dgGraphEdge();
+ ~dgGraphEdge();
+
+ typename dgGraph<dgNodeData, dgEdgeData>::dgListNode* m_node;
+ dgEdgeData m_edgeData;
+};
+
+
+
+template<class dgNodeData, class dgEdgeData>
+dgGraph<dgNodeData, dgEdgeData>::dgGraph ()
+ :dgList<dgGraphNode<dgNodeData, dgEdgeData> >()
+{
+}
+
+
+template<class dgNodeData, class dgEdgeData>
+dgGraph<dgNodeData, dgEdgeData>::~dgGraph ()
+{
+}
+
+template<class dgNodeData, class dgEdgeData>
+typename dgGraph<dgNodeData, dgEdgeData>::dgListNode* dgGraph<dgNodeData, dgEdgeData>::AddNode ()
+{
+ typename dgGraph<dgNodeData, dgEdgeData>::dgListNode* const node = dgGraph<dgNodeData, dgEdgeData>::Append();
+ return node;
+}
+
+template<class dgNodeData, class dgEdgeData>
+void dgGraph<dgNodeData, dgEdgeData>::DeleteNode (typename dgGraph<dgNodeData, dgEdgeData>::dgListNode* const node)
+{
+ for (typename dgGraphNode<dgNodeData, dgEdgeData>::dgListNode* link = node->GetInfo().GetFirst(); link; link = link->GetNext()) {
+ typename dgGraph<dgNodeData, dgEdgeData>::dgListNode* const twinNode = link->GetInfo().m_node;
+ for (typename dgGraphNode<dgNodeData, dgEdgeData>::dgListNode* link1 = twinNode->GetInfo().GetFirst(); link1; link1 = link1->GetNext()) {
+ if (link1->GetInfo().m_node == node) {
+ twinNode->GetInfo().Remove (link1);
+ break;
+ }
+ }
+ }
+ dgList<dgGraphNode<dgNodeData, dgEdgeData> >::Remove (node);
+}
+
+template<class dgNodeData, class dgEdgeData>
+void dgGraph<dgNodeData, dgEdgeData>::Trace () const
+{
+ for (typename dgGraphNode<dgNodeData, dgEdgeData>::dgListNode* link = dgGraphNode<dgNodeData, dgEdgeData>::GetFirst(); link; link = link->GetNext()) {
+ link->GetInfo().Trace ();
+// dgTrace (("%d: ", link->GetInfo().m_index));
+// for (dgGraphNode<dgNodeData, dgEdgeData>::dgListNode* edge = link->GetInfo().GetFirst(); edge; edge = edge->GetNext()) {
+// dgListNode* node;
+// node = edge->GetInfo().m_node;
+// dgTrace (("%d ", node->GetInfo().m_index));
+// }
+// dgTrace (("\n"));
+ }
+// dgTrace (("\n"));
+}
+
+
+template<class dgNodeData, class dgEdgeData>
+dgGraphNode<dgNodeData, dgEdgeData>::dgGraphNode()
+{
+
+}
+
+
+template<class dgNodeData, class dgEdgeData>
+dgGraphNode<dgNodeData, dgEdgeData>::~dgGraphNode()
+{
+
+}
+
+template<class dgNodeData, class dgEdgeData>
+typename dgGraphNode<dgNodeData, dgEdgeData>::dgListNode* dgGraphNode<dgNodeData, dgEdgeData>::AddEdge (typename dgGraph<dgNodeData, dgEdgeData>::dgListNode* const node)
+{
+ typename dgGraphNode<dgNodeData, dgEdgeData>::dgListNode* edge = dgGraphNode<dgNodeData, dgEdgeData>::Append();
+
+ edge->GetInfo().m_node = node;
+ return edge;
+}
+
+template<class dgNodeData, class dgEdgeData>
+void dgGraphNode<dgNodeData, dgEdgeData>::DeleteHalfEdge(typename dgGraphNode<dgNodeData, dgEdgeData>::dgListNode* const edge)
+{
+ dgList<dgGraphEdge<dgNodeData, dgEdgeData> >::Remove (edge);
+}
+
+template<class dgNodeData, class dgEdgeData>
+void dgGraphNode<dgNodeData, dgEdgeData>::DeleteEdge(typename dgGraphNode<dgNodeData, dgEdgeData>::dgListNode* const edge)
+{
+ typename dgGraph<dgNodeData, dgEdgeData>::dgListNode* const node = edge->GetInfo().m_node;
+
+ for (typename dgGraphNode<dgNodeData, dgEdgeData>::dgListNode* twinEdge = node->GetInfo().GetFirst(); twinEdge; twinEdge = twinEdge->GetNext()) {
+ if (&twinEdge->GetInfo().m_node->GetInfo() == this) {
+ node->GetInfo().DeleteHalfEdge(twinEdge);
+ break;
+ }
+ }
+
+ DeleteHalfEdge(edge);
+}
+
+template<class dgNodeData, class dgEdgeData>
+void dgGraphNode<dgNodeData, dgEdgeData>::Trace () const
+{
+// dgTrace (("%d: ", m_index));
+// for (typename dgGraph<dgNodeData, dgEdgeData>::dgListNode* edge = typename dgGraph<dgNodeData, dgEdgeData>::GetFirst(); edge; edge = edge->GetNext()) {
+// typename dgGraph<dgNodeData, dgEdgeData>::dgListNode* const node;
+// node = edge->GetInfo().m_node;
+// dgTrace (("%d ", node->GetInfo().m_index));
+// }
+// dgTrace (("\n"));
+}
+
+
+template<class dgNodeData, class dgEdgeData>
+dgGraphEdge<dgNodeData, dgEdgeData>::dgGraphEdge()
+{
+
+}
+
+template<class dgNodeData, class dgEdgeData>
+dgGraphEdge<dgNodeData, dgEdgeData>::~dgGraphEdge()
+{
+
+}
+
+
+
+#endif
+