// ------------- node.h #ifndef NODE_H #define NODE_H typedef unsigned NodeNbr; const int nodelength = 128; const int nodedatalength = nodelength - sizeof(NodeNbr); const int fileheadersize = sizeof(NodeNbr) * 2; // ============================ // Node File Header Record // ============================ class FileHeader { NodeNbr deletednode; // first deleted node NodeNbr highestnode; // highest assigned node NodeNbr origdeletednode; // original first deleted node NodeNbr orighighestnode; // original highest assigned node protected: fstream nfile; Bool newfile; // true if building new node file public: FileHeader(String filename); virtual ~FileHeader(); void SetDeletedNode(NodeNbr node) { deletednode = node; } NodeNbr DeletedNode() { return deletednode; } void SetHighestNode(NodeNbr node) { highestnode = node; } NodeNbr HighestNode() { return highestnode; } NodeNbr NewNode(); fstream& Nfile() { return nfile; } void ResetNewFile() { newfile = False; } }; // ============================ // Node Record // ============================ class Node { NodeNbr nextnode; protected: FileHeader *owner; NodeNbr nodenbr; // current node number Bool nodechanged; // true if the node changed Bool deletenode; // true if the node is being deleted public: Node(FileHeader *hd = NULL, NodeNbr node = 0); virtual ~Node(); Node& operator=(Node &node); void SetNextNode(NodeNbr node) { nextnode = node; MarkNodeChanged(); } NodeNbr NextNode() { return nextnode; } void SetNodeNbr(NodeNbr node) { nodenbr = node; } NodeNbr GetNodeNbr() { return nodenbr; } void MarkNodeDeleted() { deletenode = True; } void MarkNodeChanged() { nodechanged = True; } Bool NodeChanged() { return nodechanged; } long NodeAddress(); virtual int NodeHeaderSize() { return sizeof(NodeNbr); } }; #endif