Tools.h++ 7.0 クラスライブラリ・リファレンスマニュアル: RWBitVec

バナーをクリックすれば目次に戻ります

Copyright 1999 Rogue Wave Software
Copyright 1999 Sun Microsystems, Inc.

## RWBitVec

### 形式

      #include <rw/bitvec.h>
      RWBitVec v;

### 説明

  クラス RWBitVec は、実行時に長さを変えられるビットベクトルです。長さを変えるには 多段階の間接参照が必要なので、コンパイル時に長さが決まるクラス RWGBitVec`(`size`)` や RWTBitVec`<`size`>` より多少効率が悪くなります。

### 持続性

  単純

### 例

      #include <rw/bitvec.h>
      #include <rw/rstream.h>
      main() {
          // 20 ビットのベクトルを割り当て、TRUE に設定する
          RWBitVec av(20, TRUE);

          av(2) = FALSE;  // ビット 2 をオフにする
          av.clearBit(7); // ビット 7 をオフにする
          av.setBit(2);   // ビット 2 をオンに戻す

          for(int i=11; i<=14; i++) av(i) = FALSE;

          cout << av << endl; // ベクトルを出力する
      }

  #### プログラム出力:

         [
         1 1 1 1 1 1 1 0 1 1 1 0 0 0 0 1 1 1 1 1
         ]

### 公開コンストラクタ

      RWBitVec();

    長さがゼロのベクトル (空ベクトル) を作成します。

      RWBitVec(size_t N);

    `N` ビットのベクトルを作成します。各ビットの初期値は未定義です。

      RWBitVec(size_t N, RWBoolean initVal);

    `N` ビットのベクトルを作成し、各ビットをブール (論理) 値 `initVal` に設定します。

      RWBitVec(const RWByte* bp, size_t N);

    `N` ビットのベクトルを作成し、バイト配列 `bp` 内のデータで初期化します。この配列は、最低 `N` ビットの長さを持たなければなりません。識別子 `RWByte` は、`unsigned char` の `typedef` です。

      RWBitVec(const RWBitVec& v);

    コピーコンストラクタ。値の意味を使用して、作成したベクトルが `v` のコピーになるようにします。

      ~RWBitVec();

    デストラクタ。割り当てられているメモリーをすべて解放します。

### 代入演算子

      RWBitVec&
      operator=(const RWBitVec& v);

    代入演算子。値の意味を使用して、自分自身が `v` のコピーになるようにします。

      RWBitVec&
      operator=(RWBoolean b);

    代入演算子。自分自身内の各ビットをブール値 `b` に設定します。

      RWBitVec&
      operator&=(const RWBitVec& v);
      RWBitVec&
      operator^=(const RWBitVec& v);
      RWBitVec&
      operator|=(const RWBitVec& v);

    論理代入演算子。自分自身内の各要素に、自身と `v` の対応ビットの論理積、排他的論理和、論理和をそれぞれ設定します。自身と `v` の要素の数は同じでなければなりません。同じでないと、RWInternalErr 型の例外が発生します。

### インデックス付け演算子

      RWBitRef
      operator[](size_t i);

    自分自身のビット `i` に対する参照を返します。ヘルパクラス RWBitRef を使用します。結果は左辺値として使用できます。インデックス `i` は、0 〜 (ベクトル長 -1) の範囲になければなりません。境界検査を行い、インデックスが範囲外にあると RWBoundsErr 型の例外が発生します。

      RWBitRef
      operator()(size_t i);

    自分自身のビット `i` への参照を返します。ヘルパクラス RWBitRef を使用します。結果は左辺値として使用できます。インデックス `i` は、0 〜 (ベクトル長 -1) の範囲になければなりません。ヘッダファイル `<rw/bitvec.h>`を取り込む前に前処理マクロ `RWBOUNDS_CHECK` が定義されている場合だけ境界検査を行います。境界検査の結果、インデックスが範囲外にあると RWBoundsErr 型の例外が発生します。

      RWBoolean
      operator[](size_t i) const;

    ビット `i` のブール値を返します。結果は左辺値として使用できません。インデックス `i` は、0 〜 (ベクトル長 -1) の範囲になければなりません。境界検査を行い、インデックスが範囲外にあると RWBoundsErr 型の例外が発生します。

      RWBoolean
      operator()(size_t i) const;

    ビット `i` のブール値を返します。結果は左辺値として使用できません。インデックス `i` は、0 〜 (ベクトル長 -1) の範囲になければなりません。ヘッダファイル `<rw/bitvec.h>` を取り込む前にプリプロセッサマクロ `RWBOUNDS_CHECK` が定義されている場合だけ、境界検査を行います。境界検査の結果、インデックスが範囲外にあると RWBoundsErr 型の例外が発生します。

