 
#ifndef orderedlistkeyset_DEFINED
#define orderedlistkeyset_DEFINED 1
 
#include <class.h>
/* 
 * This file was generated by the Andrew class system preprocessor.
 * Don't make changes to this file as it is created from ordkeyset.ch and will be
 * overwritten.  Make changes to ordkeyset.ch instead.
 */ 
 
/* 
 * The following information was copied, as-is, from ordkeyset.ch.
 */ 
 







/* 
 * End of information copied from ordkeyset.ch.
 */ 
 
/* 
 * Include the superclass information
 */ 
#define dontDefineRoutinesFor_listkeyset
#include "lstkeyset.ih"
#undef dontDefineRoutinesFor_listkeyset

 
 
/* 
 * Data structure for orderedlistkeyset 
 */ 
struct orderedlistkeyset { 
    union {
	struct basicobject_methods *orderedlistkeyset_methods;
	struct keyset keyset;
	struct listkeyset listkeyset;
    } header;


};

 
/* 
 * End of data structure for orderedlistkeyset.
 */ 
 


#ifndef orderedlistkeyset_PROGRAMMERVERSION
#define orderedlistkeyset_PROGRAMMERVERSION 1
#endif /* orderedlistkeyset_PROGRAMMERVERSION */

#ifdef orderedlistkeyset_VERSION
#undef orderedlistkeyset_VERSION
#endif /* orderedlistkeyset_VERSION */
#define orderedlistkeyset_VERSION ((((orderedlistkeyset_PROGRAMMERVERSION << 16) ^ (14 << 8) ^ sizeof(struct orderedlistkeyset)) & 0x7ffff) + 0x80000 + (1 << 20))

#define orderedlistkeyset_StaticLoadOnlyThisClass()  \
{ extern struct classinfo *orderedlistkeyset__GetClassInfo(); \
  (void) class_EnterInfo(NULL, orderedlistkeyset_classheader.name, orderedlistkeyset__GetClassInfo, NULL, orderedlistkeyset_classheader.namekey); } 
 
#define orderedlistkeyset_StaticLoad()  \
    { \
    listkeyset_StaticLoad(); \
    orderedlistkeyset_StaticLoadOnlyThisClass();  \
    } 
 
#define orderedlistkeyset_StaticEntry  {orderedlistkeyset_StaticLoad()} 
 
static struct classheader orderedlistkeyset_classheader = {
    orderedlistkeyset_VERSION,
    "orderedlistkeyset",
    "ordkeyset",
    (struct basicobject_methods *) &class_RoutineStruct,
};


#endif /* orderedlistkeyset_DEFINED */

#if !defined(orderedlistkeyset_ROUTINESDEFINED) && !defined(dontDefineRoutinesFor_orderedlistkeyset) && !defined(class_StaticEntriesOnly)
#define orderedlistkeyset_ROUTINESDEFINED

#define orderedlistkeyset_NumberOfElements(self) \
 ((&(self)->header.keyset)->numberOfElements)
#define orderedlistkeyset_SetNumberOfElements(self,value) \
 ((&(self)->header.keyset)->numberOfElements = value)
#define orderedlistkeyset_IncrementNumberOfElements(self) \
 ((&(self)->header.keyset)->numberOfElements++)
#define orderedlistkeyset_DecrementNumberOfElements(self) \
 ((&(self)->header.keyset)->numberOfElements--)
#define orderedlistkeyset_SetCompareFunction(self,comparefunc) \
 ((&(self)->header.keyset)->compare = comparefunc)
#define orderedlistkeyset_SetKeyCopyFunction(self,copyfunc) \
 ((&(self)->header.keyset)->keycopy = copyfunc)
#define orderedlistkeyset_SetKeyFreeFunction(self,freefunc) \
 ((&(self)->header.keyset)->keyfree = freefunc)
#define orderedlistkeyset_SetValueCopyFunction(self,copyfunc) \
 ((&(self)->header.keyset)->valuecopy = copyfunc)
#define orderedlistkeyset_SetValueFreeFunction(self,freefunc) \
 ((&(self)->header.keyset)->valuefree = freefunc)
#define orderedlistkeyset_GetCompareFunction(self) \
 ((&(self)->header.keyset)->compare)
#define orderedlistkeyset_GetKeyCopyFunction(self) \
 ((&(self)->header.keyset)->keycopy)
#define orderedlistkeyset_GetKeyFreeFunction(self) \
 ((&(self)->header.keyset)->keyfree)
#define orderedlistkeyset_GetValueCopyFunction(self) \
 ((&(self)->header.keyset)->valuecopy)
#define orderedlistkeyset_GetValueFreeFunction(self) \
 ((&(self)->header.keyset)->valuefree)
