//=========================================================================== // Class declaration for data items. // A. Fischer, May 29, 2001 file: item.hpp //=========================================================================== #pragma once #include #include "ordered.hpp" //-------------------------------------------------------------------------- template class Item: public Ordered { private: T* base; public: Item() : base(new T()) {} // called when creating dummy header cell Item(T* dt) : base(dt) {} virtual ~Item() { if (base==nullptr) cout << " Deleting nullptr Item\n"; else { cout << " Deleting Item " << base->key() << "\n"; delete base; } } void voidItem() { base=nullptr; } // Call before deletion to protect base operator T*() { return base; } // Cast Item to T* ostream& print(ostream& out) const { return base->print(out); } // Promises fulfillment typename T::KeyType key() const { return base->key(); } bool operator==(const typename T::KeyType& k) const { return base->key() == k; } bool operator<(const typename T::KeyType& k) const { return base->key() < k; } }; //--------------------------------------------------------------------------- template inline ostream& operator <<(ostream& out, const Item& it) { return it.print(out); }