Пример #1
0
 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));
 }
Пример #2
0
        public void Prepare(IReadService readService, out OperationStartupData data)
        {
            subOperationsToExecute = new List <DeleteChild>();
            PrepareInternal(readService, subOperationsToExecute);

            data = new OperationStartupData(commonAddress, 0, true);
        }
Пример #3
0
        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);
            }
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }
Пример #8
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);
        }
Пример #9
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);
        }
Пример #10
0
        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);
        }
Пример #11
0
 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);
 }
Пример #12
0
 public void Prepare(IReadService readService, out OperationStartupData data)
 {
     data = new OperationStartupData(tree.RootAddress,
                                     tree.InspectForRemoving(readService, index, count));
 }