Skip to main content

Cursor

Struct Cursor 

pub struct Cursor<'a, N>
where N: 'a + NodeInfo,
{ /* private fields */ }
Expand description

A data structure for traversing boundaries in a tree.

It is designed to be efficient both for random access and for iteration. The cursor itself is agnostic to which Metric is used to determine boundaries, but the methods to find boundaries are parametrized on the Metric.

A cursor can be valid or invalid. It is always valid when created or after set is called, and becomes invalid after prev or next fails to find a boundary.

Implementations§

§

impl<'a> Cursor<'a, RopeInfo>

pub fn prev_codepoint(&mut self) -> Option<char>

Get previous codepoint before cursor position, and advance cursor backwards.

pub fn next_codepoint(&mut self) -> Option<char>

Get next codepoint after cursor position, and advance cursor.

pub fn peek_next_codepoint(&self) -> Option<char>

Get the next codepoint after the cursor position, without advancing the cursor.

pub fn next_grapheme(&mut self) -> Option<usize>

pub fn prev_grapheme(&mut self) -> Option<usize>

§

impl<'a, N> Cursor<'a, N>
where N: NodeInfo,

pub fn new(n: &'a Node<N>, position: usize) -> Cursor<'a, N>

Create a new cursor at the given position.

pub fn total_len(&self) -> usize

The length of the tree.

pub fn root(&self) -> &'a Node<N>

Return a reference to the root node of the tree.

pub fn get_leaf(&self) -> Option<(&'a <N as NodeInfo>::L, usize)>

Get the current leaf of the cursor.

If the cursor is valid, returns the leaf containing the current position, and the offset of the current position within the leaf. That offset is equal to the leaf length only at the end, otherwise it is less than the leaf length.

pub fn set(&mut self, position: usize)

Set the position of the cursor.

The cursor is valid after this call.

Precondition: position is less than or equal to the length of the tree.

pub fn pos(&self) -> usize

Get the position of the cursor.

pub fn is_boundary<M>(&mut self) -> bool
where M: Metric<N>,

Determine whether the current position is a boundary.

Note: the beginning and end of the tree may or may not be boundaries, depending on the metric. If the metric is not can_fragment, then they always are.

pub fn prev<M>(&mut self) -> Option<usize>
where M: Metric<N>,

Moves the cursor to the previous boundary.

When there is no previous boundary, returns None and the cursor becomes invalid.

Return value: the position of the boundary, if it exists.

pub fn next<M>(&mut self) -> Option<usize>
where M: Metric<N>,

Moves the cursor to the next boundary.

When there is no next boundary, returns None and the cursor becomes invalid.

Return value: the position of the boundary, if it exists.

pub fn at_or_next<M>(&mut self) -> Option<usize>
where M: Metric<N>,

Returns the current position if it is a boundary in this Metric, else behaves like next.

pub fn at_or_prev<M>(&mut self) -> Option<usize>
where M: Metric<N>,

Returns the current position if it is a boundary in this Metric, else behaves like prev.

pub fn iter<'c, M>(&'c mut self) -> CursorIter<'c, 'a, N, M>
where M: Metric<N>,

Returns an iterator with this cursor over the given Metric.

§Examples:
let text: Rope = "one line\ntwo line\nred line\nblue".into();
let mut cursor = Cursor::new(&text, 0);
let line_offsets = cursor.iter::<LinesMetric>().collect::<Vec<_>>();
assert_eq!(line_offsets, vec![9, 18, 27]);

pub fn next_leaf(&mut self) -> Option<(&'a <N as NodeInfo>::L, usize)>

Move to beginning of next leaf.

Return value: same as get_leaf.

pub fn prev_leaf(&mut self) -> Option<(&'a <N as NodeInfo>::L, usize)>

Move to beginning of previous leaf.

Return value: same as get_leaf.

Auto Trait Implementations§

§

impl<'a, N> Freeze for Cursor<'a, N>

§

impl<'a, N> RefUnwindSafe for Cursor<'a, N>

§

impl<'a, N> Send for Cursor<'a, N>
where <N as NodeInfo>::L: Sync + Send, N: Sync + Send,

§

impl<'a, N> Sync for Cursor<'a, N>
where <N as NodeInfo>::L: Sync + Send, N: Sync + Send,

§

impl<'a, N> Unpin for Cursor<'a, N>

§

impl<'a, N> UnsafeUnpin for Cursor<'a, N>

§

impl<'a, N> UnwindSafe for Cursor<'a, N>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSync for T
where T: Any + Send + Sync,

§

fn into_any_arc(self: Arc<T>) -> Arc<dyn Any + Sync + Send>

Convert Arc<Trait> (where Trait: Downcast) to Arc<Any>. Arc<Any> can then be further downcast into Arc<ConcreteType> where ConcreteType implements Trait.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> Upcast<T> for T

§

fn upcast(&self) -> Option<&T>

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSend for T
where T: Send,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSendSync for T
where T: WasmNotSend + WasmNotSync,

§

impl<T> WasmNotSync for T
where T: Sync,

§

impl<T> WasmNotSync for T
where T: Sync,