/* Copyright 1995 J"orn Rennecke */
#include "alloc.h"
#include "uid.h"
#include "object.h"
struct uid nil_uid;
union svalue all_uids;	/* mapping holding all uids */
void initialize_uids() {
    nil_object.x.uid = &nil_uid;
    nil_uid.self = &nil_uid;
    all_uids =
      allocate_mapping(0, 1 + sizeof(struct uid)/sizeof(union svalue),
	TO_SVALUE(&nil_object));
}
struct uid *add_uid(union svalue name) {
    union svalue *svp;
    struct uid *uid;
    svp = get_map_lvalue(all_uids, name, 1);
    uid = (struct uid *)&svp[1];
    if (!(p_int)uid->self) {
	((uint8 *)uid)[-3] = IT_X_UID;
	uid->self = uid;
	uid->name = COPY_SVALUE(name);
    }
    return uid;
}
struct uid *find_uid(union svalue name) {
    union svalue *svp;
    svp = get_map_lvalue(all_uids, name, 0);
    return !svp->i ? 0 : (struct uid *)svp;
}