<> <> <> <<>> <> <<>> DIRECTORY CD, Core, CoreGeometry, RefTab; Bagness: CEDAR DEFINITIONS = PUBLIC BEGIN TouchProc: TYPE = CoreGeometry.TouchProc; Transformation: TYPE = CoreGeometry.Transformation; Rect: TYPE = CD.Rect; <> <> <<>> Instance: TYPE = CoreGeometry.Instance; Instances: TYPE = CoreGeometry.Instances; Bag: TYPE = RECORD [ head, tail: Instances, bbox: Rect ]; Bags: TYPE = LIST OF Bag; BagList: TYPE = RECORD [ bags: Bags, bbox: Rect]; <> BagKeepProc: TYPE = PROC [bag: Bag] RETURNS [keep: BOOL _ TRUE]; BagIsNotEmpty: PROC [bag: Bag] RETURNS [BOOL]; <> <<>> BagTouchesInstance: PROC [bag: Bag, instance: Instance, touch: TouchProc] RETURNS [BOOL]; <> <<>> BagTouchesBag: PROC [bag1, bag2: Bag, touch: TouchProc] RETURNS [BOOL]; <> <<>> CreateBag: PROC [] RETURNS [Bag]; <> InsertInstance: PROC [bag: Bag, instance: Instance] RETURNS [Bag]; <> <<>> BagAppend: PROC [onto, from: Bag] RETURNS [Bag]; <> <<>> BagPrune: PROC [bag: Bag, keep: InstKeepProc] RETURNS [Bag]; <> <<>> TransformBag: PROC [bag: Bag, trans: Transformation] RETURNS [Bag]; <> <> InstKeepProc: TYPE = PROC [instance: Instance] RETURNS [keep: BOOL _ TRUE]; BagCount: PROC [bagList: BagList] RETURNS [NAT]; <> CreateBagList: PROC [] RETURNS [BagList]; <> InsertBag: PROC [bagList: BagList, bag: Bag] RETURNS [BagList]; <> <<>> TransformBagList: PROC [bagList: BagList, trans: Transformation] RETURNS [BagList]; <> FuseInstance: PROC [bagList: BagList, instance: Instance, touch: TouchProc] RETURNS [BagList]; <> FuseBagList: PROC [bagList1, bagList2: BagList, touch: TouchProc] RETURNS [BagList]; <> MergeBagList: PROC [bagList1, bagList2: BagList] RETURNS [BagList]; <> <<>> PruneInstances: PROC [bagList: BagList, keep: InstKeepProc] RETURNS [BagList]; <> <> InstTab: TYPE = RefTab.Ref; Val: TYPE = RefTab.Val; <> InstTabCreate: PROC [mod: NAT _ 17] RETURNS [InstTab]; <> InstTabFetch: PROC [instTab: InstTab, inst: Instance] RETURNS [found: BOOL, val: Val]; <> InstTabReplace: PROC [instTab: InstTab, inst: Instance, val: Val _ NIL] RETURNS [BOOL]; <> <> InstTabDelete: PROC [instTab: InstTab, inst: Instance] RETURNS [BOOL]; <> <> InstTabInsert: PROC [instTab: InstTab, inst: Instance, val: Val _ NIL] RETURNS [BOOL]; <> <> <<>> END.