+++ /dev/null
-#include "muscle.h"\r
-#include "dpreglist.h"\r
-\r
-unsigned DPRegionList::GetDPArea() const\r
- {\r
- unsigned uArea = 0;\r
- for (unsigned i = 0; i < m_uCount; ++i)\r
- {\r
- const DPRegion &r = m_DPRegions[i];\r
- if (DPREGIONTYPE_Rect == r.m_Type)\r
- uArea += r.m_Rect.m_uLengthA*r.m_Rect.m_uLengthB;\r
- }\r
- return uArea;\r
- }\r
-\r
-void DPRegionList::Add(const DPRegion &r)\r
- {\r
- if (m_uCount == MAX_DPREGIONS)\r
- Quit("DPRegionList::Add, overflow %d", m_uCount);\r
- m_DPRegions[m_uCount] = r;\r
- ++m_uCount;\r
- }\r
-\r
-void DPRegionList::LogMe() const\r
- {\r
- Log("DPRegionList::LogMe, count=%u\n", m_uCount);\r
- Log("Region Type StartA StartB EndA EndB\n");\r
- Log("------ ---- ------ ------ ---- ----\n");\r
- for (unsigned i = 0; i < m_uCount; ++i)\r
- {\r
- const DPRegion &r = m_DPRegions[i];\r
- Log("%6u ", i);\r
- if (DPREGIONTYPE_Diag == r.m_Type)\r
- Log("Diag %6u %6u %6u %6u\n",\r
- r.m_Diag.m_uStartPosA,\r
- r.m_Diag.m_uStartPosB,\r
- r.m_Diag.m_uStartPosA + r.m_Diag.m_uLength - 1,\r
- r.m_Diag.m_uStartPosB + r.m_Diag.m_uLength - 1);\r
- else if (DPREGIONTYPE_Rect == r.m_Type)\r
- Log("Rect %6u %6u %6u %6u\n",\r
- r.m_Rect.m_uStartPosA,\r
- r.m_Rect.m_uStartPosB,\r
- r.m_Rect.m_uStartPosA + r.m_Rect.m_uLengthA - 1,\r
- r.m_Rect.m_uStartPosB + r.m_Rect.m_uLengthB - 1);\r
- else\r
- Log(" *** ERROR *** Type=%u\n", r.m_Type);\r
- }\r
- }\r
-\r
-void DiagListToDPRegionList(const DiagList &DL, DPRegionList &RL,\r
- unsigned uLengthA, unsigned uLengthB)\r
- {\r
- if (g_uDiagMargin > g_uMinDiagLength/2)\r
- Quit("Invalid parameters, diagmargin=%d must be <= 2*diaglength=%d",\r
- g_uDiagMargin, g_uMinDiagLength);\r
-\r
- unsigned uStartPosA = 0;\r
- unsigned uStartPosB = 0;\r
- const unsigned uDiagCount = DL.GetCount();\r
- DPRegion r;\r
- for (unsigned uDiagIndex = 0; uDiagIndex < uDiagCount; ++uDiagIndex)\r
- {\r
- const Diag &d = DL.Get(uDiagIndex);\r
- assert(d.m_uLength >= g_uMinDiagLength);\r
- const unsigned uStartVertexA = d.m_uStartPosA + g_uDiagMargin - 1;\r
- const unsigned uStartVertexB = d.m_uStartPosB + g_uDiagMargin - 1;\r
- const unsigned uEndVertexA = d.m_uStartPosA + d.m_uLength - g_uDiagMargin;\r
- const unsigned uEndVertexB = d.m_uStartPosB + d.m_uLength - g_uDiagMargin;\r
-\r
- r.m_Type = DPREGIONTYPE_Rect;\r
- r.m_Rect.m_uStartPosA = uStartPosA;\r
- r.m_Rect.m_uStartPosB = uStartPosB;\r
-\r
- assert(uStartVertexA + 1 >= uStartPosA);\r
- assert(uStartVertexB + 1 >= uStartPosB);\r
- r.m_Rect.m_uLengthA = uStartVertexA + 1 - uStartPosA;\r
- r.m_Rect.m_uLengthB = uStartVertexB + 1 - uStartPosB;\r
- RL.Add(r);\r
-\r
- if (uEndVertexA > uStartVertexA + 1)\r
- {\r
- const unsigned uDiagLengthMinusCaps = uEndVertexA - uStartVertexA - 1;\r
-\r
- r.m_Type = DPREGIONTYPE_Diag;\r
- r.m_Diag.m_uStartPosA = uStartVertexA + 1;\r
- r.m_Diag.m_uStartPosB = uStartVertexB + 1;\r
- assert(uEndVertexA - uStartVertexA == uEndVertexB - uStartVertexB);\r
- r.m_Diag.m_uLength = uEndVertexA - uStartVertexA - 1;\r
- RL.Add(r);\r
- }\r
-\r
- uStartPosA = uEndVertexA;\r
- uStartPosB = uEndVertexB;\r
- }\r
-\r
- assert((int) uLengthA - (int) uStartPosA >= (int) g_uDiagMargin);\r
- assert((int) uLengthB - (int) uStartPosB >= (int) g_uDiagMargin);\r
-\r
- r.m_Type = DPREGIONTYPE_Rect;\r
- r.m_Rect.m_uStartPosA = uStartPosA;\r
- r.m_Rect.m_uStartPosB = uStartPosB;\r
-\r
- assert(uLengthA >= uStartPosA);\r
- assert(uLengthB >= uStartPosB);\r
- r.m_Rect.m_uLengthA = uLengthA - uStartPosA;\r
- r.m_Rect.m_uLengthB = uLengthB - uStartPosB;\r
- RL.Add(r);\r
- }\r