/// <summary> /// CTOR /// </summary> /// <param name="vault">vault protecting the string</param> /// <param name="helper">helper for i/o</param> /// <param name="favoriteChar">char it writes</param> /// <param name="startToken">Start token</param> /// <param name="minWrites">min writes</param> /// <param name="maxWrites">max writes</param> /// <exception cref="ArgumentNullException"><paramref name="vault"/> or <paramref name="helper"/> /// were <see langword="null"/> </exception> /// <exception cref="ArgumentOutOfRangeException">Min writes was negative. Or max writes did not exceed min writes /// by at least three.</exception> protected WriterThread([NotNull] TVault vault, [NotNull] IOutputHelper helper, char favoriteChar, WriterThreadBeginToken startToken, int minWrites = DefaultMinWrites, int maxWrites = DefaultMaxWrites) : base(vault, helper) { if (minWrites < 0) { throw new ArgumentOutOfRangeException(nameof(minWrites), minWrites, @"Parameter cannot be negative."); } if (maxWrites <= minWrites + 2) { throw new ArgumentOutOfRangeException(nameof(maxWrites), maxWrites, $@"Parameter must be greater than {(minWrites + 2).ToString()}"); } Char = favoriteChar; MaxWrites = maxWrites; MinWrites = minWrites; _startToken = startToken ?? throw new ArgumentNullException(nameof(startToken)); }
private protected override WriterThread <BasicReadWriteVault <string> > InitWriterThread( BasicReadWriteVault <string> vault, IOutputHelper outputHelper, char charToWrite, WriterThreadBeginToken beginToken) => new BasicVaultWriterThread(vault, outputHelper, charToWrite, beginToken);
private protected override WriterThread <ReadWriteStringBufferVault> InitWriterThread( ReadWriteStringBufferVault vault, IOutputHelper outputHelper, char charToWrite, WriterThreadBeginToken beginToken) => new CustomVaultWriterThread(vault, outputHelper, charToWrite, beginToken);
/// <inheritdoc /> public BasicVaultWriterThread([NotNull] BasicReadWriteVault <string> vault, [NotNull] IOutputHelper helper, char favoriteChar, WriterThreadBeginToken startToken, int minWrites = DefaultMinWrites, int maxWrites = DefaultMaxWrites) : base(vault, helper, favoriteChar, startToken, minWrites, maxWrites) { }
/// <inheritdoc /> public CustomVaultWriterThread([NotNull] ReadWriteStringBufferVault vault, [NotNull] IOutputHelper helper, char favoriteChar, WriterThreadBeginToken startToken, int minWrites = DefaultMinWrites, int maxWrites = DefaultMaxWrites) : base(vault, helper, favoriteChar, startToken, minWrites, maxWrites) { }
[NotNull] private protected abstract WriterThread <TVault> InitWriterThread([NotNull] TVault vault, [NotNull] IOutputHelper outputHelper, char charToWrite, [NotNull] WriterThreadBeginToken beginToken);