public NonEmptyDiskBlockEnumerator( IVirtualDisk disk, DataStreamDefinition dataStreamDefinition, AddressingSystemParameters addressingSystemParameters, IFileSystemNodeStorage fileSystemNodeStorage, Node streamOwningNode, EnumeratorAddressable <int> doubleIndirectListEnumerator) { if (disk == null) { throw new ArgumentNullException("disk"); } if (dataStreamDefinition == null) { throw new ArgumentNullException("dataStreamDefinition"); } if (addressingSystemParameters == null) { throw new ArgumentNullException("addressingSystemParameters"); } if (fileSystemNodeStorage == null) { throw new ArgumentNullException("fileSystemNodeStorage"); } if (streamOwningNode == null) { throw new ArgumentNullException("streamOwningNode"); } if (doubleIndirectListEnumerator == null) { throw new ArgumentNullException("doubleIndirectListEnumerator"); } _disk = disk; _dataStreamDefinition = dataStreamDefinition; _addressingSystemParameters = addressingSystemParameters; _fileSystemNodeStorage = fileSystemNodeStorage; _streamOwningNode = streamOwningNode; _doubleIndirectListEnumerator = doubleIndirectListEnumerator; if (doubleIndirectListEnumerator.Count == 0) { throw new ArgumentException("doubleIndirectListEnumerator"); } _numberOfBlocks = SpaceRequirementsCalculator.GetNumberOfChunksNeededToStoreData(_dataStreamDefinition.StreamLengthInBytes, _disk.BlockSizeInBytes); _blockSizesCalculator = new AddressingBlockSizesCalculator(addressingSystemParameters.IndirectBlockReferencesCountInDoubleIndirectBlock, addressingSystemParameters.DataBlockReferencesCountInSingleIndirectBlock); _addressingSystemSizesOfLastBlocks = _blockSizesCalculator.GetSizesOfAddressingBlocksSufficientToStoreItems(_numberOfBlocks); this.SetFirstSingleIndirectBlock(); _current = new NullDiskBlock(); _position = PositionBeforeFirstElement; }
public DataStreamStructureBuilderImmutable(IVirtualDisk disk, DataStreamDefinition dataStreamDefinition, AddressingSystemParameters addressingSystemParameters, IFileSystemNodeStorage fileSystemNodeStorage, Node governingNode) { if (disk == null) { throw new ArgumentNullException("disk"); } if (dataStreamDefinition == null) { throw new ArgumentNullException("dataStreamDefinition"); } if (addressingSystemParameters == null) { throw new ArgumentNullException("addressingSystemParameters"); } if (fileSystemNodeStorage == null) { throw new ArgumentNullException("fileSystemNodeStorage"); } if (governingNode == null) { throw new ArgumentNullException("governingNode"); } _disk = disk; _governingNode = governingNode; _fileSystemNodeStorage = fileSystemNodeStorage; _addressingSystemParameters = addressingSystemParameters; _dataStreamDefinition = dataStreamDefinition; int numberOfBlocks = SpaceRequirementsCalculator.GetNumberOfChunksNeededToStoreData( dataStreamDefinition.StreamLengthInBytes, addressingSystemParameters.BlockSize); _addressingBlockSizesCalculator = new AddressingBlockSizesCalculator(addressingSystemParameters.IndirectBlockReferencesCountInDoubleIndirectBlock, addressingSystemParameters.DataBlockReferencesCountInSingleIndirectBlock); _sizesOfLastAddressingBlocks = AddressingBlockSizesCalculator.GetSizesOfAddressingBlocksSufficientToStoreItems(numberOfBlocks); int doubleIndirectBlockSize = _sizesOfLastAddressingBlocks.DoubleIndirectBlockSize; _doubleIndirectBlocks = new IntegerListConstrained(disk.ReadAllBytesFromBlock(dataStreamDefinition.ContentsBlockIndex), doubleIndirectBlockSize, _addressingSystemParameters.IndirectBlockReferencesCountInDoubleIndirectBlock); CalculateAndSetMaximumSize(addressingSystemParameters); }
public DataStreamNodeUpdating(DataStreamReadableWritable dataStream, Node streamOwningNode, IFileSystemNodeStorage fileSystemNodeStorage) { if (dataStream == null) { throw new ArgumentNullException("dataStream"); } if (streamOwningNode == null) { throw new ArgumentNullException("streamOwningNode"); } if (fileSystemNodeStorage == null) { throw new ArgumentNullException("fileSystemNodeStorage"); } _dataStream = dataStream; _streamOwningNode = streamOwningNode; _fileSystemNodeStorage = fileSystemNodeStorage; }
public AllCollaborators(IVirtualDisk disk, IFileSystemNodeStorage diskStructuresManager, IFileSystemArtifactNamesValidator nameValidator, IPathValidator pathValidator, NodeResolver nodeResolver, VirtualFileSystem virtualFileSystem, FileInfo fileNodeFake, Stream stream) { if (disk == null) { throw new ArgumentNullException("disk"); } if (diskStructuresManager == null) { throw new ArgumentNullException("diskStructuresManager"); } if (nameValidator == null) { throw new ArgumentNullException("nameValidator"); } if (pathValidator == null) { throw new ArgumentNullException("pathValidator"); } if (nodeResolver == null) { throw new ArgumentNullException("nodeResolver"); } if (virtualFileSystem == null) { throw new ArgumentNullException("virtualFileSystem"); } if (stream == null) { throw new ArgumentNullException("stream"); } Disk = disk; DiskStructuresManager = diskStructuresManager; NameValidator = nameValidator; PathValidator = pathValidator; NodeResolver = nodeResolver; VirtualFileSystem = virtualFileSystem; FileNodeFake = fileNodeFake; Stream = stream; }
public DiskBlockNodeUpdating(IDiskBlock diskBlockWrapped, DataStreamDefinition owningStreamDefinition, Node blockOwningNode, IFileSystemNodeStorage fileSystemNodeStorage) { if (diskBlockWrapped == null) { throw new ArgumentNullException("diskBlockWrapped"); } if (owningStreamDefinition == null) { throw new ArgumentNullException("owningStreamDefinition"); } if (blockOwningNode == null) { throw new ArgumentNullException("blockOwningNode"); } if (fileSystemNodeStorage == null) { throw new ArgumentNullException("fileSystemNodeStorage"); } _diskBlockWrapped = diskBlockWrapped; _owningStreamDefinition = owningStreamDefinition; _blockOwningNode = blockOwningNode; _fileSystemNodeStorage = fileSystemNodeStorage; }
public DataStreamTestCollaboratorSet(IVirtualDisk disk, IFileSystemNodeStorage fileSystemNodeStorage, FileInfo fileInfo, VirtualFileSystem virtualFileSystem) { if (disk == null) { throw new ArgumentNullException("disk"); } if (fileSystemNodeStorage == null) { throw new ArgumentNullException("fileSystemNodeStorage"); } if (fileInfo == null) { throw new ArgumentNullException("fileInfo"); } if (virtualFileSystem == null) { throw new ArgumentNullException("virtualFileSystem"); } Disk = disk; FileSystemNodeStorage = fileSystemNodeStorage; FileInfo = fileInfo; VirtualFileSystem = virtualFileSystem; }
public void MakeSureStructureBuilderAllocatesExactlyTheNumberOfBlocksNeededToStoreTheData() { var testCollaborators = TestCollaboratorsFactory.CreateCollaboratorsForTestingDataStreamStructureBuilder(); MockRepository mocks = new MockRepository(); IFreeBlockManager freeBlockManager = mocks.DynamicMock <IFreeBlockManager>(); IFileSystemNodeStorage nodeStorageStub = mocks.Stub <IFileSystemNodeStorage>(); int freeBlockCounter = 25; int numberOfFreeBlocksAllocated = 0; using (mocks.Unordered()) { Expect.Call(freeBlockManager.AcquireFreeBlocks(1)).IgnoreArguments().Do( new Func <int, ReadOnlyCollection <int> >(delegate(int i) { var blocks = new List <int>(); for (int j = 0; j < i; j++) { blocks.Add(freeBlockCounter); freeBlockCounter++; } numberOfFreeBlocksAllocated += i; return(blocks.AsReadOnly()); })); Expect.Call(freeBlockManager.AcquireFreeBlock()).IgnoreArguments().Do( new Func <int>(delegate { freeBlockCounter++; numberOfFreeBlocksAllocated++; return(freeBlockCounter); })); } mocks.ReplayAll(); var dataStreamStructureBuilder = new TestDataStreamStructureBuilder( testCollaborators.FileNode.ResolvedNode.FileContentsStreamDefinition, testCollaborators.Disk, freeBlockManager, nodeStorageStub, testCollaborators.FileNode.ResolvedNode, AddressingSystemParameters.Default); Assert.AreEqual(0, dataStreamStructureBuilder.DoubleIndirectBlocks.Count); dataStreamStructureBuilder.SetSize(1000); Assert.AreEqual(1000, dataStreamStructureBuilder.CurrentSize); var diskStructureEnumerator = dataStreamStructureBuilder.CreateEnumerator(); Assert.AreEqual(2, numberOfFreeBlocksAllocated); // один для данных, другой - под single indirect block Assert.AreEqual(1, diskStructureEnumerator.Count); // количество дисковых блоков = 1 Assert.AreEqual(1, dataStreamStructureBuilder.DoubleIndirectBlocks.Count); dataStreamStructureBuilder.SetSize(1500); Assert.AreEqual(1500, dataStreamStructureBuilder.CurrentSize); dataStreamStructureBuilder.SetSize(2000); Assert.AreEqual(2000, dataStreamStructureBuilder.CurrentSize); diskStructureEnumerator = dataStreamStructureBuilder.CreateEnumerator(); Assert.AreEqual(2, numberOfFreeBlocksAllocated); Assert.AreEqual(1, diskStructureEnumerator.Count); // количество дисковых блоков = 1 Assert.AreEqual(1, dataStreamStructureBuilder.DoubleIndirectBlocks.Count); dataStreamStructureBuilder.SetSize(2048); Assert.AreEqual(2048, dataStreamStructureBuilder.CurrentSize); diskStructureEnumerator = dataStreamStructureBuilder.CreateEnumerator(); Assert.AreEqual(2, numberOfFreeBlocksAllocated); // оверхед системы адресации - еще один блок. Assert.AreEqual(1, diskStructureEnumerator.Count); // количество дисковых блоков = 2 Assert.AreEqual(1, dataStreamStructureBuilder.DoubleIndirectBlocks.Count); dataStreamStructureBuilder.SetSize(testCollaborators.Disk.BlockSizeInBytes * (testCollaborators.Disk.BlockSizeInBytes / 4) * 3); Assert.AreEqual((testCollaborators.Disk.BlockSizeInBytes / 4) * 3 + 3, numberOfFreeBlocksAllocated); dataStreamStructureBuilder.SetSize(testCollaborators.Disk.BlockSizeInBytes * (testCollaborators.Disk.BlockSizeInBytes / 4) * 5); }
public TestDataStreamStructureBuilder(DataStreamDefinition dataStreamDefinition, IVirtualDisk disk, IFreeBlockManager freeBlockManager, IFileSystemNodeStorage fileSystemNodeStorage, Node governingNode, AddressingSystemParameters addressingSystemParameters) : base(dataStreamDefinition, disk, freeBlockManager, fileSystemNodeStorage, governingNode, addressingSystemParameters) { }
/// <summary> /// /// </summary> /// <param name="dataStreamDefinition"></param> /// <param name="disk"></param> /// <param name="freeBlockManager"></param> /// <param name="fileSystemNodeStorage"></param> /// <param name="governingNode"></param> /// <param name="addressingSystemParameters"></param> /// <exception cref="ArgumentNullException"></exception> public DataStreamStructureBuilder(DataStreamDefinition dataStreamDefinition, IVirtualDisk disk, IFreeBlockManager freeBlockManager, IFileSystemNodeStorage fileSystemNodeStorage, Node governingNode, AddressingSystemParameters addressingSystemParameters) : base(disk, dataStreamDefinition, addressingSystemParameters, fileSystemNodeStorage, governingNode) { if (freeBlockManager == null) { throw new ArgumentNullException("freeBlockManager"); } _freeBlockManager = freeBlockManager; }