DIRECTORY BiRels, SetBasics, AbSets; SetInsulationImpl: CEDAR PROGRAM IMPORTS BiRels, SetBasics, AbSets EXPORTS AbSets = BEGIN OPEN SetBasics, BiRels, Sets:AbSets, Sets; DefaultInsulate: PUBLIC PROC [set: Set] RETURNS [UWSet] ~ { RETURN AsUW[[insClass, [a[set.Refify]]]]}; insClass: SetClass ~ CreateClass[[ Primitive: InsulatePrimitive, HasMember: InsulateHasMember, Scan: InsulateScan, TheElt: InsulateTheElt, GetOne: InsulateGetOne, Get3: InsulateGet3, Size: InsulateSize, IsDense: InsulateIsDense, GetBounds: InsulateGetBounds, Copy: InsulateCopy, ValueOf: InsulateValueOf, QuaBiRel: InsulateQuaBiRel, QuaIntInterval: InsulateQuaIntInterval, SpaceOf: InsulateSpaceOf, mutability: readonly]]; InsulatePrimitive: PROC [set: Set, op: ATOM, arg1, arg2: REF ANY] RETURNS [PrimitiveAnswer] ~ { subj: Set ~ DeRef[set.data.VA]; IF QualityOf[subj, op, arg1, arg2]=primitive THEN RETURN [yes]; SELECT op FROM $Insulate, $Freeze, $Thaw, $AddSet, $RemoveSet => RETURN [yes]; ENDCASE => RETURN [no]; }; InsulateHasMember: PROC [set: Set, elt: Value] RETURNS [BOOL] ~ { subj: Set ~ DeRef[set.data.VA]; RETURN subj.HasMember[elt]}; InsulateScan: PROC [set: Set, Test: Tester, ro: RelOrder] RETURNS [MaybeValue] ~ { subj: Set ~ DeRef[set.data.VA]; RETURN subj.Scan[Test, ro]}; InsulateTheElt: PROC [set: Set] RETURNS [Value] ~ { subj: Set ~ DeRef[set.data.VA]; RETURN subj.TheElt[]}; InsulateGetOne: PROC [set: Set, remove: BOOL, ro: RelOrder] RETURNS [MaybeValue] ~ { subj: Set ~ DeRef[set.data.VA]; IF remove THEN set.Complain[notVariable]; RETURN subj.class.GetOne[subj, remove, ro]}; InsulateGet3: PROC [set: Set, elt: Value, want: TripleBool] RETURNS [TripleMaybeValue] ~ { subj: Set ~ DeRef[set.data.VA]; RETURN subj.Get3[elt, want]}; InsulateSize: PROC [set: Set, limit: EINT] RETURNS [EINT] ~ { subj: Set ~ DeRef[set.data.VA]; RETURN subj.Size[limit]}; InsulateIsDense: PROC [set: Set, when: When] RETURNS [BOOL] ~ { subj: Set ~ DeRef[set.data.VA]; RETURN subj.IsDense[when]}; InsulateGetBounds: PROC [set: Set, want: EndBools] RETURNS [MaybeInterval] ~ { subj: Set ~ DeRef[set.data.VA]; RETURN subj.GetBounds[want]}; InsulateCopy: PROC [set: Set] RETURNS [VarSet] ~ { subj: Set ~ DeRef[set.data.VA]; RETURN subj.Copy[]}; InsulateValueOf: PROC [set: Set] RETURNS [ConstSet] ~ { subj: Set ~ DeRef[set.data.VA]; RETURN subj.ValueOf[]}; InsulateQuaBiRel: PROC [set: Set] RETURNS [found: BOOL, class, data: REF ANY] ~ { subj: Set ~ DeRef[set.data.VA]; mbr: MaybeBiRel ~ SetQuaBiRel[subj]; IF NOT mbr.found THEN RETURN [FALSE, badBiRel.class, badBiRel.data]; {ibr: BiRel ~ mbr.it.Insulate[]; RETURN [TRUE, ibr.class, ibr.data]}}; InsulateQuaIntInterval: PROC [set: Set] RETURNS [MaybeIntInterval] ~ { subj: Set ~ DeRef[set.data.VA]; RETURN subj.QuaIntInterval[]}; InsulateSpaceOf: PROC [set: Set] RETURNS [Space] ~ { subj: Set ~ DeRef[set.data.VA]; RETURN subj.SpaceOf[]}; END. bSetInsulationImpl.Mesa Last tweaked by Mike Spreitzer on December 14, 1987 11:13:03 am PST Κ– "cedar" style˜code™KšœC™C—K˜KšΟk œ˜$K˜šΟnœœ˜ Kšœ˜!Kšœ˜K˜—K˜Kšœœ&˜0K˜šžœœœ œ ˜;Kšœ$˜*—K˜šœ"˜"Kšž œ˜Kšž œ˜Kšžœ˜Kšžœ˜Kšžœ˜Kšžœ˜Kšžœ˜Kšžœ˜Kšž œ˜Kšžœ˜Kšžœ˜Kšžœ˜Kšžœ˜'Kšžœ˜Kšœ˜—K˜K˜š žœœœœœœ˜_Kšœœ˜Kšœ+œœ˜?šœ˜Kšœ2œ˜?Kšœœ˜—K˜—K˜šžœœœœ˜AKšœœ˜Kšœ˜—K˜šž œœ žœœ˜RKšœœ˜Kšœ˜—K˜šžœœ œ ˜3Kšœœ˜Kšœ˜—K˜šžœœœœ˜TKšœœ˜Kšœœ˜)Kšœ&˜,—K˜šž œœ*œ˜ZKšœœ˜Kšœ˜—K˜š ž œœœœœ˜=Kšœœ˜Kšœ˜—K˜šžœœœœ˜?Kšœœ˜Kšœ˜—K˜šžœœœ˜NKšœœ˜Kšœ˜—K˜šž œœ œ ˜2Kšœœ˜Kšœ˜—K˜šžœœ œ˜7Kšœœ˜Kšœ˜—K˜š žœœ œ œœœ˜QKšœœ˜Kšœ$˜$Kš œœ œœœ!˜DK˜ Kšœœ˜%—K˜šžœœ œ˜FKšœœ˜Kšœ˜—K˜šžœœ œ ˜4Kšœœ˜Kšœ˜—K˜Kšœ˜—…— LΏ