protected 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; Expression[] expressions = new Expression[mc.Length]; for (int i = 0; i < mc.Length; ++i) { expressions[i] = ColumnCreator.CreateTypedExpressionColumn(mc[i].Type.scriptingType, colB[i]); } List <Entry> entries = new List <Entry>(); while (curA < maxA && curB < maxB) { int r = MultiColumnElementCompare(colA, indexA[curA], indexB[curB], expressions); 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); }
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); }