/// <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); }
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); } } }
// 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); }
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); }