/// <summary>
        /// Calculate number of words to fit complete instruction bytecode.
        /// </summary>
        /// <returns>Number of words in instruction bytecode.</returns>
        public override uint GetWordCount()
        {
            uint wordCount = 0;

            wordCount += IdResultType.GetWordCount();
            wordCount += IdResult.GetWordCount();
            wordCount += DirectionCost.GetWordCount();
            wordCount += Payload.GetWordCount();
            return(wordCount);
        }
Esempio n. 2
0
        private void PopulateExtractionPathGrid()
        {
            for (int i = 0; i <= leftSequence.Length; i++)
            {
                pathGrid.Add(new List<DirectionCost>(topSequence.Length + 1));

                DirectionCost downDirCost = new DirectionCost();

                downDirCost.pathCost = i * 5;

                if(i != 0)
                {
                    downDirCost.direction = Direction.Down;
                }
                else
                {
                    downDirCost.direction = Direction.None;
                }

                pathGrid[i].Add(downDirCost);

                for (int j = 1; j <= topSequence.Length; j++)
                {
                    DirectionCost rightDirCost = new DirectionCost();
                    rightDirCost.pathCost = j * 5;
                    rightDirCost.direction = Direction.Right;
                    pathGrid[i].Add(rightDirCost);
                }
            }
        }
Esempio n. 3
0
        // HELPER METHODS
        private DirectionCost GetMoveDirCost(int currentRow, int currentCol)
        {
            char leftChar = leftSequence[currentRow - 1];
            char topChar = topSequence[currentCol - 1];

            bool isMatch = leftChar == topChar;

            DirectionCost right = new DirectionCost();
            right.direction = Direction.Right;
            right.pathCost = PathRight(currentRow, currentCol);

            DirectionCost down = new DirectionCost();
            down.direction = Direction.Down;
            down.pathCost = PathDown(currentRow, currentCol);

            DirectionCost diag = new DirectionCost();
            diag.direction = Direction.Diag;
            diag.pathCost = PathDiag(currentRow, currentCol, isMatch);

            return GetMinDirCost(right, down, diag);
        }
Esempio n. 4
0
 private DirectionCost GetMinDirCost(DirectionCost rightCost, DirectionCost downCost, DirectionCost diagCost)
 {
     DirectionCost firstWinner = (rightCost.pathCost <= downCost.pathCost ? rightCost : downCost);
     return diagCost.pathCost <= firstWinner.pathCost ? diagCost : firstWinner;
 }
 /// <summary>
 /// Write instruction operands into bytecode stream.
 /// </summary>
 /// <param name="writer">Bytecode writer.</param>
 public override void WriteOperands(WordWriter writer)
 {
     DirectionCost.Write(writer);
     Payload.Write(writer);
 }