<> <> DIRECTORY Basics, HashCollectionsPrivate, Collections, PrincOps, Rope; HashCollectionsPublicImpl: CEDAR PROGRAM IMPORTS HashCollectionsPrivate, Collections EXPORTS Collections = BEGIN OPEN HashCollectionsPrivate, Collections; initSize: NAT ~ 5; IsHash: PUBLIC PROC [coll: Collection] RETURNS [BOOL] ~ {RETURN [ISTYPE[coll.data, HashColl]]}; CreateHashSet: PUBLIC PROC [space: Space _ refs] RETURNS [HashSet] ~ { realSpace: Space ~ IF space=NIL THEN refs ELSE space; hc: HashColl ~ NEW [HashCollPrivate _ [ space: realSpace, sizeLimit: initSize, elts: NEW [Seq[initSize]] ]]; coll: Collection ~ [classes[variable], hc]; RETURN [coll.AsVar]; }; CreateHashCopy: PUBLIC PROC [coll: Collection, space: Space _ NIL--NIL means to use the same space as the given collection--] RETURNS [HashSet] ~ { copy: Collection ~ CreateHashSet[IF space=NIL THEN coll.SpaceOf ELSE space]; [] _ copy.AddColl[coll]; RETURN [copy.AsVar]; }; CreateHashSetFromProc: PUBLIC PROC [Produce: PROC [Consume: PROC [Value]], space: Space _ refs] RETURNS [HashSet] ~ { copy: HashSet ~ CreateHashSet[space]; Consume: PROC [elt: Value] ~ {[] _ copy.AddElt[elt]}; Produce[Consume]; RETURN [copy]; }; END.