public string ReadWord(InputOutputMutex action = InputOutputMutex.None) { if (_index < 0 || _index == _words.Length) { _index = -1; var line = ReadLine(action); _words = line.Split(SplitChar, StringSplitOptions.RemoveEmptyEntries); } _index++; return(_index < _words.Length ? _words[_index] : string.Empty); }
public async Task WriteAsync(string cad, InputOutputMutex action = InputOutputMutex.None) { if (action.IsWaitable()) { _mutex.WaitOne(); } await Output.WriteAsync(cad); if (action.IsReleasable()) { _mutex.ReleaseMutex(); } }
public void Write(string cad, InputOutputMutex action = InputOutputMutex.None) { if (action.IsWaitable()) { _mutex.WaitOne(); } Output.Write(cad); if (action.IsReleasable()) { _mutex.ReleaseMutex(); } }
public async Task <string> ReadWordAsync(InputOutputMutex action = InputOutputMutex.None) { if (_index < 0 || _index == _words.Length) { _index = -1; LastLineRead = await ReadLineAsync(action); _words = LastLineRead.Split(SplitChar, StringSplitOptions.RemoveEmptyEntries); } _index++; return(_index < _words.Length ? _words[_index] : string.Empty); }
public async Task <string> ReadLineAsync(InputOutputMutex action = InputOutputMutex.None) { if (action.IsWaitable()) { _mutex.WaitOne(); } var line = await Input.ReadLineAsync(); if (action.IsReleasable()) { _mutex.ReleaseMutex(); } return(line); }
public string ReadLine(InputOutputMutex action = InputOutputMutex.None) { if (action.IsWaitable()) { _mutex.WaitOne(); } var line = Input.ReadLine(); if (action.IsReleasable()) { _mutex.ReleaseMutex(); } return(line); }
private static bool InBetween(this InputOutputMutex v, InputOutputMutex min, InputOutputMutex max) => (uint)v - (uint)min <= (uint)max - (uint)min;
public static bool IsWaitable(this InputOutputMutex @this) => @this.InBetween(InputOutputMutex.Atomic, InputOutputMutex.Relax);
public static bool IsReleasable(this InputOutputMutex @this) => @this.InBetween(InputOutputMutex.Acquire, InputOutputMutex.Atomic);
public Task WriteLineAsync(string cad, InputOutputMutex action = InputOutputMutex.None) => WriteAsync($"{cad}{Environment.NewLine}", action);
public void WriteLine(string cad, InputOutputMutex action = InputOutputMutex.None) => Write($"{cad}{Environment.NewLine}", action);