Remove Do* methods from IStorage

This commit is contained in:
Alex Barney 2021-12-28 17:00:37 -07:00
parent f1d704b8f8
commit f0df8c2d9b
33 changed files with 308 additions and 259 deletions

View File

@ -52,7 +52,7 @@ public class FileStorage : IStorage
_baseFile = file;
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
if (destination.Length == 0)
return Result.Success;
@ -66,7 +66,7 @@ public class FileStorage : IStorage
return _baseFile.Read(out _, offset, destination, ReadOption.None);
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
if (source.Length == 0)
return Result.Success;
@ -80,12 +80,12 @@ public class FileStorage : IStorage
return _baseFile.Write(offset, source, WriteOption.None);
}
protected override Result DoFlush()
public override Result Flush()
{
return _baseFile.Flush();
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
UnsafeHelpers.SkipParamInit(out size);
@ -96,13 +96,13 @@ public class FileStorage : IStorage
return Result.Success;
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
_fileSize = InvalidSize;
return _baseFile.SetSize(size);
}
protected override Result DoOperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size, ReadOnlySpan<byte> inBuffer)
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size, ReadOnlySpan<byte> inBuffer)
{
if (operationId == OperationId.InvalidateCache)
{
@ -245,7 +245,7 @@ public class FileHandleStorage : IStorage
base.Dispose();
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
using ScopedLock<SdkMutexType> scopedLock = ScopedLock.Lock(ref _mutex);
@ -261,7 +261,7 @@ public class FileHandleStorage : IStorage
return _fsClient.ReadFile(_handle, offset, destination, ReadOption.None);
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
using ScopedLock<SdkMutexType> scopedLock = ScopedLock.Lock(ref _mutex);
@ -277,12 +277,12 @@ public class FileHandleStorage : IStorage
return _fsClient.WriteFile(_handle, offset, source, WriteOption.None);
}
protected override Result DoFlush()
public override Result Flush()
{
return _fsClient.FlushFile(_handle);
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
UnsafeHelpers.SkipParamInit(out size);
@ -293,13 +293,13 @@ public class FileHandleStorage : IStorage
return Result.Success;
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
_size = InvalidSize;
return _fsClient.SetFileSize(_handle, size);
}
protected override Result DoOperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size, ReadOnlySpan<byte> inBuffer)
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size, ReadOnlySpan<byte> inBuffer)
{
if (operationId != OperationId.QueryRange)
return ResultFs.UnsupportedOperateRangeForFileHandleStorage.Log();

View File

@ -637,10 +637,10 @@ public static class UserFileSystem
{
// Todo: Add access log
if (mountNames.Length > 10)
if (mountNames.Length < 0)
return ResultFs.InvalidCommitNameCount.Log();
if (mountNames.Length < 10)
if (mountNames.Length > 10)
return ResultFs.InvalidCommitNameCount.Log();
if (mountNames.Length == 0)

View File

@ -12,8 +12,11 @@ namespace LibHac.Fs;
/// have <c>DoRead</c> etc. methods. We're using them here so we can make sure
/// the object isn't disposed before calling the method implementation.
/// </remarks>
/// <remarks>Based on FS 13.1.0 (nnSdk 13.4.0)</remarks>
public abstract class IStorage : IDisposable
{
public virtual void Dispose() { }
/// <summary>
/// Reads a sequence of bytes from the current <see cref="IStorage"/>.
/// </summary>
@ -21,11 +24,7 @@ public abstract class IStorage : IDisposable
/// <param name="destination">The buffer where the read bytes will be stored.
/// The number of bytes read will be equal to the length of the buffer.</param>
/// <returns>The <see cref="Result"/> of the operation.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public Result Read(long offset, Span<byte> destination)
{
return DoRead(offset, destination);
}
public abstract Result Read(long offset, Span<byte> destination);
/// <summary>
/// Writes a sequence of bytes to the current <see cref="IStorage"/>.
@ -33,42 +32,38 @@ public abstract class IStorage : IDisposable
/// <param name="offset">The offset in the <see cref="IStorage"/> at which to begin writing.</param>
/// <param name="source">The buffer containing the bytes to be written.</param>
/// <returns>The <see cref="Result"/> of the operation.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public Result Write(long offset, ReadOnlySpan<byte> source)
{
return DoWrite(offset, source);
}
public abstract Result Write(long offset, ReadOnlySpan<byte> source);
/// <summary>
/// Causes any buffered data to be written to the underlying device.
/// </summary>
/// <returns>The <see cref="Result"/> of the operation.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public Result Flush()
{
return DoFlush();
}
public abstract Result Flush();
/// <summary>
/// Sets the size of the current <see cref="IStorage"/>.
/// </summary>
/// <param name="size">The desired size of the <see cref="IStorage"/> in bytes.</param>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public Result SetSize(long size)
{
return DoSetSize(size);
}
public abstract Result SetSize(long size);
/// <summary>
/// Gets the number of bytes in the <see cref="IStorage"/>.
/// </summary>
/// <param name="size">If the operation returns successfully, the length of the file in bytes.</param>
/// <returns>The <see cref="Result"/> of the operation.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public Result GetSize(out long size)
{
return DoGetSize(out size);
}
public abstract Result GetSize(out long size);
/// <summary>
/// Performs various operations on the storage. Used to extend the functionality of the <see cref="IStorage"/> interface.
/// </summary>
/// <param name="outBuffer">A buffer that will contain the response from the operation.</param>
/// <param name="operationId">The operation to be performed.</param>
/// <param name="offset">The offset of the range to operate on.</param>
/// <param name="size">The size of the range to operate on.</param>
/// <param name="inBuffer">An input buffer. Size may vary depending on the operation performed.</param>
/// <returns>The <see cref="Result"/> of the operation.</returns>
public abstract Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer);
/// <summary>
/// Performs various operations on the storage. Used to extend the functionality of the <see cref="IStorage"/> interface.
@ -80,23 +75,7 @@ public abstract class IStorage : IDisposable
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public Result OperateRange(OperationId operationId, long offset, long size)
{
return DoOperateRange(Span<byte>.Empty, operationId, offset, size, ReadOnlySpan<byte>.Empty);
}
/// <summary>
/// Performs various operations on the storage. Used to extend the functionality of the <see cref="IStorage"/> interface.
/// </summary>
/// <param name="outBuffer">A buffer that will contain the response from the operation.</param>
/// <param name="operationId">The operation to be performed.</param>
/// <param name="offset">The offset of the range to operate on.</param>
/// <param name="size">The size of the range to operate on.</param>
/// <param name="inBuffer">An input buffer. Size may vary depending on the operation performed.</param>
/// <returns>The <see cref="Result"/> of the operation.</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
return DoOperateRange(outBuffer, operationId, offset, size, inBuffer);
return OperateRange(Span<byte>.Empty, operationId, offset, size, ReadOnlySpan<byte>.Empty);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
@ -115,19 +94,4 @@ public abstract class IStorage : IDisposable
size >= 0 &&
offset <= offset + size;
}
// Todo: Remove Do* methods
protected abstract Result DoRead(long offset, Span<byte> destination);
protected abstract Result DoWrite(long offset, ReadOnlySpan<byte> source);
protected abstract Result DoFlush();
protected abstract Result DoSetSize(long size);
protected abstract Result DoGetSize(out long size);
protected virtual Result DoOperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
return ResultFs.NotImplemented.Log();
}
public virtual void Dispose() { }
}
}

