 
#ifndef set_DEFINED
#define set_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 set.ch and will be
 * overwritten.  Make changes to set.ch instead.
 */ 
 
/* 
 * The following information was copied, as-is, from set.ch.
 */ 
 





/* 
 * End of information copied from set.ch.
 */ 
 
/* 
 * Include the superclass information
 */ 
/* set has no super class */ 
 
 
/* 
 * Data structure for set 
 */ 
struct set { 
    struct {
	struct basicobject_methods *set_methods;
    } header;
    int (*compare)(/* void *key1, void *key2 */);
    void *(*keycopy)(/* void *key */);
    void (*keyfree)(/* void *key */);
    void *(*valuecopy)(/* void *value */);
    void (*valuefree)(/* void *value */);
    long numberOfEntries;

};

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


#ifndef set_PROGRAMMERVERSION
#define set_PROGRAMMERVERSION 1
#endif /* set_PROGRAMMERVERSION */

#ifdef set_VERSION
#undef set_VERSION
#endif /* set_VERSION */
#define set_VERSION ((((set_PROGRAMMERVERSION << 16) ^ (8 << 8) ^ sizeof(struct set)) & 0x7ffff) + 0x80000 + (1 << 20))

#define set_StaticLoadOnlyThisClass()  \
{ extern struct classinfo *set__GetClassInfo(); \
  (void) class_EnterInfo(NULL, set_classheader.name, set__GetClassInfo, NULL, set_classheader.namekey); } 
 
#define set_StaticLoad()  \
    { \
    set_StaticLoadOnlyThisClass();  \
    } 
 
#define set_StaticEntry  {set_StaticLoad()} 
 
static struct classheader set_classheader = {
    set_VERSION,
    "set",
    "set",
    (struct basicobject_methods *) &class_RoutineStruct,
};


#endif /* set_DEFINED */

#if !defined(set_ROUTINESDEFINED) && !defined(dontDefineRoutinesFor_set) && !defined(class_StaticEntriesOnly)
#define set_ROUTINESDEFINED

#define set_NumberOfEntries(self) \
 ((self)->numberOfEntries)
#define set_SetNumberOfEntries(self,value) \
 ((self)->numberOfEntries = value)
#define set_IncrementNumberOfEntries(self,numberOfEntries) \
 
#define set_DecrementNumberOfEntries(self,numberOfEntries) \
 
#define set_SetCompareFunction(self,comparefunc) \
 ((self)->compare = comparefunc)
#define set_SetKeyCopyFunction(self,copyfunc) \
 ((self)->keycopy = copyfunc)
#define set_SetKeyFreeFunction(self,freefunc) \
 ((self)->keyfree = freefunc)
#define set_SetValueCopyFunction(self,copyfunc) \
 ((self)->valuecopy = copyfunc)
#define set_SetValueFreeFunction(self,freefunc) \
 ((self)->valuefree = freefunc)
#define set_GetCompareFunction(self) \
 ((self)->compare)
#define set_GetKeyCopyFunction(self) \
 ((self)->keycopy)
#define set_GetKeyFreeFunction(self) \
 ((self)->keyfree)
#define set_GetValueCopyFunction(self) \
 ((self)->valuecopy)
#define set_GetValueFreeFunction(self) \
 ((self)->valuefree)
#define set_Lookup(self,key,element) \
    ((* ((boolean (*)())((self)->header.set_methods->routines[0]))) (self,key,element))
#define set_Insert(self,element) \
    ((* ((void (*)())((self)->header.set_methods->routines[1]))) (self,element))
#define set_Remove(self,key,retKey,retValue) \
    ((* ((boolean (*)())((self)->header.set_methods->routines[2]))) (self,key,retKey,retValue))
#define set_Delete(self,key) \
    ((* ((void (*)())((self)->header.set_methods->routines[3]))) (self,key))
#define set_GetList(self,include,rock,count) \
    ((* ((struct extendedlist * (*)())((self)->header.set_methods->routines[4]))) (self,include,rock,count))
#define set_ForEach(self,stopfunc,rock) \
    ((* ((void * (*)())((self)->header.set_methods->routines[5]))) (self,stopfunc,rock))
