sima/autoconf/
sima/hosts/i386/
sima/mudlib/
sima/mudlib/kernel/
sima/mudlib/obj/
sima/mudlib/sys/
sima/synhash/mips/
/* 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;
}