### 論理演算子

      RWBoolean
      operator==(const RWBitVec& u) const;

    自分自身と `v` が同じ長さで自身の各ビットが `v` の対応ビットと同じ値の場合に `TRUE` を、それ以外の場合は `FALSE` を返します。

      RWBoolean
      operator!=(const RWBitVec& u) const;

    自分自身と `v` が同じ長さで自身の各ビットが `v` の対応ビットと同じ値の場合に `FALSE` を、それ以外の場合は `TRUE` を返します。

      RWBoolean
      operator==(RWBoolean b) const;

    自分自身の各ビットがブール値 `b` に設定されている場合に `TRUE` を、それ以外の場合は `FALSE` を返します。

      RWBoolean
      operator!=(RWBoolean b) const;

    自分自身の各ビットがブール値 `b` に設定されている場合に `FALSE` を、それ以外の場合は `TRUE` を返します。

### 公開メンバー関数

      void
      clearBit(size_t i);

    インデックス `i` を持つビットをクリアします (`FALSE` に設定する)。インデックス `i` は、0 〜 (ベクトル長 -1) の範囲になければなりません。境界検査は行いません。次の 2 つのコードは同等です。`clearBit(size_t)` の方が、`operator()(size_t)` を使用するよりも、コードが多少小さくなり、実行が速くなります。

         a(i) = FALSE;
         a.clearBit(i);

      const RWByte*
      data() const;

    自分自身の生データへの `const` ポインタを返します。使用には注意が必要です。

      size_t
      firstFalse() const;

    自分自身内の最初の `FALSE` ビットのインデックスを返します。`FALSE` ビットが見つからない場合は `RW_NPOS` を返します。

      size_t
      firstTrue() const;

    自分自身内の最初の `TRUE` ビットのインデックスを返します。`TRUE` ビットが見つからない場合は `RW_NPOS` を返します。

      unsigned
      hash() const;

    ハッシュするのに適切な値を返します。

      RWBoolean
      isEqual(const RWBitVec& v) const;

    自分自身と `v` とが同じ長さで、自身の各ビットが `v` の対応するビットと同じ値であれば、`TRUE` を、それ以外の場合は `FALSE` を返します。

      size_t
      length() const;

    ベクトルのビット数を返します。

      ostream&
      printOn(ostream& s) const;

    出力ストリーム `s` にベクトル `v` を出力します。出力書式の例は、前記の例を参照してください。

      void
      resize(size_t N);

    ベクトルのサイズを `N` に変更します。ベクトルが長くなる場合、追加されたビットは `FALSE` に設定されます。

      istream&
      scanFrom(istream&);

    入力ストリーム `s` からビットベクトルを読み取ります。このとき、ベクトルは必要に応じて動的にサイズが変わります。ベクトルの書式は、メンバー関数 `printOn(ostream&)` と同じでなければなりません。

      void
      setBit(size_t i);

    インデックス `i` を持つビットを `TRUE` に設定します。インデックス `i` は、0 〜 (ベクトル長 -1) の範囲になければなりません。境界検査は行いません。次の 2 つのコードは同等です。`setBit(size_t)` の方が、`operator()(size_t)` を使用するよりもコードが多少小さくなり、実行が速くなります。

         a(i) = TRUE;
         a.setBit(i);
      RWBoolean
      testBit(size_t i) const;

    インデックス `i` を持つビットをテストします。インデックス `i` は、0 〜 (ベクトル長 -1) の範囲になければなりません。境界検査は行いません。次の 2 つのコードは同等です。`testBit(size_t)` の方が、`operator()(size_t)` を使用するよりも、コードが多少小さくなり、実行が速くなります。

         if( a(i) )              doSomething();
         if( a.testBit(i) )      doSomething();

### 関連の大域関数

      RWBitVec
      operator!(const RWBitVec& v);

    ベクトル `v` の論理否定を返す単項演算子。

      RWBitVec
      operator&(const RWBitVec&,const RWBitVec&);
      RWBitVec
      operator^(const RWBitVec&,const RWBitVec&);
      RWBitVec
      operator|(const RWBitVec&,const RWBitVec&);

    ベクトル `v1` と `v2` との論理積、排他的論理和、論理和を返します。`v1` と `v2` は、同じ長さでなければなりません。同じでないと、`RWInternalErr` 型の例外が発生します。

      ostream&
      operator<<(ostream& s, const RWBitVec& v);

    `v.printOn(s)` を呼び出します。

      istream&
      operator>>(istream& s, RWBitVec& v);

    `v.scanFrom(s)` を呼び出します。

      RWvistream&
      operator<<(RWvistream&, RWBitVec& vec);
      RWFile&
      operator<<(RWFile&,     RWBitVec& vec);

    RWBitVec `vec` を、仮想ストリームまたは RWFile に保存します。

      RWvistream&
      operator>>(RWvistream&, RWBitVec& vec);
      RWFile&
      operator>>(RWFile&,     RWBitVec& vec);

    仮想ストリームまたは RWFile から RWBitVec を `vec` に復元し、`vec` の前の内容を書き換えます。

      size_t
      sum(const RWBitVec& v);

    ベクトル `v` 内の `TRUE` ビットの総数を返します。