# * 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
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
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