Home > rope

rope

Rope is a project mainly written in Ruby, based on the MIT license.

Pure Ruby implementation of a Rope data structure

p{color:red}. rope is still under early development. Check it out if you wish to follow my progress or help, but do not use it in your applications (yet!).

rope is a pure Ruby implementation of the "Rope data structure":http://en.wikipedia.org/wiki/Rope_%28computer_science%29.

For many applications, the Rope class can be a drop-in replacement for String that is optimized for certain use cases.

Using a Rope instance over a String may be desirable in applications that manipulate large amounts of text.

rope currently offers:

  • Fast string concatenation and substring operations involving large strings
  • Immutability, which is desirable for functional programming techniques or multithreaded applications

Planned features for rope:

  • Ability to view a function producing characters as a Rope (including I/O operations). For instance, a piece of a Rope may be a 100MB file, but is only read when that section of the string is examined. Concatenating to the end of that Rope does not involve reading the entire file.
  • Implement a Rope counterpart to every immutable method available on the String class.

Disadvantages of rope:

  • Single character replacements are expensive
  • Iterating character-by-character is slightly more expensive than in a String (TODO: how much? .. haven't implemented iterators yet)

h1. Installation

rope is hosted on "rubygems":http://www.rubygems.org/

gem install rope

... or in your Gemfile

gem 'rope'

rope is tested against MRI 1.8.7 and 1.9.2.

h1. Usage

h2. Creating a Rope

rope = "123456789".to_rope # Rope::Rope.new("123456789") also works

puts rope # "123456789"

h2. Concatenation

A Rope instance can be concatenated with another Rope or String instance.

rope = "12345"
string = "6789"

rope += string
puts rope # "123456789"

h2. Slices/Substrings

A Rope instance offers efficient substring operations. The slice and [] methods are synonymous with their "String counterparts (Ruby API documentation)":http://ruby-doc.org/core-1.9/classes/String.html#M000293.

rope = "123456789".to_rope

puts rope.slice(3, 4) # 4567
puts rope.slice(-6, 4) # 4567
# TODO: More examples when they are implemented
Previous:transdirect