public int GetId(object obj)
{
lock (locker) {
var reference = new ObjectReference(obj);
int id;
if (objToId.TryGetValue(reference, out id)) {
return id;
}
else {
var new_id = AllocateId();
objToId.Add(reference, new_id);
return new_id;
}
}
}