View File

@ -20,32 +20,32 @@ internal class StorageServiceObjectAdapter : IStorage
_baseStorage = SharedRef<IStorageSf>.CreateMove(ref baseStorage);
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
return _baseStorage.Get.Read(offset, new OutBuffer(destination), destination.Length);
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
return _baseStorage.Get.Write(offset, new InBuffer(source), source.Length);
}
protected override Result DoFlush()
public override Result Flush()
{
return _baseStorage.Get.Flush();
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
return _baseStorage.Get.SetSize(size);
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
return _baseStorage.Get.GetSize(out size);
}
protected override Result DoOperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
switch (operationId)
@ -69,4 +69,4 @@ internal class StorageServiceObjectAdapter : IStorage
_baseStorage.Destroy();
base.Dispose();
}
}
}

View File

@ -11,7 +11,7 @@ public class MemoryStorage : IStorage
StorageBuffer = buffer;
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
if (destination.Length == 0)
return Result.Success;
@ -24,7 +24,7 @@ public class MemoryStorage : IStorage
return Result.Success;
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
if (source.Length == 0)
return Result.Success;
@ -37,20 +37,26 @@ public class MemoryStorage : IStorage
return Result.Success;
}
protected override Result DoFlush()
public override Result Flush()
{
return Result.Success;
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
return ResultFs.UnsupportedSetSizeForMemoryStorage.Log();
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
size = StorageBuffer.Length;
return Result.Success;
}
}
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
throw new NotImplementedException();
}
}

