<> <> DIRECTORY AbSets, BasicTime, BiRels, Convert, IntStuff, LichenDataStructure, LichenIntBasics, List, Rope, SetBasics; LichenDataImpl1C: CEDAR PROGRAM IMPORTS BiRels, IntStuff, SetBasics EXPORTS LichenDataStructure = BEGIN OPEN IB:LichenIntBasics, IB, LichenDataStructure, Sets:AbSets; ClassOfPart: PUBLIC PROC [part: Part] RETURNS [PartClass] ~ { WITH part SELECT FROM p: Port => RETURN [p]; w: Wire => RETURN [w]; ci: CellInstance => RETURN [i]; ENDCASE => ERROR}; Sub: PUBLIC PROC [d: Design, x: PW, i: LNAT] RETURNS [PW] ~ { kids: Seq ~ BiRels.DeRef[d.sub.ApplyA[x].MA]; RETURN [kids.ApplyI[i].MA]}; PWRank: PUBLIC PROC [d: Design, x: PW] RETURNS [NAT] ~ { mv: Sets.MaybeValue ~ d.sub.ApplyA[x]; IF NOT mv.found THEN RETURN [0]; {kids: Seq ~ BiRels.VB[mv.it]; max: NAT _ 0; FOR i: INT IN [0 .. kids.Size.EN) DO kid: PW ~ kids.ApplyI[i].MA; max _ MAX[max, PWRank[d, kid]]; ENDLOOP; RETURN [max + 1]}}; Start: PROC ~ { RETURN}; Start[]; END.