/** * Compare two heap objects. * * @param o1 Object 1. * @param o2 Object 2. * @return Result. */ private static boolean equalsHeap(BinaryObjectExImpl o1, BinaryObjectExImpl o2) { byte[] arr1 = o1.array(); byte[] arr2 = o2.array(); assert arr1 != null && arr2 != null; int i = o1.dataStartOffset(); int j = o2.dataStartOffset(); int end = o1.footerStartOffset(); // Check length. if (end - i != o2.footerStartOffset() - j) return false; for (; i < end; i++, j++) { if (arr1[i] != arr2[j]) return false; } return true; }
/** * Convert binary object to it's final state. * * @param obj Object. * @param offheap Offheap flag. * @return Result. */ private BinaryObjectExImpl convert(BinaryObjectExImpl obj, boolean offheap) { if (offheap) { byte[] arr = obj.array(); long ptr = GridUnsafe.allocateMemory(arr.length); ptrs.add(ptr); GridUnsafe.copyMemory(arr, GridUnsafe.BYTE_ARR_OFF, null, ptr, arr.length); obj = new BinaryObjectOffheapImpl(obj.context(), ptr, 0, obj.array().length); } return obj; }
/** * Convert binary object to it's final state. * * @param obj Object. * @param offheap Offheap flag. * @return Result. */ private BinaryObjectExImpl convert(BinaryObject obj, boolean offheap) { BinaryObjectExImpl obj0 = (BinaryObjectExImpl)obj; if (offheap) { byte[] arr = obj0.array(); long ptr = GridUnsafe.allocateMemory(arr.length); ptrs.add(ptr); GridUnsafe.copyMemory(arr, GridUnsafe.BYTE_ARR_OFF, null, ptr, arr.length); obj0 = new BinaryObjectOffheapImpl(obj0.context(), ptr, 0, obj0.array().length); } return obj0; }
byte[] data = ex.array();
/** * Compare heap and offheap objects. * * @param o1 Object 1 (heap). * @param o2 Object 2 (offheap). * @return Result. */ private static boolean equalsHeapOffheap(BinaryObjectExImpl o1, BinaryObjectExImpl o2) { byte[] arr1 = o1.array(); long ptr2 = o2.offheapAddress(); assert arr1 != null && ptr2 != 0; int i = o1.dataStartOffset(); int j = o2.dataStartOffset(); int end = o1.footerStartOffset(); // Check length. if (end - i != o2.footerStartOffset() - j) return false; for (; i < end; i++, j++) { if (arr1[i] != BinaryPrimitives.readByte(ptr2, j)) return false; } return true; }
/** * Compare two heap objects. * * @param o1 Object 1. * @param o2 Object 2. * @return Result. */ private static boolean equalsHeap(BinaryObjectExImpl o1, BinaryObjectExImpl o2) { byte[] arr1 = o1.array(); byte[] arr2 = o2.array(); assert arr1 != null && arr2 != null; int i = o1.dataStartOffset(); int j = o2.dataStartOffset(); int end = o1.footerStartOffset(); // Check length. if (end - i != o2.footerStartOffset() - j) return false; for (; i < end; i++, j++) { if (arr1[i] != arr2[j]) return false; } return true; }
byte[] data = ex.array();
/** * Compare heap and offheap objects. * * @param o1 Object 1 (heap). * @param o2 Object 2 (offheap). * @return Result. */ private static boolean equalsHeapOffheap(BinaryObjectExImpl o1, BinaryObjectExImpl o2) { byte[] arr1 = o1.array(); long ptr2 = o2.offheapAddress(); assert arr1 != null && ptr2 != 0; int i = o1.dataStartOffset(); int j = o2.dataStartOffset(); int end = o1.footerStartOffset(); // Check length. if (end - i != o2.footerStartOffset() - j) return false; for (; i < end; i++, j++) { if (arr1[i] != BinaryPrimitives.readByte(ptr2, j)) return false; } return true; }