4 void TraceBackToPath(int **TraceBack, unsigned uLengthA,
\r
5 unsigned uLengthB, PWPath &Path)
\r
10 Edge.uPrefixLengthA = uLengthA;
\r
11 Edge.uPrefixLengthB = uLengthB;
\r
15 if (0 == Edge.uPrefixLengthA && 0 == Edge.uPrefixLengthB)
\r
18 int iDelta = TraceBack[Edge.uPrefixLengthA][Edge.uPrefixLengthB];
\r
20 Log("TraceBack[%u][%u] = %d\n",
\r
21 Edge.uPrefixLengthA, Edge.uPrefixLengthB, iDelta);
\r
25 assert(Edge.uPrefixLengthA > 0);
\r
26 assert(Edge.uPrefixLengthB > 0);
\r
29 Path.PrependEdge(Edge);
\r
30 --(Edge.uPrefixLengthA);
\r
31 --(Edge.uPrefixLengthB);
\r
34 else if (iDelta > 0)
\r
37 while (iDelta-- > 0)
\r
39 assert(Edge.uPrefixLengthA > 0);
\r
41 Path.PrependEdge(Edge);
\r
42 --(Edge.uPrefixLengthA);
\r
45 else if (iDelta < 0)
\r
48 while (iDelta++ < 0)
\r
50 assert(Edge.uPrefixLengthB > 0);
\r
52 Path.PrependEdge(Edge);
\r
53 --(Edge.uPrefixLengthB);
\r
57 if (0 == Edge.uPrefixLengthA && 0 == Edge.uPrefixLengthB)
\r
60 assert(Edge.uPrefixLengthA > 0);
\r
61 assert(Edge.uPrefixLengthB > 0);
\r
64 Path.PrependEdge(Edge);
\r
65 --(Edge.uPrefixLengthA);
\r
66 --(Edge.uPrefixLengthB);
\r
70 Log("TraceBackToPath ");
\r