DiffEntry.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using System.Threading;
  2. namespace Quadarax.Foundation.Core.Data.Diff
  3. {
  4. public abstract class DiffEntry
  5. {
  6. public enum CompareStateEnum
  7. {
  8. NotInitialized,
  9. BothNull,
  10. CurrentNull,
  11. OtherNull,
  12. CurrentSmaller,
  13. CurrentGrater,
  14. Equals,
  15. DifferentKey
  16. }
  17. public object Item { get; private set; }
  18. public CompareStateEnum CompareState { get; private set; }
  19. protected DiffEntry(object item)
  20. {
  21. SetItem(item);
  22. }
  23. protected DiffEntry()
  24. {
  25. CompareState = CompareStateEnum.NotInitialized;
  26. }
  27. public abstract object GetKey();
  28. internal void SetItem(object item)
  29. {
  30. Item = item;
  31. }
  32. /// <summary>
  33. ///
  34. /// </summary>
  35. /// <param name="other"></param>
  36. /// <returns>-1 = both null, 0 - current null, 1 - other null, 2 - current smaller, 3 - current bigger, 4 - equals, 5 - different key</returns>
  37. public CompareStateEnum Compare(DiffEntry other)
  38. {
  39. if (other == null && Item == null)
  40. return SetCompareState(CompareStateEnum.BothNull);
  41. if (Item == null)
  42. return SetCompareState(CompareStateEnum.CurrentNull);
  43. if (other == null)
  44. return SetCompareState(CompareStateEnum.OtherNull);
  45. if (!Equals(GetKey(), other.GetKey()))
  46. return SetCompareState(CompareStateEnum.DifferentKey);
  47. return OnCompareEquality(other);
  48. }
  49. public TItem GetItem<TItem>()
  50. {
  51. return (TItem)Item;
  52. }
  53. /// <summary>
  54. ///
  55. /// </summary>
  56. /// <param name="other"></param>
  57. /// <returns>2 - current smaller, 3 - current bigger, 4 - equals</returns>
  58. protected abstract CompareStateEnum OnCompareEquality(DiffEntry other);
  59. internal CompareStateEnum SetCompareState(CompareStateEnum state)
  60. {
  61. CompareState = state;
  62. return state;
  63. }
  64. }
  65. }