#define orderedlistkeyset_Lookup(self,key,element) \
    ((* ((boolean (*)())((self)->header.orderedlistkeyset_methods->routines[0]))) (self,key,element))
#define orderedlistkeyset_Insert(self,key,element) \
    ((* ((void (*)())((self)->header.orderedlistkeyset_methods->routines[1]))) (self,key,element))
#define orderedlistkeyset_Remove(self,key,retKey,retValue) \
    ((* ((boolean (*)())((self)->header.orderedlistkeyset_methods->routines[2]))) (self,key,retKey,retValue))
#define orderedlistkeyset_Delete(self,key) \
    ((* ((void (*)())((self)->header.orderedlistkeyset_methods->routines[3]))) (self,key))
#define orderedlistkeyset_GetList(self,include,rock) \
    ((* ((struct extendedlist * (*)())((self)->header.orderedlistkeyset_methods->routines[4]))) (self,include,rock))
#define orderedlistkeyset_ForEach(self,stopfunc,rock) \
    ((* ((void * (*)())((self)->header.orderedlistkeyset_methods->routines[5]))) (self,stopfunc,rock))
#define orderedlistkeyset_Prune(self,include,rock) \
    ((* ((void (*)())((self)->header.orderedlistkeyset_methods->routines[6]))) (self,include,rock))
#define orderedlistkeyset_Clear(self) \
    ((* ((void (*)())((self)->header.orderedlistkeyset_methods->routines[7]))) (self))
#define orderedlistkeyset_SetString(self,copyKey,copyValue) \
    ((* ((void (*)())((self)->header.orderedlistkeyset_methods->routines[8]))) (self,copyKey,copyValue))
#define orderedlistkeyset_GetInternalList(self) \
 ((&(self)->header.listkeyset)->list)
#define orderedlistkeyset_FindItem(self,key,findRock) \
    ((* ((long (*)())((self)->header.orderedlistkeyset_methods->routines[9]))) (self,key,findRock))
#define orderedlistkeyset_InsertItem(self,item,findRock) \
    ((* ((void (*)())((self)->header.orderedlistkeyset_methods->routines[10]))) (self,item,findRock))
#define orderedlistkeyset_GetNthValue(self,pos) \
    ((* ((void * (*)())((self)->header.orderedlistkeyset_methods->routines[11]))) (self,pos))
#define orderedlistkeyset_GetNthKey(self,pos) \
    ((* ((void * (*)())((self)->header.orderedlistkeyset_methods->routines[12]))) (self,pos))
#define orderedlistkeyset_ForEachInRange(self,start,stop,stopfunc,rock) \
    ((* ((long (*)())((self)->header.orderedlistkeyset_methods->routines[13]))) (self,start,stop,stopfunc,rock))

#define orderedlistkeyset_NewFromObject(self) \
    ((* ((struct orderedlistkeyset * (*)())((self)->header.orderedlistkeyset_methods->info->procs->routines[0]))) (&orderedlistkeyset_classheader, (self)->header.orderedlistkeyset_methods->info->versionnumber))
#define orderedlistkeyset_New() \
    (orderedlistkeyset__New(NULL, orderedlistkeyset_VERSION))
#define orderedlistkeyset_Initialize(self) \
    (orderedlistkeyset__Initialize(NULL, self, orderedlistkeyset_VERSION))

#define orderedlistkeyset_Destroy(self) \
    ((* ((void (*)()) ((self)->header.orderedlistkeyset_methods->info->procs->routines[1]))) (&orderedlistkeyset_classheader, self))
#define orderedlistkeyset_Finalize(self) \
    (orderedlistkeyset__Finalize(NULL, self))

#define orderedlistkeyset_InitializeObject(self) \
    ((boolean) orderedlistkeyset__InitializeObject(NULL, self))
#define orderedlistkeyset_FinalizeObject(self) \
    ((void) orderedlistkeyset__FinalizeObject(NULL, self))


#endif /* !defined(orderedlistkeyset_ROUTINESDEFINED) && !defined(dontDefineRoutinesFor_orderedlistkeyset ) && !defined(class_StaticEntriesOnly)*/

#define super_NumberOfElements(self)  \
	   listkeyset_NumberOfElements((struct listkeyset *)self)
#define super_SetNumberOfElements(self,value)  \
	   listkeyset_SetNumberOfElements((struct listkeyset *)self,value)
#define super_IncrementNumberOfElements(self)  \
	   listkeyset_IncrementNumberOfElements((struct listkeyset *)self)
#define super_DecrementNumberOfElements(self)  \
	   listkeyset_DecrementNumberOfElements((struct listkeyset *)self)
