Struct bytes::str::Rope [] [src]

pub struct Rope {
    // some fields omitted
}

An immutable sequence of bytes formed by concatenation of other ByteStr values, without copying the data in the pieces. The concatenation is represented as a tree whose leaf nodes are each a Bytes value.

Most of the operation here is inspired by the now-famous paper Ropes: an Alternative to Strings. hans-j. boehm, russ atkinson and michael plass.

Fundamentally the Rope algorithm represents the collection of pieces as a binary tree. BAP95 uses a Fibonacci bound relating depth to a minimum sequence length, sequences that are too short relative to their depth cause a tree rebalance. More precisely, a tree of depth d is "balanced" in the terminology of BAP95 if its length is at least F(d+2), where F(n) is the n-the Fibonacci number. Thus for depths 0, 1, 2, 3, 4, 5,... we have minimum lengths 1, 2, 3, 5, 8, 13,...

Methods

impl Rope

fn from_slice(bytes: &[u8]) -> Rope

fn of<B: ByteStr + 'static>(bytes: B) -> Rope

Returns a Rope consisting of the supplied Bytes as a single segment.

fn len(&self) -> usize

fn is_empty(&self) -> bool

Trait Implementations

impl ByteStr for Rope

type Buf = RopeBuf

fn buf(&self) -> RopeBuf

fn concat<B: ByteStr + 'static>(&self, other: &B) -> Bytes

fn len(&self) -> usize

fn slice(&self, begin: usize, end: usize) -> Bytes

fn is_empty(&self) -> bool

fn slice_from(&self, begin: usize) -> Bytes

fn slice_to(&self, end: usize) -> Bytes

fn split_at(&self, mid: usize) -> (Bytes, Bytes)

impl ToBytes for Rope

fn to_bytes(self) -> Bytes

impl Index<usize> for Rope

type Output = u8

fn index(&self, index: usize) -> &u8

impl Clone for Rope

fn clone(&self) -> Rope

1.0.0fn clone_from(&mut self, source: &Self)

impl<'a> Source for &'a Rope

type Error = BufError

fn fill<B: MutBuf>(self, _buf: &mut B) -> Result<usize, BufError>

impl<B: ByteStr> PartialEq<B> for Rope

fn eq(&self, other: &B) -> bool

fn ne(&self, other: &B) -> bool