ropes.pl -- Ropes

An implementation of the rope data structure.

Based on Boehm, H.J., Russ Atkinson, and Michael Plass. "Ropes: An alternative to strings." Software: Practice and Experience 25.12 (1995): 1315-1330.

 string_rope(+String:string, -Rope:rope) is det
True when Rope is a rope leaf holding the string String
 rope_string(+Rope:rope, -String:string) is det
True when Rope represents the accumulated string String
 rope_codes(+Rope:rope, -Codes:codes) is det
True when Rope represents the accumulated list of codes in Codes
 rope_split(+Rope:rope, +At:nonneg, -Left:rope, -Right:rope) is det
True when spliting Rope at underlying offset At yields ropes Left and Right
 rope_concat(+Left:rope, +Right:rope, -Rope:rope) is det
True when Rope is the concatenation of Left and Right
 rope_report(+Rope:rope, +Offset:integer, +Length:integer, -String:string) is det
True when String is unified with the sub string in offset Offset and length Length of the underlying string of rope Rope
 rope_edit(+RopeIn:rope, +Offset:integer, +Length:integer, +Content:string, -RopeOut:rope) is det
Unify RopeOut with a rope obtained by replacing Content with the portion of RopeIn starting from offset Offset and spanning Length characters.