home *** CD-ROM | disk | FTP | other *** search
- /*
- * Name abstract class
- *
- * Generic name class. Used frequently with NameSpace &
- * CLisp Symbols.
- *
- * Instances created with the class method "new" form a
- * proper set - the same name string will yield the same
- * Name object. This allows == comparisons for name equality
- * rather than "equal".
- *
- * Copyright © John Wainwright 1988
- *
- * SuperClasses :
- * String
- * Instance Vars :
- *
- * Class Vars :
- * nameSet
- * Methods :
- * hashOf
- * Class Methods :
- * declare s - declare s as a Name - return
- * Name object for this string.
- */
-
- #include "oic.h"
- #include "generics.h"
- #include "names.h"
-
- class Name; /* the Name class */
-
- struct Name_c /* Name instance structure */
- {
- object nameSet; /* nameset hashtable */
- };
- typedef struct Name_c Name_c;
-
- /* -------------------- Name Instance methods ----------------- */
-
- /* ---------------------- Name Class methods ------------------ */
-
- method object
- _declare(class, cv, name)
- class class;
- register Name_c *cv;
- register char **name;
- {
- register object o, n;
-
- if (cv->nameSet == NULL)
- cv->nameSet = New(HashTable, 127, 0);
-
- n = New(Name, *name);
- o = get(cv->nameSet, n);
- if (o == NULL)
- {
- bind(cv->nameSet, n, n);
- return n;
- }
- else
- {
- dispose(n);
- return o;
- }
- }
-
- /* ------------------- Init the Name class -------------------- */
-
- InitNameClass()
- {
- Name = NewClass(0, sizeof(Name_c), "Name", String, END);
- AddClassMethods(Name,
- declareGeneric, _declare,
- END);
- }
-
- InitNameClasses()
- {
- InitNameClass();
- InitBindingClass();
- InitHashTableClass();
- InitNameSpaceClass();
- InitNameMixinClass();
- InitNameTable();
- }
-