<> <> <> <> <> <> <<>> DIRECTORY CD, Core, CoreGeometry; SinixIntervals: CEDAR DEFINITIONS = BEGIN Interval: TYPE = RECORD [min, max: INT]; <> <> <<>> universe: Interval = [FIRST[INT], LAST[INT]]; empty: Interval = [LAST[INT], FIRST[INT]]; Table: TYPE = REF TableRec; TableRec: TYPE = MONITORED RECORD [ range: Interval, -- given at creation time, it retains the range of all intervals. Clients should not change this field. leafBuckets: PRIVATE NAT, -- private field to detect when ReHashing is necessary. data: PRIVATE REF TableData ]; TableData: PRIVATE TYPE = RECORD [c: SEQUENCE hashSize: NAT OF LIST OF IW]; <> IW: TYPE = RECORD [instance: CoreGeometry.Instance, wire: Core.Wire]; Create: PROC [range: Interval, logHashSize: NAT _ 2] RETURNS [Table]; <> Insert: PROC [table: Table, instance: CoreGeometry.Instance, wire: Core.Wire]; <> <> <> <> Enumerate: PROC [table: Table, action: PROC [CoreGeometry.Instance, Core.Wire], interval: Interval _ universe]; <> <> <> <> <> DeleteOutside: PROC [table: Table, interval: Interval]; <> <> <> <> END.