X-Git-Url: http://nitlanguage.org diff --git a/lib/poset.nit b/lib/poset.nit index aea40bb..ac0765e 100644 --- a/lib/poset.nit +++ b/lib/poset.nit @@ -24,7 +24,7 @@ module poset # * transitivity: `(self.has_edge(e,f) and self.has_edge(f,g)) implies self.has_edge(e,g)` class POSet[E: Object] super Collection[E] - super AbstractSorter[E] + super Comparator[E] redef fun iterator do return elements.keys.iterator @@ -163,6 +163,13 @@ class POSet[E: Object] if res != 0 then return res return elements[a].count <=> elements[b].count end + + # Sort a sorted array of poset elements using linearization order + fun linearize(elements: Collection[E]): Array[E] do + var lin = elements.to_a + sort(lin) + return lin + end end # View of an objet in a poset @@ -230,4 +237,20 @@ class POSetElement[E: Object] do return t != self.element and self.tos.has(t) end + + # The length of the shortest path to the root of the poset hierarchy + fun depth: Int do + if direct_greaters.is_empty then + return 0 + end + var min = -1 + for p in direct_greaters do + var d = poset[p].depth + 1 + if min == -1 or d < min then + min = d + end + end + return min + + end end