#ifndef __BOUNDEDSET_HPP #define __BOUNDEDSET_HPP #include "set.hpp" #include "bounded.hpp" template class BoundedSet : public Set { public: BoundedSet(); //operators BoundedSet& operator=(const Item &item) { Set::operator=(item); return *this; } BoundedSet& operator=(const Set &s) { Set::operator=(s); return *this; } BoundedSet& operator+=(const Item &item) { Set::operator+=(item); return *this; } BoundedSet& operator+=(const Set &s) { Set::operator+=(s); return *this; } BoundedSet& operator-=(const Item &item) { Set::operator-=(item); return *this; } BoundedSet& operator-=(const Set &s) { Set::operator-=(s); return *this; } BoundedSet& operator*=(const Item &item) { Set::operator*=(item); return *this; } BoundedSet& operator*=(const Set &s) { Set::operator=(s); return *this; } //non-operators virtual int isEmpty() const; virtual unsigned length() const; virtual void clear(); virtual int contains(const Item &item) const; protected: virtual void assign(const Item &i); virtual void assignTo(Set &s) const; virtual void setUnion(const Item &item); virtual void setUnionTo(Set &s) const; virtual void setDifference(const Item &item); virtual void setDifferenceTo(Set &s) const; virtual void setIntersection(const Item &item); virtual void setIntersection(const Set &s); virtual int equal(const Set &s) const; virtual int notequal(const Set &s) const; virtual int subset(const Set &s) const; virtual int superset(const Set &s) const; virtual int propersubset(const Set &s) const; virtual int propersuperset(const Set &s) const; Bounded rep; //cursor management protected: struct BCursor_rep : public Cursor_rep { const BoundedSet *set; BCursor_rep *prev,*next; int currentIndex,nextIndex; ~Cursor_rep(); virtual int isDone() const; virtual const Item& currentItem() const; virtual void advance(); }; friend class BCursor_rep; virtual Cursor_rep *makeCursorRep() const; virtual int cursor_isDone(const BCursor_rep *c) const; virtual const Item& cursor_currentItem(const BCursor_rep *c) const; virtual void cursor_advance(BCursor_rep *c) const; virtual void cursor_unlink(BCursor_rep *c) const; BCursor_rep *firstCursor; }; #include "boundedset.cpp" #endif