Skip to content

Commit

Permalink
Remove cancellation support from the synchronous API surface.
Browse files Browse the repository at this point in the history
Closes #49.
  • Loading branch information
alexrp committed Oct 29, 2022
1 parent b08a95f commit bd889b9
Show file tree
Hide file tree
Showing 13 changed files with 100 additions and 104 deletions.
15 changes: 6 additions & 9 deletions src/core/IO/TerminalReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,13 @@ public abstract class TerminalReader : TerminalHandle

public abstract TextReader TextReader { get; }

protected abstract int ReadPartialCore(scoped Span<byte> buffer, CancellationToken cancellationToken);
protected abstract int ReadPartialCore(scoped Span<byte> buffer);

protected abstract ValueTask<int> ReadPartialCoreAsync(Memory<byte> buffer, CancellationToken cancellationToken);

public int ReadPartial(scoped Span<byte> buffer, CancellationToken cancellationToken = default)
public int ReadPartial(scoped Span<byte> buffer)
{
var count = ReadPartialCore(buffer, cancellationToken);
var count = ReadPartialCore(buffer);

InputRead?.Invoke(buffer[..count], this);

Expand All @@ -29,13 +29,13 @@ public async ValueTask<int> ReadPartialAsync(Memory<byte> buffer, CancellationTo
return count;
}

public int Read(scoped Span<byte> value, CancellationToken cancellationToken = default)
public int Read(scoped Span<byte> value)
{
var count = 0;

while (count < value.Length)
{
var ret = ReadPartial(value[count..], cancellationToken);
var ret = ReadPartial(value[count..]);

// EOF?
if (ret == 0)
Expand Down Expand Up @@ -66,11 +66,8 @@ public async ValueTask<int> ReadAsync(Memory<byte> value, CancellationToken canc
return count;
}

public string? ReadLine(CancellationToken cancellationToken = default)
public string? ReadLine()
{
cancellationToken.ThrowIfCancellationRequested();

// TODO: Should we make more of an effort to honor the cancellation token?
return TextReader.ReadLine();
}

Expand Down
5 changes: 1 addition & 4 deletions src/core/IO/TerminalStream.cs
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,7 @@ public override sealed void Write(byte[] buffer, int offset, int count)
}

public override sealed Task WriteAsync(
byte[] buffer,
int offset,
int count,
CancellationToken cancellationToken = default)
byte[] buffer, int offset, int count, CancellationToken cancellationToken = default)
{
Check.Null(buffer);

Expand Down
32 changes: 15 additions & 17 deletions src/core/IO/TerminalWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,14 @@ public abstract class TerminalWriter : TerminalHandle

public abstract TextWriter TextWriter { get; }

protected abstract int WritePartialCore(scoped ReadOnlySpan<byte> buffer, CancellationToken cancellationToken);
protected abstract int WritePartialCore(scoped ReadOnlySpan<byte> buffer);

protected abstract ValueTask<int> WritePartialCoreAsync(
ReadOnlyMemory<byte> buffer,
CancellationToken cancellationToken);
ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken);

public int WritePartial(scoped ReadOnlySpan<byte> buffer, CancellationToken cancellationToken = default)
public int WritePartial(scoped ReadOnlySpan<byte> buffer)
{
var count = WritePartialCore(buffer, cancellationToken);
var count = WritePartialCore(buffer);

OutputWritten?.Invoke(buffer[..count], this);

Expand All @@ -23,8 +22,7 @@ public int WritePartial(scoped ReadOnlySpan<byte> buffer, CancellationToken canc

[AsyncMethodBuilder(typeof(PoolingAsyncValueTaskMethodBuilder<>))]
public async ValueTask<int> WritePartialAsync(
ReadOnlyMemory<byte> buffer,
CancellationToken cancellationToken = default)
ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken = default)
{
var count = await WritePartialCoreAsync(buffer, cancellationToken).ConfigureAwait(false);

Expand All @@ -33,9 +31,9 @@ public async ValueTask<int> WritePartialAsync(
return count;
}

public void Write(scoped ReadOnlySpan<byte> value, CancellationToken cancellationToken = default)
public void Write(scoped ReadOnlySpan<byte> value)
{
for (var count = 0; count < value.Length; count += WritePartial(value[count..], cancellationToken))
for (var count = 0; count < value.Length; count += WritePartial(value[count..]))
{
}
}
Expand All @@ -55,7 +53,7 @@ public ValueTask WriteAsync(Memory<byte> value, CancellationToken cancellationTo
return WriteAsync((ReadOnlyMemory<byte>)value, cancellationToken);
}

public void Write(scoped ReadOnlySpan<char> value, CancellationToken cancellationToken = default)
public void Write(scoped ReadOnlySpan<char> value)
{
var encoding = Terminal.Encoding;
var len = encoding.GetByteCount(value);
Expand All @@ -67,7 +65,7 @@ public void Write(scoped ReadOnlySpan<char> value, CancellationToken cancellatio

_ = encoding.GetBytes(value, span);

Write(span, cancellationToken);
Write(span);
}
finally
{
Expand Down Expand Up @@ -101,29 +99,29 @@ public ValueTask WriteAsync(Memory<char> value, CancellationToken cancellationTo
return WriteAsync((ReadOnlyMemory<char>)value, cancellationToken);
}

public void Write<T>(T value, CancellationToken cancellationToken = default)
public void Write<T>(T value)
{
Write((value?.ToString()).AsSpan(), cancellationToken);
Write((value?.ToString()).AsSpan());
}

public ValueTask WriteAsync<T>(T value, CancellationToken cancellationToken = default)
{
return WriteAsync((value?.ToString()).AsMemory(), cancellationToken);
}

public void WriteLine(CancellationToken cancellationToken = default)
public void WriteLine()
{
WriteLine(string.Empty, cancellationToken);
WriteLine(string.Empty);
}

public ValueTask WriteLineAsync(CancellationToken cancellationToken = default)
{
return WriteLineAsync(string.Empty, cancellationToken);
}

public void WriteLine<T>(T value, CancellationToken cancellationToken = default)
public void WriteLine<T>(T value)
{
Write(value?.ToString() + Environment.NewLine, cancellationToken);
Write(value?.ToString() + Environment.NewLine);
}

public ValueTask WriteLineAsync<T>(T value, CancellationToken cancellationToken = default)
Expand Down
48 changes: 24 additions & 24 deletions src/core/Terminal.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,29 +70,29 @@ public static void DisableRawMode()
System.DisableRawMode();
}

public static int Read(scoped Span<byte> value, CancellationToken cancellationToken = default)
public static int Read(scoped Span<byte> value)
{
return System.Read(value, cancellationToken);
return System.Read(value);
}

public static ValueTask<int> ReadAsync(Memory<byte> value, CancellationToken cancellationToken = default)
{
return System.ReadAsync(value, cancellationToken);
}

public static string? ReadLine(CancellationToken cancellationToken = default)
public static string? ReadLine()
{
return System.ReadLine(cancellationToken);
return System.ReadLine();
}

public static ValueTask<string?> ReadLineAsync(CancellationToken cancellationToken = default)
{
return System.ReadLineAsync(cancellationToken);
}

public static void Out(scoped ReadOnlySpan<byte> value, CancellationToken cancellationToken = default)
public static void Out(scoped ReadOnlySpan<byte> value)
{
System.Out(value, cancellationToken);
System.Out(value);
}

public static ValueTask OutAsync(ReadOnlyMemory<byte> value, CancellationToken cancellationToken = default)
Expand All @@ -105,9 +105,9 @@ public static ValueTask OutAsync(Memory<byte> value, CancellationToken cancellat
return System.OutAsync(value, cancellationToken);
}

public static void Out(scoped ReadOnlySpan<char> value, CancellationToken cancellationToken = default)
public static void Out(scoped ReadOnlySpan<char> value)
{
System.Out(value, cancellationToken);
System.Out(value);
}

public static ValueTask OutAsync(ReadOnlyMemory<char> value, CancellationToken cancellationToken = default)
Expand All @@ -120,39 +120,39 @@ public static ValueTask OutAsync(Memory<char> value, CancellationToken cancellat
return System.OutAsync(value, cancellationToken);
}

public static void Out<T>(T value, CancellationToken cancellationToken = default)
public static void Out<T>(T value)
{
System.Out(value, cancellationToken);
System.Out(value);
}

public static ValueTask OutAsync<T>(T value, CancellationToken cancellationToken = default)
{
return System.OutAsync(value, cancellationToken);
}

public static void OutLine(CancellationToken cancellationToken = default)
public static void OutLine()
{
System.OutLine(cancellationToken);
System.OutLine();
}

public static ValueTask OutLineAsync(CancellationToken cancellationToken = default)
{
return System.OutLineAsync(cancellationToken);
}

public static void OutLine<T>(T value, CancellationToken cancellationToken = default)
public static void OutLine<T>(T value)
{
System.OutLine(value, cancellationToken);
System.OutLine(value);
}

public static ValueTask OutLineAsync<T>(T value, CancellationToken cancellationToken = default)
{
return System.OutLineAsync(value, cancellationToken);
}

public static void Error(scoped ReadOnlySpan<byte> value, CancellationToken cancellationToken = default)
public static void Error(scoped ReadOnlySpan<byte> value)
{
System.Error(value, cancellationToken);
System.Error(value);
}

public static ValueTask ErrorAsync(ReadOnlyMemory<byte> value, CancellationToken cancellationToken = default)
Expand All @@ -165,9 +165,9 @@ public static ValueTask ErrorAsync(Memory<byte> value, CancellationToken cancell
return System.ErrorAsync(value, cancellationToken);
}

public static void Error(scoped ReadOnlySpan<char> value, CancellationToken cancellationToken = default)
public static void Error(scoped ReadOnlySpan<char> value)
{
System.Error(value, cancellationToken);
System.Error(value);
}

public static ValueTask ErrorAsync(ReadOnlyMemory<char> value, CancellationToken cancellationToken = default)
Expand All @@ -180,29 +180,29 @@ public static ValueTask ErrorAsync(Memory<char> value, CancellationToken cancell
return System.ErrorAsync(value, cancellationToken);
}

public static void Error<T>(T value, CancellationToken cancellationToken = default)
public static void Error<T>(T value)
{
System.Error(value, cancellationToken);
System.Error(value);
}

public static ValueTask ErrorAsync<T>(T value, CancellationToken cancellationToken = default)
{
return System.ErrorAsync(value, cancellationToken);
}

public static void ErrorLine(CancellationToken cancellationToken = default)
public static void ErrorLine()
{
System.ErrorLine(cancellationToken);
System.ErrorLine();
}

public static ValueTask ErrorLineAsync(CancellationToken cancellationToken = default)
{
return System.ErrorLineAsync(cancellationToken);
}

public static void ErrorLine<T>(T value, CancellationToken cancellationToken = default)
public static void ErrorLine<T>(T value)
{
System.ErrorLine(value, cancellationToken);
System.ErrorLine(value);
}

public static ValueTask ErrorLineAsync<T>(T value, CancellationToken cancellationToken = default)
Expand Down
14 changes: 10 additions & 4 deletions src/core/Terminals/NativeTerminalReader`2.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,19 @@ protected NativeTerminalReader(TTerminal terminal, string name, THandle handle)
IsInteractive = terminal.IsHandleInteractive(handle);
}

protected abstract int ReadPartialNative(scoped Span<byte> buffer, CancellationToken cancellationToken);

protected override sealed int ReadPartialCore(scoped Span<byte> buffer)
{
return ReadPartialNative(buffer, default);
}

protected override sealed ValueTask<int> ReadPartialCoreAsync(
Memory<byte> buffer,
CancellationToken cancellationToken)
Memory<byte> buffer, CancellationToken cancellationToken)
{
// We currently have no async support.
// We currently have no native async support.
return cancellationToken.IsCancellationRequested ?
ValueTask.FromCanceled<int>(cancellationToken) :
new(Task.Run(() => ReadPartialCore(buffer.Span, cancellationToken), cancellationToken));
new(Task.Run(() => ReadPartialNative(buffer.Span, cancellationToken), cancellationToken));
}
}
14 changes: 10 additions & 4 deletions src/core/Terminals/NativeTerminalWriter`2.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,19 @@ protected NativeTerminalWriter(TTerminal terminal, string name, THandle handle)
IsInteractive = terminal.IsHandleInteractive(handle);
}

protected abstract int WritePartialNative(scoped ReadOnlySpan<byte> buffer, CancellationToken cancellationToken);

protected override sealed int WritePartialCore(scoped ReadOnlySpan<byte> buffer)
{
return WritePartialNative(buffer, default);
}

protected override sealed ValueTask<int> WritePartialCoreAsync(
ReadOnlyMemory<byte> buffer,
CancellationToken cancellationToken)
ReadOnlyMemory<byte> buffer, CancellationToken cancellationToken)
{
// We currently have no async support.
// We currently have no native async support.
return cancellationToken.IsCancellationRequested ?
ValueTask.FromCanceled<int>(cancellationToken) :
new(Task.Run(() => WritePartialCore(buffer.Span, cancellationToken), cancellationToken));
new(Task.Run(() => WritePartialNative(buffer.Span, cancellationToken), cancellationToken));
}
}
2 changes: 1 addition & 1 deletion src/core/Terminals/Unix/UnixTerminalReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ public UnixTerminalReader(
_cancellationPipe = cancellationPipe;
}

protected override int ReadPartialCore(scoped Span<byte> buffer, CancellationToken cancellationToken)
protected override int ReadPartialNative(scoped Span<byte> buffer, CancellationToken cancellationToken)
{
using var guard = Terminal.Control.Guard();

Expand Down
2 changes: 1 addition & 1 deletion src/core/Terminals/Unix/UnixTerminalWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public UnixTerminalWriter(UnixVirtualTerminal terminal, string name, int handle,
_semaphore = semaphore;
}

protected override int WritePartialCore(
protected override int WritePartialNative(
scoped ReadOnlySpan<byte> buffer, CancellationToken cancellationToken)
{
using var guard = Terminal.Control.Guard();
Expand Down
2 changes: 1 addition & 1 deletion src/core/Terminals/Windows/WindowsTerminalReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public WindowsTerminalReader(
_buffer = new byte[Cathode.Terminal.Encoding.GetMaxByteCount(2)];
}

protected override unsafe int ReadPartialCore(scoped Span<byte> buffer, CancellationToken cancellationToken)
protected override unsafe int ReadPartialNative(scoped Span<byte> buffer, CancellationToken cancellationToken)
{
using var guard = Terminal.Control.Guard();

Expand Down
2 changes: 1 addition & 1 deletion src/core/Terminals/Windows/WindowsTerminalWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public WindowsTerminalWriter(
_semaphore = semaphore;
}

protected override unsafe int WritePartialCore(
protected override unsafe int WritePartialNative(
scoped ReadOnlySpan<byte> buffer, CancellationToken cancellationToken)
{
using var guard = Terminal.Control.Guard();
Expand Down
Loading

0 comments on commit bd889b9

Please sign in to comment.