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

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

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

## RWGBitVec(size)

### 形式

      #include <rw/gbitvec.h>
      declare(RWGBitVec,size)
      RWGBitVec(size) a;

### 説明

  このクラスは、固定長 `size` のビットベクトルです。長さは動的に変更できません。実行時に長さを変更できるビットベクトルが必要なときは、RWBitVec を参照してください。型 RWGBitVec(size) のオブジェクトは、標準 C++ ヘッダファイル `<generic.h>` で定義したマクロを使用して宣言されます。ビットは、0 から size-1 (両端含む) まで番号が付いています。

### 持続性

  なし

### 例

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

      #include "rw/gbitvec.h"
      #include <iostream.h>

      const int VECSIZE = 8;

      declare(RWGBitVec, VECSIZE)   // 24 ビット長のベクトルを宣言する
      implement(RWGBitVec, VECSIZE) // ベクトルを実装する

      main()
      {
        RWGBitVec(VECSIZE) a, b;   // 2 つのベクトルを割り当てる

        a(2) = TRUE;               // a のビット 2 (第 3 ビット) をオンに設定する
        b(3) = TRUE;               // b のビット 3 (第 4 ビット) をオンに設定する

        RWGBitVec(VECSIZE) c = a ^ b;  // c に a と b の排他的論理和を設定する

        cout << "Vector 1" << "\t" << "Vector 2" << "\t"
             << "Vector 1 xor Vector 2" << endl;
        for(int i = 0; i < VECSIZE; i++)
          cout << a[i] << "\t\t" << b[i] << "\t\t" << c[i] << endl;

        return 0;
      }

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

      RWGBitVec(size)();

    `size` 要素長のビットベクトルを作成し、すべてのビットを `FALSE` に初期化します。

      RWGBitVec(size)(RWBoolean f);

    `size` 要素長のビットベクトルを作成し、すべてのビットを `f` に初期化します。

### 代入演算子

      RWGBitVec(sz)&
      operator=(const RWGBitVec(sz)& v);

    自分自身の各要素に `v` の対応ビットの値を設定し、自分自身への参照を返します。

      RWGBitVec(sz)&
      operator=(RWBoolean f);

    自分自身のすべての要素にブール値 `f` を設定します。

      RWGBitVec(sz)&
      operator&=(const RWGBitVec(sz)& v);
      RWGBitVec(sz)&
      operator^=(const RWGBitVec(sz)& v);
      RWGBitVec(sz)&
      operator|=(const RWGBitVec(sz)& v);

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

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

      RWBitRef
      operator[](size_t i);

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

      RWBitRef
      operator()(size_t i);

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

### 公開メンバー関数

      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` ポインタを返します。この関数の使用には注意を要します。

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

### 関連の大域関数

      RWGBitVec(sz)
      operator&(const RWGBitVec(sz)& v1, const RWGBitVec(sz)& v2);
      RWGBitVec(sz)
      operator^(const RWGBitVec(sz)& v1, const RWGBitVec(sz)& v2);
      RWGBitVec(sz)
      operator|(const RWGBitVec(sz)& v1, const RWGBitVec(sz)& v2);

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

      RWBoolean
      operator==(const RWGBitVec(sz)& v1, const RWGBitVec(sz)& v2)
                 const;

    `v1` の各ビットが `v2` の対応ビットと同じ値に設定されていれば `TRUE` を、同じでなければ `FALSE` を返します。

      RWBoolean
      operator!=(const RWGBitVec(sz)& v1, const RWGBitVec(sz)& v2)
                 const;

    `v1` の各ビットが `v2` の対応ビットと同じ値に設定されていれば `FALSE` を、同じでなければ `TRUE` を返します。