(* --------------------------------------------------- Por odem do Stolfi, nao usaremos Union-Find na manipulacao das esquinas de uma borda PROCEDURE BorderOf(self: Corner) : Border = BEGIN WITH b = self.border, (* "b" = border's record refered by "self" *) c = b.borderDesc(), (* "c" = corner descriptor of the border of "self" *) d = c.border (* "d" = border's record refered by "c" *) DO IF d # b THEN (* border's records refered by "self" and by "c" are different; so, update the field "border" of "self" to refer to "d" directly -- heuristic path compression *) b.removeCorner(self); d.insertCorner(self); END; RETURN d END END BorderOf; --------------------------------------------------- *) (* --------------------------------------------------- Por odem do Stolfi, nao usaremos Union-Find na manipulacao das esquinas de uma borda PROCEDURE AreInSameBorder(self: Corner; c : Corner) : BOOLEAN = BEGIN WITH cbd = c.borderOf().borderDesc(), csbd = c.sym().borderOf().borderDesc(), sbd = self.borderOf().borderDesc() DO RETURN sbd = cbd OR sbd = csbd END END AreInSameBorder; --------------------------------------------------- *)