From: Jean Privat Date: Wed, 26 Nov 2014 03:46:44 +0000 (-0500) Subject: lib/poset: add POSet::add_chain X-Git-Tag: v0.6.11~9^2~1 X-Git-Url: http://nitlanguage.org lib/poset: add POSet::add_chain Signed-off-by: Jean Privat --- diff --git a/lib/poset.nit b/lib/poset.nit index 6117ce5..ecb9e14 100644 --- a/lib/poset.nit +++ b/lib/poset.nit @@ -108,6 +108,27 @@ class POSet[E: Object] te.dfroms.add f end + # Add an edge between all elements of `es` in order. + # + # ~~~~ + # var pos = new POSet[String] + # pos.add_chain(["A", "B", "C", "D"]) + # assert pos.has_direct_edge("A", "B") + # assert pos.has_direct_edge("B", "C") + # assert pos.has_direct_edge("C", "D") + # ~~~~ + fun add_chain(es: SequenceRead[E]) + do + if es.is_empty then return + var i = es.iterator + var e = i.item + i.next + for f in i do + add_edge(e, f) + e = f + end + end + # Is there an edge (transitive or not) from `f` to `t`? # Since the POSet is reflexive, true is returned if `f == t`. fun has_edge(f,t: E): Bool