<> <> DIRECTORY LichenDataStructure, IO; LichenTransforms: CEDAR DEFINITIONS = BEGIN OPEN LichenDataStructure; <> IntroCellType: PROC [design: Design] RETURNS [newCT: CellType]; <> <> ExtroCellType: PROC [design: Design, oldCT: CellType]; <> <> Differentiate: PROC [design: Design, uses: ConstSet--of Use of oldCT--] RETURNS [newCT: CellType]; <> <> Undifferentiate: PROC [design: Design, toType, fromType: CellType] RETURNS [changed: ConstSet--of Use of fromType--]; <> <> LowerChildren: PROC [design: Design, childType: CellType, sibber: ConstFunction--instance of array*n of childType sibling: instance of array*n of type of gcs[role])--] RETURNS [gcs: Seq--role <> <> RaiseGrandchildren: PROC [design: Design, gcs: Seq--role ConstFunction--instance of array*n of childType ConstFunction--array*n of childType <> <> MergeTypes: PROC [design: Design, pairs: ConstOneToOne--instance of array* of from <> <> <]; LowerChildren[into, pairs-1gsibber]; ExtroCellType[from].>> SplitType: PROC [design: Design, fizz: ConstSet--of instance in from--] RETURNS [from, to: CellType, pairs: ConstOneToOne--instance of array* of from <> <> <}]; [from, sibber]_RaiseGrandchildren[fizz]; LowerChildren[to, pairs-1gsibber].>> GroupUnorganized: PROC [design: Design, mapper: ConstFunction--any roleth child)--] RETURNS [newType: CellType, pairs: ConstOneToOne--domain of mapper Seq--role <> <> <}]; gcs _ LowerChildren[newType, pairs-1gmapper].>> ExpandUnorganized: PROC [design: Design, cellType: CellType] RETURNS [mapper: ConstFunction--instance of array*n of cellType (role <> <> <]; ExtroCellType[cellType].>> ExpandVertex: PROC [child: CellInstance] RETURNS [roleToSib: Seq--role <> <> ExpandChildren: PROC [design: Design, parent: CellType, flatten: BOOL _ FALSE]; <> Flatten: PROC [root: CellType, expand: ConstFilter--of CellInstance--]; <> END.