#define super_SetCompareFunction(self,comparefunc)  \
	   listkeyset_SetCompareFunction((struct listkeyset *)self,comparefunc)
#define super_SetKeyCopyFunction(self,copyfunc)  \
	   listkeyset_SetKeyCopyFunction((struct listkeyset *)self,copyfunc)
#define super_SetKeyFreeFunction(self,freefunc)  \
	   listkeyset_SetKeyFreeFunction((struct listkeyset *)self,freefunc)
#define super_SetValueCopyFunction(self,copyfunc)  \
	   listkeyset_SetValueCopyFunction((struct listkeyset *)self,copyfunc)
#define super_SetValueFreeFunction(self,freefunc)  \
	   listkeyset_SetValueFreeFunction((struct listkeyset *)self,freefunc)
#define super_GetCompareFunction(self)  \
	   listkeyset_GetCompareFunction((struct listkeyset *)self)
#define super_GetKeyCopyFunction(self)  \
	   listkeyset_GetKeyCopyFunction((struct listkeyset *)self)
#define super_GetKeyFreeFunction(self)  \
	   listkeyset_GetKeyFreeFunction((struct listkeyset *)self)
#define super_GetValueCopyFunction(self)  \
	   listkeyset_GetValueCopyFunction((struct listkeyset *)self)
#define super_GetValueFreeFunction(self)  \
	   listkeyset_GetValueFreeFunction((struct listkeyset *)self)
#define super_Lookup(self,key,element)  \
    ((* ((boolean (*)()) (orderedlistkeyset_supermethods->routines[0]))) (self,key,element))
#define super_Insert(self,key,element)  \
    ((* ((void (*)()) (orderedlistkeyset_supermethods->routines[1]))) (self,key,element))
#define super_Remove(self,key,retKey,retValue)  \
    ((* ((boolean (*)()) (orderedlistkeyset_supermethods->routines[2]))) (self,key,retKey,retValue))
#define super_Delete(self,key)  \
    ((* ((void (*)()) (orderedlistkeyset_supermethods->routines[3]))) (self,key))
#define super_GetList(self,include,rock)  \
    ((* ((struct extendedlist * (*)()) (orderedlistkeyset_supermethods->routines[4]))) (self,include,rock))
#define super_ForEach(self,stopfunc,rock)  \
    ((* ((void * (*)()) (orderedlistkeyset_supermethods->routines[5]))) (self,stopfunc,rock))
#define super_Prune(self,include,rock)  \
    ((* ((void (*)()) (orderedlistkeyset_supermethods->routines[6]))) (self,include,rock))
#define super_Clear(self)  \
    ((* ((void (*)()) (orderedlistkeyset_supermethods->routines[7]))) (self))
#define super_SetString(self,copyKey,copyValue)  \
    ((* ((void (*)()) (orderedlistkeyset_supermethods->routines[8]))) (self,copyKey,copyValue))
#define super_GetInternalList(self)  \
	   listkeyset_GetInternalList((struct listkeyset *)self)
#define super_FindItem(self,key,findRock)  \
    ((* ((long (*)()) (orderedlistkeyset_supermethods->routines[9]))) (self,key,findRock))
#define super_InsertItem(self,item,findRock)  \
    ((* ((void (*)()) (orderedlistkeyset_supermethods->routines[10]))) (self,item,findRock))

extern struct basicobject_methods *orderedlistkeyset_supermethods;

#ifndef AUXMODULE

struct basicobject_methods *orderedlistkeyset_supermethods;

struct orderedlistkeyset_methods {
    struct classinfo *info;
    long (*routines[14])();
};

struct orderedlistkeyset_classprocedures {
    struct classinfo *info;
    long (*routines[6])();
};

long orderedlistkeyset__FindItem();
void orderedlistkeyset__InsertItem();
void * orderedlistkeyset__GetNthValue();
void * orderedlistkeyset__GetNthKey();
long orderedlistkeyset__ForEachInRange();

static struct orderedlistkeyset_methods orderedlistkeyset_methodtable = {
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    (long (*)()) orderedlistkeyset__FindItem,
    (long (*)()) orderedlistkeyset__InsertItem,
    (long (*)()) orderedlistkeyset__GetNthValue,
    (long (*)()) orderedlistkeyset__GetNthKey,
    (long (*)()) orderedlistkeyset__ForEachInRange
};

struct orderedlistkeyset *orderedlistkeyset__New();
void orderedlistkeyset__Destroy();
boolean orderedlistkeyset__Initialize();
void orderedlistkeyset__Finalize();
boolean orderedlistkeyset__InitializeObject();
void orderedlistkeyset__FinalizeObject();