View File

@ -153,7 +153,7 @@ public class SubStorage : IStorage
_isResizable = isResizable;
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
if (!IsValid()) return ResultFs.NotInitialized.Log();
if (destination.Length == 0) return Result.Success;
@ -164,7 +164,7 @@ public class SubStorage : IStorage
return BaseStorage.Read(_offset + offset, destination);
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
if (!IsValid()) return ResultFs.NotInitialized.Log();
if (source.Length == 0) return Result.Success;
@ -175,14 +175,14 @@ public class SubStorage : IStorage
return BaseStorage.Write(_offset + offset, source);
}
protected override Result DoFlush()
public override Result Flush()
{
if (!IsValid()) return ResultFs.NotInitialized.Log();
return BaseStorage.Flush();
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
if (!IsValid()) return ResultFs.NotInitialized.Log();
if (!_isResizable) return ResultFs.UnsupportedSetSizeForNotResizableSubStorage.Log();
@ -205,7 +205,7 @@ public class SubStorage : IStorage
return Result.Success;
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
UnsafeHelpers.SkipParamInit(out size);
@ -215,7 +215,7 @@ public class SubStorage : IStorage
return Result.Success;
}
protected override Result DoOperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size, ReadOnlySpan<byte> inBuffer)
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size, ReadOnlySpan<byte> inBuffer)
{
if (!IsValid()) return ResultFs.NotInitialized.Log();
@ -227,4 +227,4 @@ public class SubStorage : IStorage
return BaseStorage.OperateRange(outBuffer, operationId, _offset + offset, size, inBuffer);
}
}
}

View File

@ -86,7 +86,7 @@ public class EmulatedGameCardStorageCreator : IGameCardStorageCreator
imageHash.CopyTo(ImageHash);
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
// In secure mode, if Handle is old and the card's device ID and
// header hash are still the same, Handle is updated to the new handle
@ -94,22 +94,22 @@ public class EmulatedGameCardStorageCreator : IGameCardStorageCreator
return GameCard.Read(Handle, offset, destination);
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
return ResultFs.UnsupportedWriteForReadOnlyGameCardStorage.Log();
}
protected override Result DoFlush()
public override Result Flush()
{
return Result.Success;
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
return ResultFs.UnsupportedSetSizeForReadOnlyGameCardStorage.Log();
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
UnsafeHelpers.SkipParamInit(out size);
@ -119,5 +119,11 @@ public class EmulatedGameCardStorageCreator : IGameCardStorageCreator
size = info.Size;
return Result.Success;
}
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
throw new NotImplementedException();
}
}
}
}

View File

@ -25,7 +25,7 @@ internal class DeviceEventSimulationStorage : IStorage
base.Dispose();
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
Result rc = _eventSimulator.CheckSimulatedAccessFailureEvent(SimulatingDeviceTargetOperation.Read);
if (rc.IsFailure()) return rc;
@ -33,7 +33,7 @@ internal class DeviceEventSimulationStorage : IStorage
return _baseStorage.Get.Read(offset, destination);
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
Result rc = _eventSimulator.CheckSimulatedAccessFailureEvent(SimulatingDeviceTargetOperation.Write);
if (rc.IsFailure()) return rc;
@ -41,24 +41,24 @@ internal class DeviceEventSimulationStorage : IStorage
return _baseStorage.Get.Write(offset, source);
}
protected override Result DoFlush()
public override Result Flush()
{
return _baseStorage.Get.Flush();
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
return _baseStorage.Get.SetSize(size);
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
return _baseStorage.Get.GetSize(out size);
}
protected override Result DoOperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
return _baseStorage.Get.OperateRange(outBuffer, operationId, offset, size, inBuffer);
}
}
}

View File

