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; }
private void CalculateAndSetMaximumSize(AddressingSystemParameters addressingSystemParameters) { var maximumSize = new DoubleIndirectionCompositeIndex( 0, addressingSystemParameters.IndirectBlockReferencesCountInDoubleIndirectBlock, addressingSystemParameters.DataBlockReferencesCountInSingleIndirectBlock, addressingSystemParameters.BlockSize); this.MaximumSize = maximumSize.MaxValue; }
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 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; }