#define set_Prune(self,include,rock) \
    ((* ((void (*)())((self)->header.set_methods->routines[6]))) (self,include,rock))
#define set_Clear(self) \
    ((* ((void (*)())((self)->header.set_methods->routines[7]))) (self))

#define set_NewFromObject(self) \
    ((* ((struct set * (*)())((self)->header.set_methods->info->procs->routines[0]))) (&set_classheader, (self)->header.set_methods->info->versionnumber))
#define set_New() \
    (set__New(NULL, set_VERSION))
#define set_Initialize(self) \
    (set__Initialize(NULL, self, set_VERSION))

#define set_Destroy(self) \
    ((* ((void (*)()) ((self)->header.set_methods->info->procs->routines[1]))) (&set_classheader, self))
#define set_Finalize(self) \
    (set__Finalize(NULL, self))

#define set_InitializeObject(self) \
    ((boolean) set__InitializeObject(NULL, self))
#define set_FinalizeObject(self) \
    ((void) set__FinalizeObject(NULL, self))


#endif /* !defined(set_ROUTINESDEFINED) && !defined(dontDefineRoutinesFor_set ) && !defined(class_StaticEntriesOnly)*/



#ifndef AUXMODULE

struct set_methods {
    struct classinfo *info;
    long (*routines[8])();
};

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

boolean set__Lookup();
void set__Insert();
boolean set__Remove();
void set__Delete();
struct extendedlist * set__GetList();
void * set__ForEach();
void set__Prune();
void set__Clear();

static struct set_methods set_methodtable = {
    NULL,
    (long (*)()) set__Lookup,
    (long (*)()) set__Insert,
    (long (*)()) set__Remove,
    (long (*)()) set__Delete,
    (long (*)()) set__GetList,
    (long (*)()) set__ForEach,
    (long (*)()) set__Prune,
    (long (*)()) set__Clear
};

struct set *set__New();
void set__Destroy();
boolean set__Initialize();
void set__Finalize();
boolean set__InitializeObject();
void set__FinalizeObject();

static struct set_classprocedures set_classproceduretable = {
    NULL,
    (long (*)()) set__New,
    (long (*)()) set__Destroy,
    (long (*)()) set__Initialize,
    (long (*)()) set__Finalize,
    (long (*)()) set__InitializeObject,
    (long (*)()) set__FinalizeObject
};


static struct classinfo set_classinfo = {
    (struct basicobject_methods *) &set_methodtable,
    (struct basicobject_methods *) &set_classproceduretable,
    "set",
    "set",
    set_VERSION,
    NULL,
    NULL,
    NULL,
    NULL,
    &set_classheader,
    NULL,
    0
};

static int classinitialized = FALSE;

boolean set__Initialize(classID, self, versionnumber)
struct classheader *classID;
struct set *self;
unsigned long versionnumber;
{
    if (! classinitialized)  {
	classinitialized = TRUE;
	set_methodtable.info = &set_classinfo;
    }
    self->header.set_methods = (struct basicobject_methods *) &set_methodtable;
    if(!set__InitializeObject(classID, self)){
	return FALSE;
    }
    return TRUE;
}

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

void set__Finalize(classID, self)
struct classheader *classID;
struct set *self;
{
    set__FinalizeObject(classID, self);
}

void set__Destroy(classID, self)
struct classheader *classID;
struct set *self;
{
    set__Finalize(classID, self);
    free(self);
}

struct classinfo *set__GetClassInfo(classID, versionnumber)
struct classheader *classID;
unsigned long versionnumber;
{
    if (versionnumber != class_VERSIONNOTKNOWN && versionnumber != set_VERSION)  {
	(void) fprintf(stderr, "Incompatible version of set requested!\n");
    }
    set_classproceduretable.info = &set_classinfo;
    return &set_classinfo;
}

/* 
 * THIS IS NEEDED BECAUSE OF THE WAY makedo WORKS.
 * HOPEFULLY, IT CAN BE REMOVED SOON.
 */ 
 
/* this patch is not needed as the class name is the same as the file name */
 
/* 
 * END OF THIS PATCH. 
 */ 
 
#endif /* AUXMODULE */
