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

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

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

## RWTBitVec<size>

### 形式

      #include <rw/tbitvec.h>
      RWTBitVec<22>   // 1 個の 22 ビット長のベクトル

### 説明

  RWTBitVec`<`size`>` は、固定長 size のパラメータ化されたビットベクトルです。クラス `RWBitVec` と違って、実行時に長さを変更できません。この RWTBitVec の長所はサイズが小さいことと、間接演算 (`indirection`) の段階が 1 つ少ないため、処理速度が多少上がることです。

  ビットには、0 〜 size-1 (両端含む) の番号が付きます。

  コピーコンストラクタと代入演算子の両方で、コピーの意味を使用します。

### 持続性

      なし

### 例

  次の例は、24 ビット長のビットベクトルを処理しています。

      #include <rw/tbitvec.h>

      main() {
        RWTBitVec<24> a, b;     // 2 個のベクトルを割り当てる
        a(2) = TRUE;   // a のビット 2 (第 3 ビット) をオンに設定する
        b(3) = TRUE;   // b のビット 3 (第 4 ビット) をオンに設定する
        RWTBitVec<24> c = a ^ b;       // c に a と b の排他的論理和を設定する
      }

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

      RWTBitVec<size>();

    すべてのビットを `FALSE` に設定したインスタンスを作成します。

      RWTBitVec<size>(RWBoolean val);

    すべてのビットを `val` に設定したインスタンスを作成します。

### 代入演算子

      RWTBitVec<size>&
      operator=(const RWTBitVec<size>& v);

    自分自身に `v` のコピーを設定します。

      RWTBitVec&
      operator=(RWBoolean val);

    自分自身内のすべてのビットに `val` を設定します。

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

    論理代入演算子。自分自身の各ビットに、自分自身と `v` の対応ビットとのビット毎の論理積、排他的論理和、論理和をそれぞれ設定します。

      RWBitRef
      operator[](size_t i);

    自分自身の `i` 番目のビットへの参照を返します。この参照は左辺値として使用できます。インデックス `i` は、0 〜 (size -1) (両端を含む) の範囲になければなりません。インデックスの境界検査を行います。

      RWBitRef
      operator()(size_t i);

    自分自身の `i` 番目のビットへの参照を返します。この参照は左辺値として使用できます。インデックス `i` は、0 〜 (size -1) (両端を含む) の範囲になければなりません。境界検査は行いません。

### 論理演算子

      RWBoolean
      operator==(RWBoolean b) const;

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

      RWBoolean
      operator!=(RWBoolean b) const;

    自分自身のいずれのビットにも値 `b` が設定されていなければ `TRUE` を、それ以外の場合は `FALSE` を返します。

      RWBoolean
      operator==(const RWTBitVec& v) const;

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

      RWBoolean
      operator!=(const RWTBitVec& v) const;

    自分自身のいずれのビットにも `v` 内の対応ビットと同じ値が設定されていなければ `TRUE` を、それ以外の場合は `FALSE` を返します。

      void
      clearBit(size_t i);

    インデックス `i` のビットをクリア (`FALSE` に設定) します。インデックス `i` は 0 〜 (size -1) の範囲になければなりません。境界検査は行いません。次の 2 行は同じ意味を持ちます。ただし、`clearBit(size_t)` の方が `operator()(size_t)` を使用するより多少小さくて高速です。

         a(i) = FALSE;
         a.clearBit(i);
      const RWByte*
      data() const;

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

      size_t
      firstFalse() const;

    自分自身の中で最初のオフ (`FALSE`) のインデックスを返します。オフビットがなければ `RW_NPOS` を返します。

      size_t
      firstTrue() const;

    自分自身の中で最初のオン (`TRUE`) のインデックスを返します。オンビットがなければ `RW_NPOS` を返します。

      void
      setBit(size_t i);

    インデックス `i` のビットを設定 (`TRUE` に設定) します。インデックス `i` は 0 〜 (size -1) の範囲になければなりません。境界検査は行いません。次の 2 行は同じ意味を持ちます。ただし、`setBit(size_t)` の方が `operator()(size_t)` を使用するより多少小さくて高速です。

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

    インデックス `i` のビットをテストします。インデックス `i` は 0 〜 (size -1) の範囲になければなりません。境界検査は行いません。次の 2 行は同じ意味を持ちます。ただし、`testBit(size_t)` の方が `operator()(size_t)` を使用するよりも多少小さくて高速です。

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

### 関連の大域関数

      RWTBitVec operator&(const RWTBitVec& v1, const RWTBitVec& v2);
      RWTBitVec operator^(const RWTBitVec& v1, const RWTBitVec& v2);
      RWTBitVec operator|(const RWTBitVec& v1, const RWTBitVec& v2);

    ベクトル `v1` と `v2` とのビット毎の論理積、排他的論理和、論理和をそれぞれ返します。