public void Reset() { Label1.gameObject.SetActive(false); Label2.gameObject.SetActive(false); IsOver = true; Before = null; }
public ChangeNode(ChangeType type, double score, int nodeCount, ChangeNode next = null) { Type = type; Score = score; Next = next; NodeCount = nodeCount; }
private AlignedDiffChange <T>[] TryAlignChanges(DiffChange change, int i1, int i2) { // "Optimization", too big input-sets will have to be dropped for now, will revisit this // number in the future to see if I can bring it up, or possible that I don't need it, // but since this is a recursive solution the combinations could get big fast. if (change.Length1 + change.Length2 > MaximumChangedSectionSizeBeforePuntingToDeletePlusAdd) { return(new AlignedDiffChange <T> [0]); } _BestAlignmentNodes.Clear(); _Upper1 = i1 + change.Length1; _Upper2 = i2 + change.Length2; ChangeNode alignmentNodes = CalculateAlignmentNodes(i1, i2); if (alignmentNodes != null) { var result = new List <AlignedDiffChange <T> >(); while (alignmentNodes != null) { switch (alignmentNodes.Type) { case ChangeType.Added: result.Add(new AlignedDiffChange <T>(ChangeType.Added, default(T), _Collection2[i2])); i2++; break; case ChangeType.Deleted: result.Add(new AlignedDiffChange <T>(ChangeType.Deleted, _Collection1[i1], default(T))); i1++; break; case ChangeType.Changed: if (_AlignmentFilter.CanAlign(_Collection1[i1], _Collection2[i2])) { result.Add(new AlignedDiffChange <T>(ChangeType.Changed, _Collection1[i1], _Collection2[i2])); } else { result.Add(new AlignedDiffChange <T>(ChangeType.Deleted, _Collection1[i1], default(T))); result.Add(new AlignedDiffChange <T>(ChangeType.Added, default(T), _Collection2[i2])); } i1++; i2++; break; } alignmentNodes = alignmentNodes.Next; } return(result.ToArray()); } return(new AlignedDiffChange <T> [0]); }
/// Records a Change **RELATIVE TO THE MOVE**. public ChangeNode RecordChange(object val) { DieIf(FirstSideEffect != null, "Can't have change and side effects at the move level."); DieIf(Change != null, "Can't update the change. (Once set, is readonly)."); return(Change = new ChangeNode(InputName, val)); }
private ChangeNode CalculateAlignmentNodes(int i1, int i2) { ChangeNode result; if (_BestAlignmentNodes.TryGetValue(new AlignmentKey(i1, i2), out result)) { return(result); } if (i1 == _Upper1 && i2 == _Upper2) { result = new ChangeNode(ChangeType.Same, 0.0, 0); } else if (i1 == _Upper1) { ChangeNode restAfterAddition = CalculateAlignmentNodes(i1, i2 + 1); result = new ChangeNode(ChangeType.Added, restAfterAddition.Score, restAfterAddition.NodeCount + 1, restAfterAddition); } else if (i2 == _Upper2) { ChangeNode restAfterDeletion = CalculateAlignmentNodes(i1 + 1, i2); result = new ChangeNode(ChangeType.Deleted, restAfterDeletion.Score, restAfterDeletion.NodeCount + 1, restAfterDeletion); } else { ChangeNode restAfterAddition = CalculateAlignmentNodes(i1, i2 + 1); var resultAdded = new ChangeNode(ChangeType.Added, restAfterAddition.Score, restAfterAddition.NodeCount + 1, restAfterAddition); ChangeNode restAfterDeletion = CalculateAlignmentNodes(i1 + 1, i2); var resultDeleted = new ChangeNode(ChangeType.Deleted, restAfterDeletion.Score, restAfterDeletion.NodeCount + 1, restAfterDeletion); double similarity = _SimilarityComparer.Compare(_Collection1[i1], _Collection2[i2]); ChangeNode restAfterChange = CalculateAlignmentNodes(i1 + 1, i2 + 1); var resultChanged = new ChangeNode(ChangeType.Changed, similarity + restAfterChange.Score, restAfterChange.NodeCount + 1, restAfterChange); if (resultChanged.AverageScore >= resultAdded.AverageScore && resultChanged.AverageScore >= resultDeleted.AverageScore) { result = resultChanged; } else if (resultAdded.AverageScore >= resultChanged.AverageScore && resultAdded.AverageScore >= resultDeleted.AverageScore) { result = resultAdded; } else { result = resultDeleted; } } _BestAlignmentNodes[new AlignmentKey(i1, i2)] = result; return(result); }
private void OnInitList() { nodeList = new List <ChangeNode>(); for (var i = 0; i < 9; i++) { var node = new ChangeNode(); node.IsOver = true; node.Label1 = LabelList1[i]; node.Label1.gameObject.SetActive(false); node.Label2 = LabelList2[i]; node.Label2.gameObject.SetActive(false); node.Index = 0; node.Init(); nodeList.Add(node); } }
public void Refresh(int b, int e) { if (overCoroutine != null) { StopCoroutine(overCoroutine); } var beginValue = 0; var endValue = 0; beginValue = b; endValue = e; endValue = e; startValue = b; if (beginValue < endValue) { modifyKind = 1; UpArrow.SetActive(true); DownArrow.SetActive(false); } else if (beginValue > endValue) { modifyKind = -1; UpArrow.SetActive(false); DownArrow.SetActive(true); } else { return; } var start = false; var totalLegth = 0; var LastLegth = -1; var diffCount = 0; ChangeNode LastNode = null; for (var i = 9 - 1; i >= 0; i--) { var pow = (int)Mathf.Pow(10, i); var begin = beginValue / pow; var end = endValue / pow; var node = nodeList[i]; if (!start) { if (begin == 0 && end == 0) { node.Reset(); continue; } start = true; } beginValue = beginValue % pow; endValue = endValue % pow; if (LastNode == null) { LastNode = nodeList[i]; node.Before = null; } else { node.Before = LastNode; LastNode.After = node; LastNode = node; } var label1Trans = node.Label1.transform; var label2Trans = node.Label2.transform; if (begin == end) { if (diffCount == 0) { node.Label1.gameObject.SetActive(true); label1Trans.localPosition = new Vector3(totalLegth * 20.0f, 0, 0); node.Label2.gameObject.SetActive(false); node.SetText1(begin); node.IsOver = true; totalLegth++; continue; } } node.Index = i; node.IsOver = false; node.Bgein = begin; node.Label1.gameObject.SetActive(true); node.Label1.text = begin.ToString(); node.Now = nodeList[i].Bgein; node.End = end; label1Trans.localPosition = new Vector3(totalLegth * 20.0f, 0, 0); node.Label2.gameObject.SetActive(true); if (modifyKind == -1) { label2Trans.localPosition = new Vector3(totalLegth * 20.0f, 30, 0); } else { label2Trans.localPosition = new Vector3(totalLegth * 20.0f, -30, 0); } node.Length = end - begin + diffCount * 10 * modifyKind; if (node.Length > 20) { node.Length = 20 + diffCount * 2; //node.Length%20 + 10;// node.Length % 20 + 10; } else if (node.Length < -20) { node.Length = -20 - diffCount * 2; //node.Length % 20 - 10;// } node.SetText2(ChangeNode.GetNext(node.Now, modifyKind)); node.Now = ChangeNode.GetNext(node.Now, modifyKind); totalLegth++; diffCount++; //node.Now = diffCount; } overCoroutine = StartCoroutine(OverEnumerator()); isEnable = true; }