// ------------- key.cpp

#include "parody.h"

// ============================================
// base Key class member functions
// ============================================

Key::Key(NodeNbr fa) : LinkedListEntry(NULL)
{
	fileaddr = fa;
	lowernode = 0;
	relatedclass = -1;
	classid = 0;
	indexno = 0;
	if (Persistent::thispers != NULL)	{
		// --- register the key with the object being built
		object = Persistent::thispers;
		AppendListEntry(&object->keys);
		classid = object->objhdr.classid;
		indexno = object->indexcount++;
	}
}

// ------ overloaded =
Key& Key::operator=(Key& key)
{
	if (this != &key)	{
		fileaddr = key.fileaddr;
		lowernode = key.lowernode;
		indexno = key.indexno;
		classid = key.classid;
		relatedclass = key.relatedclass;
	}
	return *this;
}

// --------- a key declares itself primary
void Key::PrimaryKey()
{
	if (indexno != 0 && Persistent::thispers != NULL)	{
		DeleteListEntry();
		PrependListEntry();
		Key *key = (Key *) NextListEntry();
		while (key != NULL)	{
			if (++(key->indexno) == indexno)
				break;
			key = (Key *)(key->NextListEntry());
		}
		indexno = 0;
		Persistent::thispers->RecordObject();
	}
}

