/// <summary> /// The compare. /// </summary> /// <param name="x"> /// The x. /// </param> /// <param name="y"> /// The y. /// </param> /// <param name="length"> /// The length. /// </param> /// <returns> /// The <see cref="int"/>. /// </returns> public int Compare(byte[] x, byte[] y, int length) { var common = new CommonArray(); common.ByteArray = x; ulong[] array1 = common.UInt64Array; common.ByteArray = y; ulong[] array2 = common.UInt64Array; int len = length >> 3; for (int i = 0; i < len; i++) { var v1 = array1[i]; var v2 = array2[i]; if (v1 != v2) { for (int j = i << 3; ; j++) { byte b1 = x[j]; byte b2 = y[j]; if (b1 < b2) { return(-1); } if (b1 > b2) { return(1); } } } } int index = len << 3; switch (length & 7) { case 7: { var b1 = x[index]; var b2 = y[index]; if (b1 < b2) { return(-1); } if (b1 > b2) { return(1); } index++; goto case 6; } case 6: { var b1 = x[index]; var b2 = y[index]; if (b1 < b2) { return(-1); } if (b1 > b2) { return(1); } index++; goto case 5; } case 5: { var b1 = x[index]; var b2 = y[index]; if (b1 < b2) { return(-1); } if (b1 > b2) { return(1); } index++; goto case 4; } case 4: { var b1 = x[index]; var b2 = y[index]; if (b1 < b2) { return(-1); } if (b1 > b2) { return(1); } index++; goto case 3; } case 3: { var b1 = x[index]; var b2 = y[index]; if (b1 < b2) { return(-1); } if (b1 > b2) { return(1); } index++; goto case 2; } case 2: { var b1 = x[index]; var b2 = y[index]; if (b1 < b2) { return(-1); } if (b1 > b2) { return(1); } index++; goto case 1; } case 1: { var b1 = x[index]; var b2 = y[index]; if (b1 < b2) { return(-1); } if (b1 > b2) { return(1); } break; } } return(0); }
/// <summary> /// The equals. /// </summary> /// <param name="x"> /// The x. /// </param> /// <param name="y"> /// The y. /// </param> /// <returns> /// The <see cref="bool"/>. /// </returns> public bool Equals(byte[] x, byte[] y) { if (x.Length != y.Length) { return(false); } CommonArray common = new CommonArray(); common.ByteArray = x; ulong[] array1 = common.UInt64Array; common.ByteArray = y; ulong[] array2 = common.UInt64Array; int length = x.Length; int len = length >> 3; int remainder = length & 7; int i = len; if (remainder > 0) { int shift = sizeof(ulong) - remainder; if ((array1[i] << shift) >> shift != (array2[i] << shift) >> shift) { return(false); } } i--; while (i >= 7) { if (array1[i] != array2[i] || array1[i - 1] != array2[i - 1] || array1[i - 2] != array2[i - 2] || array1[i - 3] != array2[i - 3] || array1[i - 4] != array2[i - 4] || array1[i - 5] != array2[i - 5] || array1[i - 6] != array2[i - 6] || array1[i - 7] != array2[i - 7]) { return(false); } i -= 8; } if (i >= 3) { if (array1[i] != array2[i] || array1[i - 1] != array2[i - 1] || array1[i - 2] != array2[i - 2] || array1[i - 3] != array2[i - 3]) { return(false); } i -= 4; } if (i >= 1) { if (array1[i] != array2[i] || array1[i - 1] != array2[i - 1]) { return(false); } i -= 2; } if (i >= 0) { if (array1[i] != array2[i]) { return(false); } //i -= 1; } return(true); }