@ -201,7 +201,7 @@ public class SaveDataSharedFileStorage : IStorage
return Result.Success;
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
using UniqueLockRef<SdkMutexType> scopedLock = _baseStorage.Get.GetLock();
@ -211,7 +211,7 @@ public class SaveDataSharedFileStorage : IStorage
return _baseStorage.Get.Read(offset, destination);
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
using UniqueLockRef<SdkMutexType> scopedLock = _baseStorage.Get.GetLock();
@ -221,7 +221,7 @@ public class SaveDataSharedFileStorage : IStorage
return _baseStorage.Get.Write(offset, source);
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
using UniqueLockRef<SdkMutexType> scopedLock = _baseStorage.Get.GetLock();
@ -231,7 +231,7 @@ public class SaveDataSharedFileStorage : IStorage
return _baseStorage.Get.SetSize(size);
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
Unsafe.SkipInit(out size);
@ -243,7 +243,7 @@ public class SaveDataSharedFileStorage : IStorage
return _baseStorage.Get.GetSize(out size);
}
protected override Result DoFlush()
public override Result Flush()
{
using UniqueLockRef<SdkMutexType> scopedLock = _baseStorage.Get.GetLock();
@ -253,7 +253,7 @@ public class SaveDataSharedFileStorage : IStorage
return _baseStorage.Get.Flush();
}
protected override Result DoOperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
using UniqueLockRef<SdkMutexType> scopedLock = _baseStorage.Get.GetLock();
@ -430,4 +430,4 @@ public class SaveDataFileStorageHolder
currentEntry = currentEntry.Next;
}
}
}
}

View File

@ -20,34 +20,34 @@ public class SpeedEmulationStorage : IStorage
base.Dispose();
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
return _baseStorage.Get.Read(offset, destination);
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
return _baseStorage.Get.Write(offset, source);
}
protected override Result DoFlush()
public override Result Flush()
{
return _baseStorage.Get.Flush();
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
return _baseStorage.Get.SetSize(size);
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
return _baseStorage.Get.GetSize(out size);
}
protected override Result DoOperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
return _baseStorage.Get.OperateRange(outBuffer, operationId, offset, size, inBuffer);
}
}
}

View File

@ -1068,7 +1068,7 @@ public class BufferedStorage : IStorage
/// Otherwise, <see langword="false"/>.</returns>
public bool IsInitialized() => _caches != null;
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
Assert.SdkRequires(IsInitialized());
@ -1080,7 +1080,7 @@ public class BufferedStorage : IStorage
return ReadCore(offset, destination).Miss();
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
Assert.SdkRequires(IsInitialized());
@ -1092,7 +1092,7 @@ public class BufferedStorage : IStorage
return WriteCore(offset, source).Miss();
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
Assert.SdkRequires(IsInitialized());
@ -1100,7 +1100,7 @@ public class BufferedStorage : IStorage
return Result.Success;
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
Assert.SdkRequires(IsInitialized());
@ -1158,7 +1158,7 @@ public class BufferedStorage : IStorage
return Result.Success;
}
protected override Result DoOperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
Assert.SdkRequires(IsInitialized());
@ -1172,7 +1172,7 @@ public class BufferedStorage : IStorage
return _baseStorage.OperateRange(outBuffer, operationId, offset, size, inBuffer);
}
protected override Result DoFlush()
public override Result Flush()
{
Assert.SdkRequires(IsInitialized());

View File

@ -320,7 +320,7 @@ public class CompressedStorage : IStorage, IAsynchronousAccessSplitter
_core.FinalizeObject();
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
Result rc = _cacheManager.Read(_core, offset, destination);
if (rc.IsFailure()) return rc.Miss();
@ -328,22 +328,22 @@ public class CompressedStorage : IStorage, IAsynchronousAccessSplitter
return Result.Success;
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
return ResultFs.UnsupportedWriteForCompressedStorage.Log();
}
protected override Result DoFlush()
public override Result Flush()
{
return Result.Success;
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
return ResultFs.UnsupportedSetSizeForIndirectStorage.Log();
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
Result rc = _core.GetSize(out size);
if (rc.IsFailure()) return rc.Miss();
@ -351,7 +351,7 @@ public class CompressedStorage : IStorage, IAsynchronousAccessSplitter
return Result.Success;
}
protected override Result DoOperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
Assert.SdkRequiresLessEqual(0, offset);

View File

@ -169,7 +169,7 @@ public class IndirectStorage : IStorage
}
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
// Validate pre-conditions
Assert.SdkRequiresLessEqual(0, offset);
@ -196,17 +196,17 @@ public class IndirectStorage : IStorage
return Result.Success;
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
return ResultFs.UnsupportedWriteForIndirectStorage.Log();
}
protected override Result DoFlush()
public override Result Flush()
{
return Result.Success;
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
UnsafeHelpers.SkipParamInit(out size);
@ -217,7 +217,7 @@ public class IndirectStorage : IStorage
return Result.Success;
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
return ResultFs.UnsupportedSetSizeForIndirectStorage.Log();
}
@ -288,7 +288,7 @@ public class IndirectStorage : IStorage
return Result.Success;
}
protected override Result DoOperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
Assert.SdkRequiresLessEqual(0, offset);
@ -518,4 +518,4 @@ public class IndirectStorage : IStorage
return Result.Success;
}
}
}

