lib/standard/ropes: Added constructors for a Rope
[nit.git] / lib / standard / ropes.nit
index ea7237d..eef9360 100644 (file)
@@ -73,6 +73,28 @@ abstract class Rope
        # Root node, entry point of a Rope.
        private var root: RopeNode
 
+       # Empty Rope
+       init do from("")
+
+       # Creates a new Rope with `s` as root
+       init from(s: String) do
+               if s isa RopeString then root = s.root else root = new Leaf(s.as(FlatString))
+       end
+
+       private init from_root(r: RopeNode)
+       do
+               root = r
+       end
+
        redef fun length do return root.length
 end
 
+# Rope that cannot be modified
+class RopeString
+       super Rope
+       super String
+
+       redef fun to_s do return self
+
+end
+