mirror of
https://github.com/Thealexbarney/LibHac.git
synced 2024-11-14 10:49:41 +01:00
Change IFile and IStorage interfaces
This commit is contained in:
parent
6823aa7cb8
commit
d073bdfa54
4 changed files with 33 additions and 28 deletions
|
@ -8,11 +8,11 @@ namespace LibHac.Fs
|
|||
protected bool IsDisposed { get; private set; }
|
||||
internal List<IDisposable> ToDispose { get; } = new List<IDisposable>();
|
||||
|
||||
public abstract int Read(Span<byte> destination, long offset, ReadOption options);
|
||||
public abstract void Write(ReadOnlySpan<byte> source, long offset, WriteOption options);
|
||||
public abstract void Flush();
|
||||
public abstract long GetSize();
|
||||
public abstract void SetSize(long size);
|
||||
public abstract Result Read(out long bytesRead, long offset, Span<byte> destination, ReadOption options);
|
||||
public abstract Result Write(long offset, ReadOnlySpan<byte> source, WriteOption options);
|
||||
public abstract Result Flush();
|
||||
public abstract Result GetSize(out long size);
|
||||
public abstract Result SetSize(long size);
|
||||
|
||||
public OpenMode Mode { get; protected set; }
|
||||
|
||||
|
@ -24,7 +24,9 @@ namespace LibHac.Fs
|
|||
if (span == null) throw new ArgumentNullException(nameof(span));
|
||||
if (offset < 0) ThrowHelper.ThrowResult(ResultFs.ValueOutOfRange, "Offset must be non-negative.");
|
||||
|
||||
long fileSize = GetSize();
|
||||
Result sizeResult = GetSize(out long fileSize);
|
||||
sizeResult.ThrowIfFailure();
|
||||
|
||||
int size = span.Length;
|
||||
|
||||
if (offset > fileSize) ThrowHelper.ThrowResult(ResultFs.ValueOutOfRange, "Offset must be less than the file size.");
|
||||
|
@ -41,7 +43,9 @@ namespace LibHac.Fs
|
|||
if (span == null) throw new ArgumentNullException(nameof(span));
|
||||
if (offset < 0) ThrowHelper.ThrowResult(ResultFs.ValueOutOfRange, "Offset must be non-negative.");
|
||||
|
||||
long fileSize = GetSize();
|
||||
Result sizeResult = GetSize(out long fileSize);
|
||||
sizeResult.ThrowIfFailure();
|
||||
|
||||
int size = span.Length;
|
||||
|
||||
if (offset + size > fileSize)
|
||||
|
|
|
@ -34,7 +34,7 @@ namespace LibHac.Fs
|
|||
/// size of the buffer if the IFile is too short to fulfill the request.</returns>
|
||||
/// <exception cref="ArgumentOutOfRangeException"><paramref name="offset"/> is invalid.</exception>
|
||||
/// <exception cref="NotSupportedException">The file's <see cref="OpenMode"/> does not allow reading.</exception>
|
||||
int Read(Span<byte> destination, long offset, ReadOption options);
|
||||
Result Read(out long bytesRead, long offset, Span<byte> destination, ReadOption options);
|
||||
|
||||
/// <summary>
|
||||
/// Writes a sequence of bytes to the current <see cref="IFile"/>.
|
||||
|
@ -44,18 +44,18 @@ namespace LibHac.Fs
|
|||
/// <param name="options">Options for writing to the <see cref="IFile"/>.</param>
|
||||
/// <exception cref="ArgumentOutOfRangeException"><paramref name="offset"/> is negative.</exception>
|
||||
/// <exception cref="NotSupportedException">The file's <see cref="OpenMode"/> does not allow this request.</exception>
|
||||
void Write(ReadOnlySpan<byte> source, long offset, WriteOption options);
|
||||
Result Write(long offset, ReadOnlySpan<byte> source, WriteOption options);
|
||||
|
||||
/// <summary>
|
||||
/// Causes any buffered data to be written to the underlying device.
|
||||
/// </summary>
|
||||
void Flush();
|
||||
Result Flush();
|
||||
|
||||
/// <summary>
|
||||
/// Gets the number of bytes in the file.
|
||||
/// </summary>
|
||||
/// <returns>The length of the file in bytes.</returns>
|
||||
long GetSize();
|
||||
Result GetSize(out long size);
|
||||
|
||||
/// <summary>
|
||||
/// Sets the size of the file in bytes.
|
||||
|
@ -63,6 +63,6 @@ namespace LibHac.Fs
|
|||
/// <param name="size">The desired size of the file in bytes.</param>
|
||||
/// <exception cref="NotSupportedException">If increasing the file size, The file's
|
||||
/// <see cref="OpenMode"/> does not allow this appending.</exception>
|
||||
void SetSize(long size);
|
||||
Result SetSize(long size);
|
||||
}
|
||||
}
|
|
@ -14,7 +14,7 @@ namespace LibHac.Fs
|
|||
/// The number of bytes read will be equal to the length of the buffer.</param>
|
||||
/// <param name="offset">The offset in the <see cref="IStorage"/> at which to begin reading.</param>
|
||||
/// <exception cref="ArgumentException">Invalid offset or the IStorage contains fewer bytes than requested. </exception>
|
||||
void Read(Span<byte> destination, long offset);
|
||||
Result Read(long offset, Span<byte> destination);
|
||||
|
||||
/// <summary>
|
||||
/// Writes a sequence of bytes to the current <see cref="IStorage"/>.
|
||||
|
@ -23,24 +23,24 @@ namespace LibHac.Fs
|
|||
/// <param name="offset">The offset in the <see cref="IStorage"/> at which to begin writing.</param>
|
||||
/// <exception cref="ArgumentException">Invalid offset or <paramref name="source"/>
|
||||
/// is too large to be written to the IStorage. </exception>
|
||||
void Write(ReadOnlySpan<byte> source, long offset);
|
||||
Result Write(long offset, ReadOnlySpan<byte> source);
|
||||
|
||||
/// <summary>
|
||||
/// Causes any buffered data to be written to the underlying device.
|
||||
/// </summary>
|
||||
void Flush();
|
||||
Result Flush();
|
||||
|
||||
/// <summary>
|
||||
/// Sets the size of the current IStorage.
|
||||
/// </summary>
|
||||
/// <param name="size">The desired size of the current IStorage in bytes.</param>
|
||||
void SetSize(long size);
|
||||
Result SetSize(long size);
|
||||
|
||||
/// <summary>
|
||||
/// The size of the<see cref="IStorage"/>. -1 will be returned if
|
||||
/// the <see cref="IStorage"/> cannot be represented as a sequence of contiguous bytes.
|
||||
/// </summary>
|
||||
/// <returns>The size of the <see cref="IStorage"/> in bytes.</returns>
|
||||
long GetSize();
|
||||
Result GetSize(out long size);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,26 +9,26 @@ namespace LibHac.Fs
|
|||
protected internal List<IDisposable> ToDispose { get; } = new List<IDisposable>();
|
||||
protected bool CanAutoExpand { get; set; }
|
||||
|
||||
protected abstract void ReadImpl(Span<byte> destination, long offset);
|
||||
protected abstract void WriteImpl(ReadOnlySpan<byte> source, long offset);
|
||||
public abstract void Flush();
|
||||
public abstract long GetSize();
|
||||
protected abstract Result ReadImpl(long offset, Span<byte> destination);
|
||||
protected abstract Result WriteImpl(long offset, ReadOnlySpan<byte> source);
|
||||
public abstract Result Flush();
|
||||
public abstract Result GetSize(out long size);
|
||||
|
||||
public void Read(Span<byte> destination, long offset)
|
||||
public Result Read(long offset, Span<byte> destination)
|
||||
{
|
||||
ValidateParameters(destination, offset);
|
||||
ReadImpl(destination, offset);
|
||||
return ReadImpl(offset, destination);
|
||||
}
|
||||
|
||||
public void Write(ReadOnlySpan<byte> source, long offset)
|
||||
public Result Write(long offset, ReadOnlySpan<byte> source)
|
||||
{
|
||||
ValidateParameters(source, offset);
|
||||
WriteImpl(source, offset);
|
||||
return WriteImpl(offset, source);
|
||||
}
|
||||
|
||||
public virtual void SetSize(long size)
|
||||
public virtual Result SetSize(long size)
|
||||
{
|
||||
ThrowHelper.ThrowResult(ResultFs.NotImplemented);
|
||||
return ResultFs.NotImplemented.Log();
|
||||
}
|
||||
|
||||
protected virtual void Dispose(bool disposing)
|
||||
|
@ -58,7 +58,8 @@ namespace LibHac.Fs
|
|||
if (_isDisposed) throw new ObjectDisposedException(null);
|
||||
if (offset < 0) throw new ArgumentOutOfRangeException(nameof(offset), "Argument must be non-negative.");
|
||||
|
||||
long length = GetSize();
|
||||
Result sizeResult = GetSize(out long length);
|
||||
sizeResult.ThrowIfFailure();
|
||||
|
||||
if (length != -1 && !CanAutoExpand)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue