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

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

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

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 を返します。