public static void Defragment(IDefragmentContext context, ArrayHandler handler) { int sourceAddress = context.SourceBuffer().ReadInt(); int length = context.SourceBuffer().ReadInt(); if (sourceAddress == 0 && length == 0) { context.TargetBuffer().WriteInt(0); context.TargetBuffer().WriteInt(0); return; } Slot slot = context.AllocateMappedTargetSlot(sourceAddress, length); ByteArrayBuffer sourceBuffer = null; try { sourceBuffer = context.SourceBufferByAddress(sourceAddress, length); } catch (IOException exc) { throw new Db4oIOException(exc); } DefragmentContextImpl payloadContext = new DefragmentContextImpl(sourceBuffer, (DefragmentContextImpl )context); handler.DefragmentSlot(payloadContext); payloadContext.WriteToTarget(slot.Address()); context.TargetBuffer().WriteInt(slot.Address()); context.TargetBuffer().WriteInt(length); }
private int CopyDependentSlot(IDefragmentContext context, int sourceId) { try { ByteArrayBuffer sourceBuffer = context.SourceBufferById(sourceId); Slot targetPayloadSlot = context.AllocateTargetSlot(sourceBuffer.Length()); int targetId = context.Services().TargetNewId(); context.Services().MapIDs(sourceId, targetId, false); context.Services().Mapping().MapId(targetId, targetPayloadSlot); DefragmentContextImpl payloadContext = new DefragmentContextImpl(sourceBuffer, (DefragmentContextImpl )context); int clazzId = payloadContext.CopyIDReturnOriginalID(); ITypeHandler4 payloadHandler = payloadContext.TypeHandlerForId(clazzId); ITypeHandler4 versionedPayloadHandler = HandlerRegistry.CorrectHandlerVersion(payloadContext , payloadHandler); versionedPayloadHandler.Defragment(payloadContext); payloadContext.WriteToTarget(targetPayloadSlot.Address()); return(targetId); } catch (IOException ioexc) { throw new Db4oIOException(ioexc); } }
private int CopyDependentSlot(IDefragmentContext context, int sourceId) { try { var sourceBuffer = context.SourceBufferById(sourceId); var targetPayloadSlot = context.AllocateTargetSlot(sourceBuffer.Length()); var targetId = context.Services().TargetNewId(); context.Services().MapIDs(sourceId, targetId, false); context.Services().Mapping().MapId(targetId, targetPayloadSlot); var payloadContext = new DefragmentContextImpl(sourceBuffer, (DefragmentContextImpl ) context); var clazzId = payloadContext.CopyIDReturnOriginalID(); var payloadHandler = payloadContext.TypeHandlerForId(clazzId); var versionedPayloadHandler = HandlerRegistry.CorrectHandlerVersion(payloadContext , payloadHandler); versionedPayloadHandler.Defragment(payloadContext); payloadContext.WriteToTarget(targetPayloadSlot.Address()); return targetId; } catch (IOException ioexc) { throw new Db4oIOException(ioexc); } }
public static void Defragment(IDefragmentContext context, ArrayHandler handler) { var sourceAddress = context.SourceBuffer().ReadInt(); var length = context.SourceBuffer().ReadInt(); if (sourceAddress == 0 && length == 0) { context.TargetBuffer().WriteInt(0); context.TargetBuffer().WriteInt(0); return; } var slot = context.AllocateMappedTargetSlot(sourceAddress, length); ByteArrayBuffer sourceBuffer = null; try { sourceBuffer = context.SourceBufferByAddress(sourceAddress, length); } catch (IOException exc) { throw new Db4oIOException(exc); } var payloadContext = new DefragmentContextImpl(sourceBuffer, (DefragmentContextImpl ) context); handler.DefragmentSlot(payloadContext); payloadContext.WriteToTarget(slot.Address()); context.TargetBuffer().WriteInt(slot.Address()); context.TargetBuffer().WriteInt(length); }