public void Prepare(SharpMedia.Database.Physical.Journalling.IReadService readService, out OperationStartupData data) { // We need to allocate for our object only. data = new OperationStartupData(typedStreamHeader, BlockHelper.MaxBlocksForObject(readService.BlockSize, (ulong)objectData.LongLength)); }
public void Prepare(IReadService readService, out OperationStartupData data) { subOperationsToExecute = new List <DeleteChild>(); PrepareInternal(readService, subOperationsToExecute); data = new OperationStartupData(commonAddress, 0, true); }
public unsafe void Prepare(IReadService readService, out OperationStartupData data) { // We must make sure we can terminate if too many streams. Block block = readService.Read(BlockType.NodeHeaderBlock, versionNode); fixed(byte *p = block.Data) { NodeVersionHeader *header = (NodeVersionHeader *)p; if (header->StreamCount + 1 > BlockHelper.MaxTypedStreamsInNode(readService.BlockSize)) { throw new InvalidOperationException("Number of typed stream in node is more that " + BlockHelper.MaxTypedStreamsInNode(readService.BlockSize) + " which is the limit" + " at block size " + readService.BlockSize.ToString()); } } // We need one allocation if typed stream is single object, otherwise two. if ((options & StreamOptions.SingleObject) != 0) { data = new OperationStartupData(versionNode, 1); } else { data = new OperationStartupData(versionNode, 2); } }
public void Prepare(SharpMedia.Database.Physical.Journalling.IReadService readService, out SharpMedia.Database.Physical.Journalling.OperationStartupData data) { // We fill in the data. uint allocations = tree.InspectForAdding(readService, index); allocations += BlockHelper.MaxBlocksForObject(readService.BlockSize, (ulong)objectData.LongLength); data = new OperationStartupData(tree.RootAddress, allocations); }
public void Prepare(IReadService readService, out OperationStartupData data) { // We comoute how many blocks are needed. uint allocations = tree.InspectForInserting(readService, index, before); allocations += BlockHelper.MaxBlocksForObject(readService.BlockSize, (ulong)objectData.LongLength); data = new OperationStartupData(tree.RootAddress, allocations); }
public void Prepare(IReadService readService, out OperationStartupData data) { // We need to eximine common node address. uint allocations = childrenTree.InspectForAdding(readService, (uint)childName.GetHashCode()); allocations += 15; // rought estimate (we use dynamic allocation in extreme cases). data = new OperationStartupData(parentAddress, allocations, true); }
public void Prepare(IReadService readService, out OperationStartupData data) { // We must extract new default. if (newDefaultIndex == uint.MaxValue) { Block block = readService.Read(BlockType.NodeHeaderBlock, rootAddress); Block unused; newDefaultIndex = NodeVersionHelper.GetTypedStreamIndex(newDefault, block, readService, out unused); } data = new OperationStartupData(0, 0); }
public void Prepare(IReadService readService, out OperationStartupData data) { // We must resolve which TS to delete. if (tsToDeleteIndex == uint.MaxValue) { Block block = readService.Read(BlockType.NodeHeaderBlock, nodeVersionAddress); Block unused; tsToDeleteIndex = NodeVersionHelper.GetTypedStreamIndex(tsToDelete, block, readService, out unused); } data = new OperationStartupData(0, 0); }
public void Prepare(SharpMedia.Database.Physical.Journalling.IReadService readService, out OperationStartupData data) { // We extract all data. OperationStartupData[] subData = new OperationStartupData[subOperations.Length]; for (int i = 0; i < subOperations.Length; i++) { subOperations[i].Prepare(readService, out subData[i]); } // We merge data. data = OperationStartupData.Merge(subData); }
public unsafe void Prepare(IReadService readService, out OperationStartupData data) { Block block = readService.Read(BlockType.NodeHeaderBlock, commonAddress); fixed(byte *p = block.Data) { NodeCommonHeader *header = (NodeCommonHeader *)p; version = header->CurrentVersionNumber; versionTree = new BPlusTree(header->VersionsBTree); } // We estimate how must we need. uint allocations = 15; //< Approximate estimate. data = new OperationStartupData(commonAddress, allocations, true); }
public void Prepare(IReadService readService, out OperationStartupData data) { // May need dynamic allocation (we place smallest allocation limit quite high). data = new OperationStartupData(childrenTree.RootAddress, 8, true); }
public void Prepare(IReadService readService, out OperationStartupData data) { data = new OperationStartupData(tree.RootAddress, tree.InspectForRemoving(readService, index, count)); }