Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alindeman/rope
Pure Ruby implementation of a Rope data structure
https://github.com/alindeman/rope
Last synced: 2 months ago
JSON representation
Pure Ruby implementation of a Rope data structure
- Host: GitHub
- URL: https://github.com/alindeman/rope
- Owner: alindeman
- License: mit
- Created: 2010-12-26T22:20:34.000Z (about 14 years ago)
- Default Branch: master
- Last Pushed: 2010-12-27T18:12:51.000Z (almost 14 years ago)
- Last Synced: 2024-10-13T17:51:36.786Z (2 months ago)
- Language: Ruby
- Homepage:
- Size: 125 KB
- Stars: 9
- Watchers: 3
- Forks: 1
- Open Issues: 6
-
Metadata Files:
- Readme: README.textile
- License: LICENSE.txt
Awesome Lists containing this project
README
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 applicationsPlanned 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 worksputs 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_ropeputs rope.slice(3, 4) # 4567
puts rope.slice(-6, 4) # 4567
# TODO: More examples when they are implemented