バナーをクリックすれば目次に戻ります
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 によって格納されたオブジェクトは、仮想関数 hash() および isEqual() を適切に定義した抽象基底クラス RWCollectable を継承しなくてはなりません (RWCollectable を参照してください)。関数 hash() は同じハッシュ値を持つオブジェクトを見つけるのに使用し、isEqual() は 2 つのオブジェクトが一致するかどうかを検査します。
クラス RWBag は、項目の出現回数を保守する内部ハッシュディクショナリ (RWHashDictionary) を用いて実装されています。コレクション中の既存の項目と一致する (isEqual 使用) 項目が追加されると、その回数は増分されます。値の最初のインスタンスしか実際には挿入されず、それ以降のインスタンスについては発生の回数が増えるだけになります。このような処理は、Smalltalk の Bag の実装と同じです。
メンバー関数 apply() と反復子は、項目の回数分だけ反復して呼び出されます。
単に回数を数えるだけでなく、実際に重複しているものを格納したいときは、RWHashTable を参照してください。
RWBag(size_t n = RWDEFAULT_CAPACITY);
RWBag(const RWBag& b);
void operator=(const RWBag& b);
RWBoolean operator==(const RWBag& b) const;
virtual void apply(RWapplyCollectable ap, void*);
virtual RWspace binaryStoreSize() const;
virtual void clear();
virtual void clearAndDestroy();
virtual int compareTo(const RWCollectable* a) const;
virtual RWBoolean contains(const RWCollectable* target) const;
virtual size_t entries() const;
virtual RWCollectable* find(const RWCollectable* target) const;
virtual unsigned hash() const;
virtual RWCollectable* insert(RWCollectable* c);
RWCollectable* insertWithOccurrences(RWCollectable* c,size_t n);
virtual RWClassID isA() const;
virtual RWBoolean isEmpty() const;
virtual RWBoolean isEqual(const RWCollectable* a) const;
virtual size_t occurrencesOf(const RWCollectable* target) const;
virtual RWCollectable* remove(const RWCollectable* target);
virtual void removeAndDestroy(const RWCollectable* target);
void resize(size_t n = 0);
virtual void restoreGuts(RWvistream&); virtual void restoreGuts(RWFile&); virtual void saveGuts(RWvostream&) const; virtual void saveGuts(RWFile&) const;
RWStringID stringID();