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