mirror of
https://github.com/Thealexbarney/LibHac.git
synced 2025-02-09 13:14:46 +01:00
Remove Do* methods from IStorage
This commit is contained in:
parent
f1d704b8f8
commit
f0df8c2d9b
@ -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();
|
||||
|
@ -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)
|
||||
|
@ -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() { }
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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());
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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()
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
@ -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();
|
||||
}
|
||||
}
|
@ -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();
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user