View File

@ -20,34 +20,41 @@ public class LocalStorage : IStorage
Storage = new StreamStorage(Stream, false);
}
protected override Result DoRead(long offset, Span<byte> destination)
{
return Storage.Read(offset, destination);
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
{
return Storage.Write(offset, source);
}
protected override Result DoFlush()
{
return Storage.Flush();
}
protected override Result DoSetSize(long size)
{
return ResultFs.NotImplemented.Log();
}
protected override Result DoGetSize(out long size)
{
return Storage.GetSize(out size);
}
public override void Dispose()
{
Storage?.Dispose();
Stream?.Dispose();
base.Dispose();
}
public override Result Read(long offset, Span<byte> destination)
{
return Storage.Read(offset, destination);
}
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
return Storage.Write(offset, source);
}
public override Result Flush()
{
return Storage.Flush();
}
public override Result SetSize(long size)
{
return ResultFs.NotImplemented.Log();
}
public override Result GetSize(out long size)
{
return Storage.GetSize(out size);
}
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
throw new NotImplementedException();
}
}

View File

@ -16,7 +16,7 @@ public class SparseStorage : IndirectStorage
{
private class ZeroStorage : IStorage
{
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
Assert.SdkRequiresGreaterEqual(offset, 0);
@ -26,28 +26,28 @@ public class SparseStorage : IndirectStorage
return Result.Success;
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
return ResultFs.UnsupportedWriteForZeroStorage.Log();
}
protected override Result DoFlush()
public override Result Flush()
{
return Result.Success;
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
size = long.MaxValue;
return Result.Success;
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
return ResultFs.UnsupportedSetSizeForZeroStorage.Log();
}
protected override Result DoOperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
return Result.Success;
@ -86,7 +86,7 @@ public class SparseStorage : IndirectStorage
SetStorage(1, _zeroStorage, 0, long.MaxValue);
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
// Validate pre-conditions
Assert.SdkRequiresLessEqual(0, offset);

View File

@ -61,37 +61,37 @@ internal class StorageLayoutTypeSetStorage : IStorage
base.Dispose();
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
using var scopedContext = new ScopedStorageLayoutTypeSetter(_storageFlag);
return _baseStorage.Get.Read(offset, destination);
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
using var scopedContext = new ScopedStorageLayoutTypeSetter(_storageFlag);
return _baseStorage.Get.Write(offset, source);
}
protected override Result DoFlush()
public override Result Flush()
{
using var scopedContext = new ScopedStorageLayoutTypeSetter(_storageFlag);
return _baseStorage.Get.Flush();
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
using var scopedContext = new ScopedStorageLayoutTypeSetter(_storageFlag);
return _baseStorage.Get.SetSize(size);
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
using var scopedContext = new ScopedStorageLayoutTypeSetter(_storageFlag);
return _baseStorage.Get.GetSize(out size);
}
protected override Result DoOperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
using var scopedContext = new ScopedStorageLayoutTypeSetter(_storageFlag);
@ -352,4 +352,4 @@ internal class StorageLayoutTypeSetFileSystem : IFileSystem
using var scopedContext = new ScopedStorageLayoutTypeSetter(_storageFlag);
return _baseFileSystem.Get.QueryEntry(outBuffer, inBuffer, queryId, path);
}
}
}

View File

@ -16,7 +16,7 @@ public class TruncatedSubStorage : SubStorage
public TruncatedSubStorage() { }
public TruncatedSubStorage(SubStorage other) : base(other) { }
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
if (destination.Length == 0)
return Result.Success;
@ -27,10 +27,10 @@ public class TruncatedSubStorage : SubStorage
long availableSize = baseStorageSize - offset;
long sizeToRead = Math.Min(destination.Length, availableSize);
return base.DoRead(offset, destination.Slice(0, (int)sizeToRead));
return base.Read(offset, destination.Slice(0, (int)sizeToRead));
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
if (source.Length == 0)
return Result.Success;
@ -41,6 +41,6 @@ public class TruncatedSubStorage : SubStorage
long availableSize = baseStorageSize - offset;
long sizeToWrite = Math.Min(source.Length, availableSize);
return base.DoWrite(offset, source.Slice(0, (int)sizeToWrite));
return base.Write(offset, source.Slice(0, (int)sizeToWrite));
}
}
}

