예제 #1
0
        private DiffResult GetDiffResult(Difference diff)
        {
            DiffResult result = new DiffResult();

            if (diff == null)
            {
                result.Type = DiffResultType.EntryDoesNotExists;
            }
            else if (!diff.DataItems.Any(di => di.Side == DiffItemSide.Left))
            {
                result.Type = DiffResultType.LeftSideMissing;
            }
            else if (!diff.DataItems.Any(di => di.Side == DiffItemSide.Right))
            {
                result.Type = DiffResultType.RightSideMissing;
            }
            else
            {
                byte[] leftItem = Convert.FromBase64String(
                    diff.DataItems.First(di => di.Side == DiffItemSide.Left).Data);

                byte[] rightItem = Convert.FromBase64String(
                    diff.DataItems.First(di => di.Side == DiffItemSide.Right).Data);

                if (leftItem.SequenceEqual(rightItem))
                {
                    result.Type = DiffResultType.FullMatch;
                }
                else if (leftItem.Length == rightItem.Length)
                {
                    int binaryLength = leftItem.Length * 8; // Gets total count of bits.

                    result.Type  = DiffResultType.SizeMatch;
                    result.Diffs = GetDiffInfoCollection(
                        NumericHelper.CreateBigInt(leftItem),
                        NumericHelper.CreateBigInt(rightItem),
                        binaryLength);
                }
                else
                {
                    result.Type = DiffResultType.SizeMismatch;
                }
            }

            return(result);
        }