//Returns MemoryBlockchainStorage with elements from [splitIndex, blocks.size() - 1]. //Original SwappedBlockchainStorage will contain elements from [0, splitIndex - 1]. //Returns MemoryBlockchainStorage with elements from [splitIndex, blocks.size() - 1]. //Original SwappedBlockchainStorage will contain elements from [0, splitIndex - 1]. public override std::unique_ptr <BlockchainStorage.IBlockchainStorageInternal> splitStorage(uint splitIndex) { Debug.Assert(splitIndex > 0); Debug.Assert(splitIndex < blocks.size()); std::unique_ptr <MemoryBlockchainStorage> newStorage = new std::unique_ptr <MemoryBlockchainStorage>(new MemoryBlockchainStorage(new uint(splitIndex))); ulong blocksCount = blocks.size(); for (ulong i = splitIndex; i < blocksCount; ++i) { newStorage.pushBlock(RawBlock(blocks[i])); } for (ulong i = 0; i < blocksCount - splitIndex; ++i) { blocks.pop_back(); } return(std::move(newStorage)); }