1 # This file is part of NIT ( http://www.nitlanguage.org ).
3 # This file is free software, which comes along with NIT. This software is
4 # distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
5 # without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
6 # PARTICULAR PURPOSE. You can modify it is you want, provided this header
7 # is kept unaltered, and a notification of the changes is added.
8 # You are allowed to redistribute it and sell it, alone or is a part of
11 intrude import splay_ropes
12 intrude import standard
::ropes
13 intrude import ropes_debug
16 redef fun to_dot
(s
): String
18 s
+= "[label = \"{str}\
" shape = rect];\n"
19 s
+= " -> [label = \"contains\
"];\n"
26 redef fun to_dot
(s
): String
28 s
+= "[label = {length}];\n"
30 s
+= " -> [label = \"left\
"];\n"
34 s
+= " -> [label = \"right\
"];\n"
41 redef class FlatString
42 redef fun to_dot
(s
: String): String
44 return s
+ " [label=\"FlatString\\nindex_from
= {index_from}\\nindex_to
= {index_to}\\nNativeString
= {items.to_s_with_length(items.cstring_length)}\
"];\n"
48 redef class FlatBuffer
49 redef fun to_dot
(s
: String): String
51 return s
+ " [label=\"FlatBuffer\\length
= {length}\\ncapacity
= {capacity}\\nitems
= {items.to_s_with_length(items.cstring_length)}\
"];\n"
56 redef class RopeString
60 var ret
: String = new RopeString.from
("digraph g \{\n")
61 ret
= root
.to_dot
(ret
).as(RopeString)
69 var ab
= new StringLeaf("AB".as(FlatString))
70 var cd
= new StringLeaf("CD".as(FlatString))
71 var ef
= new StringLeaf("EF".as(FlatString))
72 var gh
= new StringLeaf("GH".as(FlatString))
76 var c
= new Concat(cd
,ef
)
78 var ro
= new RopeString.from_root
(c
)
80 ro
.to_dot
("Zig-Before_splay.dot")
85 ro
= new RopeString.from_root
(ro
.splay
(p
).as(not null))
87 ro
.to_dot
("Zig-After_splay.dot")
90 # Zig-zig test left left
92 var d
= new Concat(ab
,cd
)
93 var e
= new Concat(d
,ef
)
94 var f
= new Concat(e
,gh
)
95 ro
= new RopeString.from_root
(f
)
100 ro
.to_dot
("Zig-zigll-Before_splay.dot")
102 ro
= new RopeString.from_root
(ro
.splay
(p
).as(not null))
105 ro
.to_dot
("Zig-zigll-After_splay.dot")
107 # Zig-zig test right right
109 d
= new Concat(ef
,gh
)
112 ro
= new RopeString.from_root
(f
)
117 ro
.to_dot
("Zig-zigrr-Before_splay.dot")
119 ro
= new RopeString.from_root
(ro
.splay
(p
).as(not null))
122 ro
.to_dot
("Zig-zigrr-After_splay.dot")
124 # Zig-zag test left right
126 d
= new Concat(cd
,ef
)
129 ro
= new RopeString.from_root
(f
)
134 ro
.to_dot
("Zig-zaglr-Before_splay.dot")
136 ro
= new RopeString.from_root
(ro
.splay
(p
).as(not null))
139 ro
.to_dot
("Zig-zaglr-After_splay.dot")
141 # Zig-zag test right left
143 d
= new Concat(cd
,ef
)
146 ro
= new RopeString.from_root
(f
)
151 ro
.to_dot
("Zig-zagrl-Before_splay.dot")
153 ro
= new RopeString.from_root
(ro
.splay
(p
).as(not null))
156 ro
.to_dot
("Zig-zagrl-After_splay.dot")