// ------------- key.h #ifndef KEY_H #define KEY_H #include "parody.h" // ============================ // Key abstract base class // ============================ class Key : public LinkedListEntry { NodeNbr fileaddr; // object node address -> by this key NodeNbr lowernode; // lower node of keys > this key int classid; // class id for this key int indexno; // 0=primary key, > 0=secondary key int relatedclass; // id of class related by this key Persistent *object; // object being indexed virtual Key *Make() = 0; friend class Btree; friend class TNode; friend class Persistent; protected: Key(NodeNbr fa = 0); virtual ~Key() { /* null */ } virtual int operator> (Key& key) = 0; virtual int operator== (Key& key) = 0; virtual Key& operator=(Key& key); virtual void Write(fstream& bfile) = 0; virtual void Read(fstream& bfile) = 0; virtual Bool isNullValue() = 0; public: void PrimaryKey(); void Relate(int cid) { relatedclass = cid; } void FindObject() { object->FindObject(this); } void FirstObject() { object->FirstObject(this); } void LastObject() { object->LastObject(this); } void NextObject() { object->NextObject(this); } void PreviousObject() { object->PreviousObject(this); } }; #endif