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

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 をコレクションに挿入し、その項目を返します。または、cisEqual である項目がすでにコレクション内にあれば、既存の項目を返して回数を増分します。

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

コレクション内に項目 c と回数 n を挿入し、その項目を返します。または、cisEqual である項目がすでにコレクション内にある場合は、既存の項目を返して回数を 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 から継承した関数。