Ejemplo n.º 1
0
        protected System.Collections.Generic.List <Entry> Diff(MetaColumn mc, Column colA, long[] indexA, Column colB, long[] indexB)
        {
            int curA = 0;
            int curB = 0;
            int maxA = indexA.Length;
            int maxB = indexB.Length;
            var exp  = ColumnCreator.CreateTypedExpressionColumn(mc.Type, colB);

            System.Collections.Generic.List <Entry> entries = new System.Collections.Generic.List <Entry>();
            while (curA < maxA && curB < maxB)
            {
                int r = colA.Compare(indexA[curA], exp, indexB[curB]);
                switch (r)
                {
                case -1:
                    if (IsResultFilter(DiffResult.Deleted))
                    {
                        entries.Add(new Entry(DiffResult.Deleted, 0, indexA[curA]));
                    }

                    ++curA;
                    break;

                case 0:
                    if (IsResultFilter(DiffResult.Same))
                    {
                        entries.Add(new Entry(DiffResult.Same, 0, indexA[curA]));
                    }
                    ++curA;
                    ++curB;
                    break;

                case 1:

                    if (IsResultFilter(DiffResult.New))
                    {
                        entries.Add(new Entry(DiffResult.New, 1, indexB[curB]));
                    }
                    ++curB;
                    break;

                default:
                    throw new Exception("Bad compare result");
                }
            }

            if (IsResultFilter(DiffResult.Deleted))
            {
                while (curA < maxA)
                {
                    // trailing deleted entries
                    entries.Add(new Entry(DiffResult.Deleted, 0, curA));
                    ++curA;
                }
            }
            else
            {
                UnityEngine.Debug.Log("ignored entry");
            }
            if (IsResultFilter(DiffResult.New))
            {
                while (curB < maxB)
                {
                    // trailing new entries
                    entries.Add(new Entry(DiffResult.New, 1, curB));
                    ++curB;
                }
            }
            else
            {
                UnityEngine.Debug.Log("ignored entry");
            }
            return(entries);
        }