Copyright (C) 1992, Digital Equipment Corporation
All rights reserved.
See the file COPYRIGHT for a full description.
Last modified on Fri Oct 2 11:39:28 PDT 1992 by msm
modified on Mon Feb 24 13:57:19 PST 1992 by muller
modified on Fri Sep 6 17:25:31 PDT 1991 by gnelson
<*PRAGMA LL*>
MODULE MiscDetail;
VAR mu := NEW(MUTEX);
tbl := NEW(REF ARRAY OF REFANY, 0);
PROCEDURE FromRef (ra: REFANY): INTEGER =
BEGIN
IF ra = NIL THEN RETURN -1 END;
LOCK mu DO
FOR i := 0 TO LAST(tbl^) DO
IF tbl[i] = NIL THEN tbl[i] := ra; RETURN i END
END;
VAR
n := NUMBER(tbl^);
new := NEW(REF ARRAY OF REFANY, MAX(4, 2 * n));
BEGIN
SUBARRAY(new^, 0, n) := tbl^;
FOR i := n TO LAST(new^) DO new[i] := NIL END;
new[n] := ra;
tbl := new;
RETURN n
END
END
END FromRef;
PROCEDURE ToRef (i: INTEGER): REFANY =
BEGIN
LOCK mu DO
IF i < 0 OR i > LAST(tbl^) THEN RETURN NIL END;
RETURN tbl[i]
END
END ToRef;
PROCEDURE Delete(i: INTEGER) =
BEGIN
LOCK mu DO
IF i < 0 OR i > LAST(tbl^) THEN RETURN END;
tbl[i] := NIL
END
END Delete;
BEGIN
END MiscDetail.