lib/poset: add POSet::add_chain
authorJean Privat <jean@pryen.org>
Wed, 26 Nov 2014 03:46:44 +0000 (22:46 -0500)
committerJean Privat <jean@pryen.org>
Thu, 27 Nov 2014 15:44:22 +0000 (10:44 -0500)
Signed-off-by: Jean Privat <jean@pryen.org>

lib/poset.nit

index 6117ce5..ecb9e14 100644 (file)
@@ -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