View File

@ -37,7 +37,7 @@ public class Aes128CtrExStorage : Aes128CtrStorage
rc.ThrowIfFailure();
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
if (destination.Length == 0)
return Result.Success;
@ -83,7 +83,7 @@ public class Aes128CtrExStorage : Aes128CtrStorage
{
UpdateCounterSubsection((uint)currentEntry.Generation);
rc = base.DoRead(inPos, destination.Slice(outPos, bytesToRead));
rc = base.Read(inPos, destination.Slice(outPos, bytesToRead));
if (rc.IsFailure()) return rc;
}
@ -95,12 +95,12 @@ public class Aes128CtrExStorage : Aes128CtrStorage
return Result.Success;
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
return ResultFs.UnsupportedWriteForAesCtrCounterExtendedStorage.Log();
}
protected override Result DoFlush()
public override Result Flush()
{
return Result.Success;
}

View File

@ -59,9 +59,9 @@ public class Aes128CtrStorage : SectorStorage
Counter = _decryptor.Counter;
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
Result rc = base.DoRead(offset, destination);
Result rc = base.Read(offset, destination);
if (rc.IsFailure()) return rc;
lock (_locker)
@ -73,7 +73,7 @@ public class Aes128CtrStorage : SectorStorage
return Result.Success;
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
byte[] encrypted = ArrayPool<byte>.Shared.Rent(source.Length);
try
@ -87,7 +87,7 @@ public class Aes128CtrStorage : SectorStorage
_decryptor.TransformBlock(encryptedSpan);
}
Result rc = base.DoWrite(offset, encryptedSpan);
Result rc = base.Write(offset, encryptedSpan);
if (rc.IsFailure()) return rc;
}
finally

View File

@ -42,14 +42,14 @@ public class Aes128XtsStorage : SectorStorage
_key2 = key2.ToArray();
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
int size = destination.Length;
long sectorIndex = offset / SectorSize;
if (_readTransform == null) _readTransform = new Aes128XtsTransform(_key1, _key2, _decryptRead);
Result rc = base.DoRead(offset, _tempBuffer.AsSpan(0, size));
Result rc = base.Read(offset, _tempBuffer.AsSpan(0, size));
if (rc.IsFailure()) return rc;
_readTransform.TransformBlock(_tempBuffer, 0, size, (ulong)sectorIndex);
@ -58,7 +58,7 @@ public class Aes128XtsStorage : SectorStorage
return Result.Success;
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
int size = source.Length;
long sectorIndex = offset / SectorSize;
@ -68,10 +68,10 @@ public class Aes128XtsStorage : SectorStorage
source.CopyTo(_tempBuffer);
_writeTransform.TransformBlock(_tempBuffer, 0, size, (ulong)sectorIndex);
return base.DoWrite(offset, _tempBuffer.AsSpan(0, size));
return base.Write(offset, _tempBuffer.AsSpan(0, size));
}
protected override Result DoFlush()
public override Result Flush()
{
return BaseStorage.Flush();
}

View File

@ -26,12 +26,12 @@ public class AesCbcStorage : SectorStorage
baseStorage.GetSize(out _size).ThrowIfFailure();
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
if (!CheckAccessRange(offset, destination.Length, _size))
return ResultFs.OutOfRange.Log();
Result rc = base.DoRead(offset, destination);
Result rc = base.Read(offset, destination);
if (rc.IsFailure()) return rc;
rc = GetDecryptor(out ICipher cipher, offset);
@ -42,17 +42,17 @@ public class AesCbcStorage : SectorStorage
return Result.Success;
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
return ResultFs.UnsupportedOperation.Log();
}
protected override Result DoFlush()
public override Result Flush()
{
return Result.Success;
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
return ResultFs.UnsupportedOperation.Log();
}

View File

