/* 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;
}