public void Reset()
 {
     Label1.gameObject.SetActive(false);
     Label2.gameObject.SetActive(false);
     IsOver = true;
     Before = null;
 }
Example #2
0
 public ChangeNode(ChangeType type, double score, int nodeCount, ChangeNode next = null)
 {
     Type      = type;
     Score     = score;
     Next      = next;
     NodeCount = nodeCount;
 }
Example #3
0
        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]);
        }
Example #4
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));
    }
Example #5
0
        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;
        }