@ -33,7 +33,7 @@ public class CachedStorage : IStorage
public CachedStorage(SectorStorage baseStorage, int cacheSize, bool leaveOpen)
: this(baseStorage, baseStorage.SectorSize, cacheSize, leaveOpen) { }
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
long remaining = destination.Length;
long inOffset = offset;
@ -63,7 +63,7 @@ public class CachedStorage : IStorage
return Result.Success;
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
long remaining = source.Length;
long inOffset = offset;
@ -95,7 +95,7 @@ public class CachedStorage : IStorage
return Result.Success;
}
protected override Result DoFlush()
public override Result Flush()
{
lock (Blocks)
{
@ -108,13 +108,13 @@ public class CachedStorage : IStorage
return BaseStorage.Flush();
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
size = Length;
return Result.Success;
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
Result rc = BaseStorage.SetSize(size);
if (rc.IsFailure()) return rc;
@ -127,6 +127,12 @@ public class CachedStorage : IStorage
return Result.Success;
}
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
throw new NotImplementedException();
}
public override void Dispose()
{
if (!LeaveOpen)

View File

@ -28,7 +28,7 @@ public class ConcatenationStorage : IStorage
Length = length;
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
long inPos = offset;
int outPos = 0;
@ -59,7 +59,7 @@ public class ConcatenationStorage : IStorage
return Result.Success;
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
long inPos = offset;
int outPos = 0;
@ -90,7 +90,7 @@ public class ConcatenationStorage : IStorage
return Result.Success;
}
protected override Result DoFlush()
public override Result Flush()
{
foreach (ConcatSource source in Sources)
{
@ -101,17 +101,23 @@ public class ConcatenationStorage : IStorage
return Result.Success;
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
return ResultFs.NotImplemented.Log();
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
size = Length;
return Result.Success;
}
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
throw new NotImplementedException();
}
public override void Dispose()
{
if (!LeaveOpen && Sources != null)

View File

@ -98,32 +98,38 @@ public class HierarchicalIntegrityVerificationStorage : IStorage
return initInfo;
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
return DataLevel.Read(offset, destination);
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
return DataLevel.Write(offset, source);
}
protected override Result DoFlush()
public override Result Flush()
{
return DataLevel.Flush();
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
return ResultFs.UnsupportedSetSizeForHierarchicalIntegrityVerificationStorage.Log();
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
size = Length;
return Result.Success;
}
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
throw new NotImplementedException();
}
public override void Dispose()
{
if (!LeaveOpen)

View File

@ -118,7 +118,7 @@ public class IntegrityVerificationStorage : SectorStorage
return Result.Success;
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
return ReadImpl(offset, destination, IntegrityCheckLevel);
}
@ -129,7 +129,7 @@ public class IntegrityVerificationStorage : SectorStorage
return ReadImpl(offset, destination, integrityCheckLevel);
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
long blockIndex = offset / SectorSize;
long hashPos = blockIndex * DigestSize;
@ -189,12 +189,12 @@ public class IntegrityVerificationStorage : SectorStorage
}
}
protected override Result DoFlush()
public override Result Flush()
{
Result rc = HashStorage.Flush();
if (rc.IsFailure()) return rc;
return base.DoFlush();
return base.Flush();
}
public void FsTrim()

View File

@ -14,30 +14,36 @@ public class NullStorage : IStorage
public NullStorage(long length) => Length = length;
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
destination.Clear();
return Result.Success;
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
return Result.Success;
}
protected override Result DoFlush()
public override Result Flush()
{
return Result.Success;
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
return ResultFs.NotImplemented.Log();
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
size = Length;
return Result.Success;
}
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
return Result.Success;
}
}

View File

@ -24,7 +24,7 @@ public class AllocationTableStorage : IStorage
_length = initialBlock == -1 ? 0 : table.GetListLength(initialBlock) * blockSize;
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
var iterator = new AllocationTableIterator(Fat, InitialBlock);
@ -58,7 +58,7 @@ public class AllocationTableStorage : IStorage
return Result.Success;
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
var iterator = new AllocationTableIterator(Fat, InitialBlock);
@ -92,18 +92,18 @@ public class AllocationTableStorage : IStorage
return Result.Success;
}
protected override Result DoFlush()
public override Result Flush()
{
return BaseStorage.Flush();
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
size = _length;
return Result.Success;
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
int oldBlockCount = (int)BitUtil.DivideUp(_length, BlockSize);
int newBlockCount = (int)BitUtil.DivideUp(size, BlockSize);
@ -147,4 +147,10 @@ public class AllocationTableStorage : IStorage
return Result.Success;
}
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
throw new NotImplementedException();
}
}

View File