static struct orderedlistkeyset_classprocedures orderedlistkeyset_classproceduretable = {
    NULL,
    (long (*)()) orderedlistkeyset__New,
    (long (*)()) orderedlistkeyset__Destroy,
    (long (*)()) orderedlistkeyset__Initialize,
    (long (*)()) orderedlistkeyset__Finalize,
    (long (*)()) orderedlistkeyset__InitializeObject,
    (long (*)()) orderedlistkeyset__FinalizeObject
};


static struct classinfo orderedlistkeyset_classinfo = {
    (struct basicobject_methods *) &orderedlistkeyset_methodtable,
    (struct basicobject_methods *) &orderedlistkeyset_classproceduretable,
    "orderedlistkeyset",
    "ordkeyset",
    orderedlistkeyset_VERSION,
    "listkeyset",
    "lstkeyset",
    NULL,
    NULL,
    &orderedlistkeyset_classheader,
    NULL,
    0
};

static int classinitialized = FALSE;

boolean orderedlistkeyset__Initialize(classID, self, versionnumber)
struct classheader *classID;
struct orderedlistkeyset *self;
unsigned long versionnumber;
{
    /* listkeyset_Initialize(self); */
    if(!(*((boolean (*)()) (listkeyset_classheader.classprocedures->routines[2])))(&listkeyset_classheader,self, listkeyset_VERSION))
	return FALSE;
    if (! classinitialized)  {
	classinitialized = TRUE;
	orderedlistkeyset_supermethods =self->header.orderedlistkeyset_methods;
	{
	    long (**p)() = &(orderedlistkeyset_methodtable.routines[0]);
	    long (**q)() = &(self->header.orderedlistkeyset_methods->routines[0]);
	    long i;

	    for (i = 0; i < 11; i++)  {
		if (*p == NULL)
		    *p = *q;
		p++;
		q++;
	    }
	}
	orderedlistkeyset_classinfo.superclass = orderedlistkeyset_supermethods->info;
	orderedlistkeyset_methodtable.info = &orderedlistkeyset_classinfo;
    }
    self->header.orderedlistkeyset_methods = (struct basicobject_methods *) &orderedlistkeyset_methodtable;
    if(!orderedlistkeyset__InitializeObject(classID, self)){
	/* listkeyset_Finalize(self); */
	(*((void (*)()) (listkeyset_classheader.classprocedures->routines[3])))(&listkeyset_classheader,self);
	return FALSE;
    }
    return TRUE;
}

struct orderedlistkeyset *orderedlistkeyset__New(classID, versionnumber)
struct classheader *classID;
unsigned long versionnumber;
{
    struct orderedlistkeyset *self;
    if (versionnumber != class_VERSIONNOTKNOWN && versionnumber != orderedlistkeyset_VERSION)  {
	(void) fprintf(stderr, "Incompatible version of orderedlistkeyset requested!\n");
    }
    self = (struct orderedlistkeyset *) malloc (sizeof(struct orderedlistkeyset));
    if (! self)  {
	(void) fprintf(stderr, "Could not allocate orderedlistkeyset object!\n");
	return NULL;
    }
    if(!orderedlistkeyset__Initialize(classID, self, versionnumber)){
	free((char *)self);
	return NULL;
    }
    return self;
}

void orderedlistkeyset__Finalize(classID, self)
struct classheader *classID;
struct orderedlistkeyset *self;
{
    orderedlistkeyset__FinalizeObject(classID, self);
    /* listkeyset_Finalize(self); */
    (*((void (*)()) (listkeyset_classheader.classprocedures->routines[3])))(&listkeyset_classheader,self);
}

void orderedlistkeyset__Destroy(classID, self)
struct classheader *classID;
struct orderedlistkeyset *self;
{
    orderedlistkeyset__Finalize(classID, self);
    free(self);
}

struct classinfo *orderedlistkeyset__GetClassInfo(classID, versionnumber)
struct classheader *classID;
unsigned long versionnumber;
{
    if (versionnumber != class_VERSIONNOTKNOWN && versionnumber != orderedlistkeyset_VERSION)  {
	(void) fprintf(stderr, "Incompatible version of orderedlistkeyset requested!\n");
    }
    orderedlistkeyset_classproceduretable.info = &orderedlistkeyset_classinfo;
    return &orderedlistkeyset_classinfo;
}

/* 
 * THIS IS NEEDED BECAUSE OF THE WAY makedo WORKS.
 * HOPEFULLY, IT CAN BE REMOVED SOON.
 */ 
 
struct classinfo *ordkeyset__GetClassInfo(classID, versionnumber)
struct classheader *classID;
unsigned long versionnumber;
{
    return orderedlistkeyset__GetClassInfo(classID, versionnumber);
}
 
/* 
 * END OF THIS PATCH. 
 */ 
 
#endif /* AUXMODULE */
