/** * 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; }
meta = rawType(); ctx.put(start(), this); Object val = field(ctx, name); if (idHash0 != null || po.hasCircularReferences(ctx, handles)) 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; }
/** * Compare two offheap objects. * * @param o1 Object 1. * @param o2 Object 2. * @return Result. */ private static boolean equalsOffheap(BinaryObjectExImpl o1, BinaryObjectExImpl o2) { long ptr1 = o1.offheapAddress(); long ptr2 = o2.offheapAddress(); assert ptr1 != 0 && 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 (BinaryPrimitives.readByte(ptr1, i) != BinaryPrimitives.readByte(ptr2, j)) return false; } return true; }
meta = rawType(); "idHash", idHash, false, "hash", hash, false, "typeId", typeId(), true); Object val = field(ctx, name); appendValue(val, buf, ctx, handles);
assert portObj.hasField("field1"); assert portObj.hasField("field2"); byte[] field1 = portObj.field("field1"); Integer field2 = portObj.field("field2"); BinaryField field1Desc = portObj.type().field("field1"); BinaryField field2Desc = portObj.type().field("field2"); TestObject objRestored = portObj.deserialize();
/** * @throws Exception If failed. */ @Test public void testCustomIdMapper() throws Exception { BinaryTypeConfiguration type = new BinaryTypeConfiguration(CustomMappedObject1.class.getName()); type.setIdMapper(new BinaryIdMapper() { @Override public int typeId(String clsName) { return 11111; } @Override public int fieldId(int typeId, String fieldName) { assert typeId == 11111; if ("val1".equals(fieldName)) return 22222; else if ("val2".equals(fieldName)) return 33333; assert false : "Unknown field: " + fieldName; return 0; } }); BinaryMarshaller marsh = binaryMarshaller(Arrays.asList(type)); CustomMappedObject1 obj1 = new CustomMappedObject1(10, "str"); BinaryObjectExImpl po1 = marshal(obj1, marsh); assertEquals(11111, po1.type().typeId()); assertEquals((Integer)10, po1.field(22222)); assertEquals("str", po1.field(33333)); assertEquals(10, po1.<CustomMappedObject1>deserialize().val1); assertEquals("str", po1.<CustomMappedObject1>deserialize().val2); }
/** * 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; }
/** * Get relative field offset. * * @param obj Object. * @return Field offset. */ public int fieldOrder(BinaryObjectExImpl obj) { if (typeId != obj.typeId()) { throw new BinaryObjectException("Failed to get field because type ID of passed object differs" + " from type ID this " + BinaryField.class.getSimpleName() + " belongs to [expected=" + typeId + ", actual=" + obj.typeId() + ']'); } int schemaId = obj.schemaId(); if (schemaId == 0) return BinarySchema.ORDER_NOT_FOUND; BinarySchema schema = schemas.schema(schemaId); if (schema == null) { schema = obj.createSchema(); schemas.addSchema(schemaId, schema); } assert schema != null; return schema.order(fieldId); }
BinaryType meta0 = po.rawType(); buf.a(po.toString(ctx, handles)); Object o = arr[i]; appendValue(o, buf, ctx, handles); Object o = it.next(); appendValue(o, buf, ctx, handles); Map.Entry<Object, Object> e = it.next(); appendValue(e.getKey(), buf, ctx, handles); appendValue(e.getValue(), buf, ctx, handles);
/** * Get test context with nested test object. * * @param marsh Binary marshaller. * @param fieldName Field name. * @return Test context. * @throws Exception If failed. */ private TestContext nestedContext(BinaryMarshaller marsh, String fieldName) throws Exception { TestObject obj = createObject(); TestOuterObject outObj = new TestOuterObject(obj); BinaryObjectExImpl portOutObj = toBinary(marsh, outObj); BinaryObjectExImpl portObj = portOutObj.field("fInner"); assert portObj != null; BinaryField field = portObj.type().field(fieldName); return new TestContext(obj, portObj, field); }
/** * Get current field. * * @return Current field. */ private Object currentField() { return obj.fieldByOrder(curFieldOrder); }
/** {@inheritDoc} */ @Override public BinaryObject clone() throws CloneNotSupportedException { return super.clone(); }
/** * Compare single field. * * @param first First object. * @param second Second object. * @param expRes Expected result. */ private void compareSingle(BinaryObjectExImpl first, BinaryObjectExImpl second, boolean expRes) { BinarySerializedFieldComparator firstComp = first.createFieldComparator(); BinarySerializedFieldComparator secondComp = second.createFieldComparator(); // Compare expected result. firstComp.findField(singleFieldOrder(first)); secondComp.findField(singleFieldOrder(second)); assertEquals(expRes, BinarySerializedFieldComparator.equals(firstComp, secondComp)); }
meta = rawType(); "idHash", idHash, false, "hash", hash, false, "typeId", typeId(), true); Object val = field(ctx, name); appendValue(val, buf, ctx, handles);
assertEquals(11111, po1.type().typeId()); assertEquals((Integer)10, po1.field(22222)); assertEquals("str1", po1.field(33333)); assertEquals(10, po1.<CustomMappedObject1>deserialize().val1); assertEquals("str1", po1.<CustomMappedObject1>deserialize().val2); assertEquals(44444, po2.type().typeId()); assertEquals((Integer)20, po2.field(55555)); assertEquals("str2", po2.field(66666)); assertEquals(20, po2.<CustomMappedObject2>deserialize().val1); assertEquals("str2", po2.<CustomMappedObject2>deserialize().val2);
/** * 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; }
/** * 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; }
/** * Get relative field offset. * * @param obj Object. * @return Field offset. */ public int fieldOrder(BinaryObjectExImpl obj) { if (typeId != obj.typeId()) { throw new BinaryObjectException("Failed to get field because type ID of passed object differs" + " from type ID this " + BinaryField.class.getSimpleName() + " belongs to [expected=" + typeId + ", actual=" + obj.typeId() + ']'); } int schemaId = obj.schemaId(); if (schemaId == 0) return BinarySchema.ORDER_NOT_FOUND; BinarySchema schema = schemas.schema(schemaId); if (schema == null) { schema = obj.createSchema(); schemas.addSchema(schemaId, schema); } assert schema != null; return schema.order(fieldId); }