From 30b9805c930ebd3d31302e99e1d4ea275bd93d34 Mon Sep 17 00:00:00 2001 From: Jean Privat Date: Tue, 25 Nov 2014 22:46:44 -0500 Subject: [PATCH] lib/poset: add POSet::add_chain Signed-off-by: Jean Privat --- lib/poset.nit | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) 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 -- 1.7.9.5