hamigaki.png (2451 bytes)

前のページ 上に戻る ホーム 次のページ

Class template basic_copy_manager

hamigaki::iostreams::basic_copy_manager —

basic_copy_managerboost::iostreams::copy()に相当する操作を別スレッドで行うためのインタフェースを提供する。

Synopsis

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();
};

Description

basic_copy_managerは次に示す3つの状態をとる。

空(empty)
コピー対象となるSource/Sinkが設定されていない
コピー中(copying)
コピー操作のためスレッドが動作している
停止中(stopping)
コピーが完了したか中断された

注意

多くの場合、Source/Sinkはコピーコンストラクタおよびコピー代入演算子によって複製されると、複製元と複製先でデバイスの状態を共有する。basic_copy_managerの状態がコピー中である間、このような共有情報を複製元のデバイスを通して変更してはならない。

basic_copy_manager construct/copy/destruct

  1. basic_copy_manager();

    Postconditions: 状態=空

  2. ~basic_copy_manager();

    Effects: close()を呼び出す。

basic_copy_manager modifiers

  1. template<typename Source, typename Sink> 
      void copy(Source src, Sink sink, 
                std::streamsize buffer_size = boost::iostreams::default_device_buffer_size);

    Effects: srcから読み込んだデータをdestに書き出すスレッドを起動する。
    Postconditions: 状態=コピー中

  2. void reset();

    Effects: basic_copy_managerの保持するSource/Sinkの対を破棄する。
    Notes: コピー中の場合は、Source/Sinkの対を破棄する前にstop()が呼び出される。
    Postconditions: 状態=空

  3. void stop();

    Effects: copy()により作成されたスレッドをキャンセルし、その終了を待つ。
    Notes: この関数はスレッドの終了を待つため、ブロックする。
    Postconditions: 状態=停止中

  4. void resume();

    Requires: 状態=停止中
    Effects: stop()により中断された位置からコピーを再開する。
    Postconditions: 状態=コピー中

basic_copy_manager queries

  1. bool operator!() const;

    Returns: 状態=空の場合true

  2. bool done();

    Requires: 状態=コピー中または停止中
    Returns: コピーが完了したかどうか
    Notes: この関数は、コピーが完了している場合はスレッドの終了を待つ。
    Postconditions: trueを返した場合、状態=停止中。それ以外の場合、状態=コピー中

  3. std::streampos tell();

    Requires: 状態=コピー中または停止中
    Returns: コピーした文字の数
    Notes: コピーが完了した後も、次にcopy()reset()を呼ぶまで値は保持される。

製作著作 © 2006 Takeshi Mouri

前のページ 上に戻る ホーム 次のページ