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

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

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

## RWBag

RWBag RWCollection RWCollectable

### 形式

      typedef RWBag Bag;     // Smalltalk の typedef
      #include <rw/rwbag.h>
      RWBag h;

### 説明

  クラス RWBag は Smalltalk のクラス Bag に対応するクラスです。順序を持たない要素の集合を表現し、外部キーではアクセスできません。要素の重複は許可されています。

  RWBag によって格納されたオブジェクトは、仮想関数 `hash()` および `isEqual()` を適切に定義した抽象基底クラス RWCollectable を継承しなくてはなりません (RWCollectable を参照してください)。関数 `hash()` は同じハッシュ値を持つオブジェクトを見つけるのに使用し、`isEqual()` は 2 つのオブジェクトが一致するかどうかを検査します。

  クラス RWBag は、項目の出現回数を保守する内部ハッシュディクショナリ (RWHashDictionary) を用いて実装されています。コレクション中の既存の項目と一致する (`isEqual` 使用) 項目が追加されると、その回数は増分されます。値の最初のインスタンスしか実際には挿入されず、それ以降のインスタンスについては発生の回数が増えるだけになります。このような処理は、Smalltalk の Bag の実装と同じです。

  メンバー関数 `apply()` と反復子は、項目の回数分だけ反復して呼び出されます。

  単に回数を数えるだけでなく、実際に重複しているものを格納したいときは、RWHashTable を参照してください。

### 持続性

  多相

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

      RWBag(size_t n = RWDEFAULT_CAPACITY);

    `n` 個のバケットを持つ空のバッグを作成します。

      RWBag(const RWBag& b);

    コピーコンストラクタ。`b` のシャローコピーを作成します。

### 公開メンバー演算子

      void
      operator=(const RWBag& b);

    代入演算子。`b` のシャローコピーを作成します。

      RWBoolean
      operator==(const RWBag& b) const;

    自分自身とバッグ `b` が同じエントリ数を持ち、かつ、自分自身の各キーに対して同じエントリ数を持つ `isEqual` な (一致する) 対応キーが `b` 内に存在する場合に `TRUE` を返します。

### 公開メンバー関数

      virtual void
      apply(RWapplyCollectable ap, void*);

    クラス RWCollection から再定義した関数。この関数は、通常予測できない順序で並んでいるコレクション内の各メンバーに、ユーザー定義関数 `ap` を適用するように再定義されています。1 つの項目が複数回挿入されていれば (すなわち、複数の項目が `isEqual` であれば)、`apply()` 関数はその回数だけ呼び出されます。ユーザー定義関数で項目のハッシュ値または「`isEqual`」の意味を変更してはなりません。

      virtual RWspace
      binaryStoreSize() const;

    クラス RWCollection から継承した関数。

      virtual void
      clear();

    クラス RWCollection から再定義した関数。

      virtual void
      clearAndDestroy();

    クラス RWCollection から継承した関数。

      virtual int
      compareTo(const RWCollectable* a) const;

    クラス RWCollectable から継承した関数。

      virtual RWBoolean
      contains(const RWCollectable* target) const;

    クラス RWCollection から継承した関数。

      virtual size_t
      entries() const;

    クラス RWCollection から再定義した関数。

      virtual RWCollectable*
      find(const RWCollectable* target) const;

    クラス RWCollection から再定義した関数。バッグに最初に挿入され、かつ `target` と等しい項目が返されます。そのような項目がなければ `NULL` が返されます。ハッシュを使用して検索範囲を限定します。

      virtual unsigned
      hash() const;

    クラス RWCollectable から継承した関数。

      virtual RWCollectable*
      insert(RWCollectable* c);

    クラス RWCollection から再定義した関数。項目 `c` をコレクションに挿入し、その項目を返します。または、`c` と `isEqual` である項目がすでにコレクション内にあれば、既存の項目を返して回数を増分します。

      RWCollectable*
      insertWithOccurrences(RWCollectable* c,size_t n);

    コレクション内に項目 `c` と回数 `n` を挿入し、その項目を返します。または、`c` と `isEqual` である項目がすでにコレクション内にある場合は、既存の項目を返して回数を `n` だけ増分します。

      virtual RWClassID
      isA() const;

    クラス RWCollectable から再定義した関数。`__RWBAG` を返します。

      virtual RWBoolean
      isEmpty() const;

    クラス RWCollection から再定義した関数。

      virtual RWBoolean
      isEqual(const RWCollectable* a) const;

    クラス RWCollectable から継承した関数。

      virtual size_t
      occurrencesOf(const RWCollectable* target) const;

    クラス RWCollection から再定義した関数。項目 `target` と等しい項目の数を返します。

      virtual RWCollectable*
      remove(const RWCollectable* target);

    クラス RWCollection から再定義した関数。項目 `target` と等しい項目を取り除いて返します。等しい項目がなければ `NULL` を返します。

      virtual void
      removeAndDestroy(const RWCollectable* target);

    クラス RWCollection から再定義した関数。`target` で指される項目と `isEqual` である項目を取り除きます。それがコレクションの最後の発生である場合、項目を削除します。

      void
      resize(size_t n = 0);

    `n` 個のバケットを持てるよう、内部ハッシュテーブルのサイズを変更します。この関数のオーバーヘッドは、コレクションのメンバー全部を再ハッシュすることです。`n` がゼロの場合は、自動的に適切なサイズが決まります。

      virtual void
      restoreGuts(RWvistream&);
      virtual void
      restoreGuts(RWFile&);
      virtual void
      saveGuts(RWvostream&) const;
      virtual void
      saveGuts(RWFile&) const;

    クラス RWCollection から継承した関数。

      RWStringID
      stringID();

    (仮想関数として動作) クラス RWCollectable から継承した関数。