private void doDeserialization() { if (deserialized) return; int offset = 0; int entriesSize = OIntegerSerializer.INSTANCE.deserialize(serializedContent, offset); offset += OIntegerSerializer.INT_SIZE; for (int i = 0; i < entriesSize; i++) { ORID rid = OLinkSerializer.INSTANCE.deserialize(serializedContent, offset); offset += OLinkSerializer.RID_SIZE; OIdentifiable identifiable; if (rid.isTemporary()) identifiable = rid.getRecord(); else identifiable = rid; addEntry(identifiable); } deserialized = true; }
public Map<OIdentifiable, Change> deserializeChanges(final byte[] stream, int offset) { final int count = OIntegerSerializer.INSTANCE.deserializeLiteral(stream, offset); offset += OIntegerSerializer.INT_SIZE; final HashMap<OIdentifiable, Change> res = new HashMap<OIdentifiable, Change>(); for (int i = 0; i < count; i++) { ORecordId rid = OLinkSerializer.INSTANCE.deserialize(stream, offset); offset += OLinkSerializer.RID_SIZE; Change change = ChangeSerializationHelper.INSTANCE.deserializeChange(stream, offset); offset += Change.SIZE; final OIdentifiable identifiable; if (rid.isTemporary() && rid.getRecord() != null) identifiable = rid.getRecord(); else identifiable = rid; res.put(identifiable, change); } return res; }
@Override public int serialize(byte[] stream, int offset, UUID ownerUuid) { for (int i = 0; i < entriesLength; i++) { final Object entry = entries[i]; if (entry instanceof OIdentifiable) { final OIdentifiable identifiable = (OIdentifiable) entry; if (identifiable instanceof ORecord) { final ORecord record = (ORecord) identifiable; if (record.isDirty() || record.getIdentity().isNew()) { record.save(); } } } } if (!deserialized) { System.arraycopy(serializedContent, 0, stream, offset, serializedContent.length); if (contentWasChanged) { OIntegerSerializer.INSTANCE.serialize(size, stream, offset); offset += serializedContent.length; } else { offset += serializedContent.length; return offset; } } else { OIntegerSerializer.INSTANCE.serialize(size, stream, offset); offset += OIntegerSerializer.INT_SIZE; } for (Object entry : entries) { if (entry instanceof OIdentifiable) { OLinkSerializer.INSTANCE.serialize((OIdentifiable) entry, stream, offset); offset += OLinkSerializer.RID_SIZE; } } return offset; }