+++ /dev/null
-#include "muscle.h"\r
-#include "edgelist.h"\r
-\r
-EdgeList::EdgeList()\r
- {\r
- m_uNode1 = 0;\r
- m_uNode2 = 0;\r
- m_uCount = 0;\r
- m_uCacheSize = 0;\r
- }\r
-\r
-EdgeList::~EdgeList()\r
- {\r
- Clear();\r
- }\r
-\r
-void EdgeList::Clear()\r
- {\r
- delete[] m_uNode1;\r
- delete[] m_uNode2;\r
- m_uNode1 = 0;\r
- m_uNode2 = 0;\r
- m_uCount = 0;\r
- m_uCacheSize = 0;\r
- }\r
-\r
-void EdgeList::Add(unsigned uNode1, unsigned uNode2)\r
- {\r
- if (m_uCount <= m_uCacheSize)\r
- Expand();\r
- m_uNode1[m_uCount] = uNode1;\r
- m_uNode2[m_uCount] = uNode2;\r
- ++m_uCount;\r
- }\r
-\r
-unsigned EdgeList::GetCount() const\r
- {\r
- return m_uCount;\r
- }\r
-\r
-void EdgeList::GetEdge(unsigned uIndex, unsigned *ptruNode1, unsigned *ptruNode2) const\r
- {\r
- if (uIndex > m_uCount)\r
- Quit("EdgeList::GetEdge(%u) count=%u", uIndex, m_uCount);\r
- *ptruNode1 = m_uNode1[uIndex];\r
- *ptruNode2 = m_uNode2[uIndex];\r
- }\r
-\r
-void EdgeList::Copy(const EdgeList &rhs)\r
- {\r
- Clear();\r
- const unsigned uCount = rhs.GetCount();\r
- for (unsigned n = 0; n < uCount; ++n)\r
- {\r
- unsigned uNode1;\r
- unsigned uNode2;\r
- rhs.GetEdge(n, &uNode1, &uNode2);\r
- Add(uNode1, uNode2);\r
- }\r
- }\r
-\r
-void EdgeList::Expand()\r
- {\r
- unsigned uNewCacheSize = m_uCacheSize + 512;\r
- unsigned *NewNode1 = new unsigned[uNewCacheSize];\r
- unsigned *NewNode2 = new unsigned[uNewCacheSize];\r
- if (m_uCount > 0)\r
- {\r
- memcpy(NewNode1, m_uNode1, m_uCount*sizeof(unsigned));\r
- memcpy(NewNode2, m_uNode2, m_uCount*sizeof(unsigned));\r
- }\r
- delete[] m_uNode1;\r
- delete[] m_uNode2;\r
- m_uNode1 = NewNode1;\r
- m_uNode2 = NewNode2;\r
- m_uCacheSize = uNewCacheSize;\r
- }\r
-\r
-void EdgeList::LogMe() const\r
- {\r
- for (unsigned n = 0; n < m_uCount; ++n)\r
- {\r
- if (n > 0)\r
- Log(" ");\r
- Log("%u->%u", m_uNode1[n], m_uNode2[n]);\r
- }\r
- Log("\n");\r
- }\r