![]()
class Book
{
public:
Book(void);
~Book(void);
public:
string name_;
string Tag_;
};
class BookList
{
public:
BookList(void);
~BookList(void);
public:
void addBook(const Book *pBook){ bookList_.push_back(pBook); }
void delBook(const Book *pBook){}
IIterator* createIterator(void){ return new Iterator(this, bookList_.size()); }
Book* operator[](int index){ return bookList_[index]; }
public:
vector<Book*> bookList_;
};
template<class ItemT, class ValueTypeT>
class IIterator
{
public:
virtual ~IIterator(void){}
virtual void first(void) = 0;
virtual void next(void) = 0;
virtual ValueTypeT* currentItem(void) = 0;
virtual bool isDone(void) = 0;
};
template <class ItemT, class ValueTypeT>
class ListIterator: public IIterator<ItemT, ValueTypeT>
{
public:
ListIterator(const ItemT *pItem, int size): pItem_(pItem),size_(size),cur_(0){}
~ListIterator(void){}
public:
virtual void first(void){ cur_ = 0; }
virtual void next(void){ ++cur_; }
virtual ValueTypeT* currentItem(void){ return cur_ < size_ ? pItem[cur_] : NULL; }
virtual bool isDone(void){ return cur_ >= size_ ? true : false; }
private:
ItemT *pItem_;
int size_;
int cur_;
};