![]() |
hamigaki::iostreams::basic_copy_manager —
basic_copy_manager
はboost::iostreams::copy()
に相当する操作を別スレッドで行うためのインタフェースを提供する。
template<typename ExceptionStorage = hamigaki::thread::exception_storage> class basic_copy_manager { public: // construct/copy/destruct basic_copy_manager(); ~basic_copy_manager(); // modifiers template<typename Source, typename Sink> void copy(Source, Sink, std::streamsize = boost::iostreams::default_device_buffer_size); void reset(); void stop(); void resume(); // queries bool operator!() const; bool done(); std::streampos tell(); };
basic_copy_manager
は次に示す3つの状態をとる。
basic_copy_manager
の状態がコピー中である間、このような共有情報を複製元のデバイスを通して変更してはならない。basic_copy_manager
modifierstemplate<typename Source, typename Sink> void copy(Source src, Sink sink, std::streamsize buffer_size = boost::iostreams::default_device_buffer_size);
Effects:
src
から読み込んだデータをdest
に書き出すスレッドを起動する。
Postconditions:
状態=コピー中
void reset();
Effects:
basic_copy_manager
の保持するSource/Sinkの対を破棄する。
Notes:
コピー中の場合は、Source/Sinkの対を破棄する前にstop()
が呼び出される。
Postconditions:
状態=空
void stop();
Effects:
copy()
により作成されたスレッドをキャンセルし、その終了を待つ。
Notes:
この関数はスレッドの終了を待つため、ブロックする。
Postconditions:
状態=停止中
void resume();
Requires:
状態=停止中
Effects:
stop()
により中断された位置からコピーを再開する。
Postconditions:
状態=コピー中
basic_copy_manager
queriesbool operator!() const;
Returns:
状態=空の場合true
bool done();
Requires:
状態=コピー中または停止中
Returns:
コピーが完了したかどうか
Notes:
この関数は、コピーが完了している場合はスレッドの終了を待つ。
Postconditions:
true
を返した場合、状態=停止中。それ以外の場合、状態=コピー中
std::streampos tell();
Requires:
状態=コピー中または停止中
Returns:
コピーした文字の数
Notes:
コピーが完了した後も、次にcopy()
かreset()
を呼ぶまで値は保持される。
Copyright © 2006 Takeshi Mouri |