@ -27,7 +27,7 @@ public class DuplexStorage : IStorage
Length = dataSize;
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
long inPos = offset;
int outPos = 0;
@ -56,7 +56,7 @@ public class DuplexStorage : IStorage
return Result.Success;
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
long inPos = offset;
int outPos = 0;
@ -85,7 +85,7 @@ public class DuplexStorage : IStorage
return Result.Success;
}
protected override Result DoFlush()
public override Result Flush()
{
Result rc = BitmapStorage.Flush();
if (rc.IsFailure()) return rc;
@ -99,17 +99,23 @@ public class DuplexStorage : IStorage
return Result.Success;
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
return ResultFs.NotImplemented.Log();
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
size = Length;
return Result.Success;
}
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
throw new NotImplementedException();
}
public void FsTrim()
{
DataA.GetSize(out long dataSize).ThrowIfFailure();

View File

@ -34,32 +34,38 @@ public class HierarchicalDuplexStorage : IStorage
Length = dataSize;
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
return DataLayer.Read(offset, destination);
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
return DataLayer.Write(offset, source);
}
protected override Result DoFlush()
public override Result Flush()
{
return DataLayer.Flush();
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
return ResultFs.NotImplemented.Log();
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
size = Length;
return Result.Success;
}
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
throw new NotImplementedException();
}
public void FsTrim()
{
foreach (DuplexStorage layer in Layers)

View File

@ -34,7 +34,7 @@ public class JournalStorage : IStorage
LeaveOpen = leaveOpen;
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
long inPos = offset;
int outPos = 0;
@ -63,7 +63,7 @@ public class JournalStorage : IStorage
return Result.Success;
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
long inPos = offset;
int outPos = 0;
@ -92,22 +92,28 @@ public class JournalStorage : IStorage
return Result.Success;
}
protected override Result DoFlush()
public override Result Flush()
{
return BaseStorage.Flush();
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
return ResultFs.NotImplemented.Log();
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
size = Length;
return Result.Success;
}
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
throw new NotImplementedException();
}
public override void Dispose()
{
if (!LeaveOpen)

View File

@ -49,7 +49,7 @@ public class RemapStorage : IStorage
Segments = InitSegments(Header, MapEntries);
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
if (destination.Length == 0) return Result.Success;
@ -79,7 +79,7 @@ public class RemapStorage : IStorage
return Result.Success;
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
if (source.Length == 0) return Result.Success;
@ -111,23 +111,29 @@ public class RemapStorage : IStorage
return Result.Success;
}
protected override Result DoFlush()
public override Result Flush()
{
return BaseStorage.Flush();
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
return ResultFs.UnsupportedSetSizeForHierarchicalIntegrityVerificationStorage.Log();
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
// todo: Different result code
size = -1;
return Result.Success;
}
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
throw new NotImplementedException();
}
public override void Dispose()
{
if (!LeaveOpen)

View File

@ -27,30 +27,30 @@ public class SectorStorage : IStorage
LeaveOpen = leaveOpen;
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
ValidateSize(destination.Length, offset);
return BaseStorage.Read(offset, destination);
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
ValidateSize(source.Length, offset);
return BaseStorage.Write(offset, source);
}
protected override Result DoFlush()
public override Result Flush()
{
return BaseStorage.Flush();
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
size = Length;
return Result.Success;
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
Result rc = BaseStorage.SetSize(size);
if (rc.IsFailure()) return rc;
@ -64,6 +64,12 @@ public class SectorStorage : IStorage
return Result.Success;
}
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
throw new NotImplementedException();
}
public override void Dispose()
{
if (!LeaveOpen)

View File

@ -20,7 +20,7 @@ public class StreamStorage : IStorage
LeaveOpen = leaveOpen;
}
protected override Result DoRead(long offset, Span<byte> destination)
public override Result Read(long offset, Span<byte> destination)
{
lock (Locker)
{
@ -35,7 +35,7 @@ public class StreamStorage : IStorage
return Result.Success;
}
protected override Result DoWrite(long offset, ReadOnlySpan<byte> source)
public override Result Write(long offset, ReadOnlySpan<byte> source)
{
lock (Locker)
{
@ -50,7 +50,7 @@ public class StreamStorage : IStorage
return Result.Success;
}
protected override Result DoFlush()
public override Result Flush()
{
lock (Locker)
{
@ -60,17 +60,23 @@ public class StreamStorage : IStorage
}
}
protected override Result DoSetSize(long size)
public override Result SetSize(long size)
{
return ResultFs.NotImplemented.Log();
}
protected override Result DoGetSize(out long size)
public override Result GetSize(out long size)
{
size = Length;
return Result.Success;
}
public override Result OperateRange(Span<byte> outBuffer, OperationId operationId, long offset, long size,
ReadOnlySpan<byte> inBuffer)
{
throw new NotImplementedException();
}
public override void Dispose()
{
if (!LeaveOpen)