Struct cpclib_asm::parser::Z80Span
source · pub struct Z80Span(_);Implementations§
source§impl Z80Span
impl Z80Span
pub fn new_extra(src: &str, ctx: &ParserContext) -> Self
pub fn context(&self) -> &ParserContext
Methods from Deref<Target = LocatedSpan<&'static str, &'static ParserContext>>§
pub fn location_offset(&self) -> usize
pub fn location_offset(&self) -> usize
The offset represents the position of the fragment relatively to the input of the parser. It starts at offset 0.
pub fn location_line(&self) -> u32
pub fn location_line(&self) -> u32
The line number of the fragment relatively to the input of the parser. It starts at line 1.
pub fn fragment(&self) -> &T
pub fn fragment(&self) -> &T
The fragment that is spanned. The fragment represents a part of the input of the parser.
pub fn get_line_beginning(&self) -> &[u8] ⓘ
pub fn get_line_beginning(&self) -> &[u8] ⓘ
Return the line that contains this LocatedSpan.
The get_column and get_utf8_column functions returns
indexes that corresponds to the line returned by this function.
Note that if this LocatedSpan ends before the end of the
original data, the result of calling get_line_beginning()
will not include any data from after the LocatedSpan.
let program = LocatedSpan::new(
"Hello World!\
\nThis is a multi-line input\
\nthat ends after this line.\n");
let multi = program.find_substring("multi").unwrap();
assert_eq!(
program.slice(multi..).get_line_beginning(),
"This is a multi-line input".as_bytes(),
);pub fn get_column(&self) -> usize
pub fn get_column(&self) -> usize
Return the column index, assuming 1 byte = 1 column.
Use it for ascii text, or use get_utf8_column for UTF8.
Example of use
let span = LocatedSpan::new("foobar");
assert_eq!(span.slice(3..).get_column(), 4);pub fn get_utf8_column(&self) -> usize
pub fn get_utf8_column(&self) -> usize
Return the column index for UTF8 text. Return value is unspecified for non-utf8 text.
This version uses bytecount’s hyper algorithm to count characters. This is much faster
for long lines, but is non-negligibly slower for short slices (below around 100 bytes).
This is also sped up significantly more depending on architecture and enabling the simd
feature gates. If you expect primarily short lines, you may get a noticeable speedup in
parsing by using naive_get_utf8_column instead. Benchmark your specific use case!
Example of use
let span = LocatedSpan::new("メカジキ");
let indexOf3dKanji = span.find_substring("ジ").unwrap();
assert_eq!(span.slice(indexOf3dKanji..).get_column(), 7);
assert_eq!(span.slice(indexOf3dKanji..).get_utf8_column(), 3);pub fn naive_get_utf8_column(&self) -> usize
pub fn naive_get_utf8_column(&self) -> usize
Return the column index for UTF8 text. Return value is unspecified for non-utf8 text.
A simpler implementation of get_utf8_column that may be faster on shorter lines.
If benchmarking shows that this is faster, you can use it instead of get_utf8_column.
Prefer defaulting to get_utf8_column unless this legitimately is a performance bottleneck.
Example of use
let span = LocatedSpan::new("メカジキ");
let indexOf3dKanji = span.find_substring("ジ").unwrap();
assert_eq!(span.slice(indexOf3dKanji..).get_column(), 7);
assert_eq!(span.slice(indexOf3dKanji..).naive_get_utf8_column(), 3);Trait Implementations§
source§impl AsRef<LocatedSpan<&'static str, &'static ParserContext>> for Z80Span
impl AsRef<LocatedSpan<&'static str, &'static ParserContext>> for Z80Span
source§fn as_ref(&self) -> &LocatedSpan<&'static str, &'static ParserContext>
fn as_ref(&self) -> &LocatedSpan<&'static str, &'static ParserContext>
source§impl ContextError<Z80Span> for Z80ParserError
impl ContextError<Z80Span> for Z80ParserError
source§fn add_context(input: Z80Span, ctx: &'static str, other: Self) -> Self
fn add_context(input: Z80Span, ctx: &'static str, other: Self) -> Self
source§impl<'src, 'ctx, U> FindSubstring<U> for Z80Spanwhere
&'src str: FindSubstring<U>,
impl<'src, 'ctx, U> FindSubstring<U> for Z80Spanwhere &'src str: FindSubstring<U>,
source§fn find_substring(&self, substr: U) -> Option<usize>
fn find_substring(&self, substr: U) -> Option<usize>
source§impl InputIter for Z80Span
impl InputIter for Z80Span
§type Item = <LocatedSpan<&'static str, &'static ParserContext> as InputIter>::Item
type Item = <LocatedSpan<&'static str, &'static ParserContext> as InputIter>::Item
Item type. Read more§type Iter = <LocatedSpan<&'static str, &'static ParserContext> as InputIter>::Iter
type Iter = <LocatedSpan<&'static str, &'static ParserContext> as InputIter>::Iter
&str, the position
corresponds to the byte index of the character§type IterElem = <LocatedSpan<&'static str, &'static ParserContext> as InputIter>::IterElem
type IterElem = <LocatedSpan<&'static str, &'static ParserContext> as InputIter>::IterElem
source§fn iter_indices(&self) -> Self::Iter
fn iter_indices(&self) -> Self::Iter
source§fn iter_elements(&self) -> Self::IterElem
fn iter_elements(&self) -> Self::IterElem
source§impl InputTake for Z80Span
impl InputTake for Z80Span
source§fn take_split(&self, count: usize) -> (Self, Self)
fn take_split(&self, count: usize) -> (Self, Self)
count byte offset. panics if count > lengthsource§impl InputTakeAtPosition for Z80Span
impl InputTakeAtPosition for Z80Span
§type Item = <LocatedSpan<&'static str, &'static ParserContext> as InputIter>::Item
type Item = <LocatedSpan<&'static str, &'static ParserContext> as InputIter>::Item
Item type. Read moresource§fn split_at_position<P, E: ParseError<Self>>(
&self,
predicate: P
) -> IResult<Self, Self, E>where
P: Fn(Self::Item) -> bool,
fn split_at_position<P, E: ParseError<Self>>( &self, predicate: P ) -> IResult<Self, Self, E>where P: Fn(Self::Item) -> bool,
source§fn split_at_position1<P, E: ParseError<Self>>(
&self,
predicate: P,
e: ErrorKind
) -> IResult<Self, Self, E>where
P: Fn(Self::Item) -> bool,
fn split_at_position1<P, E: ParseError<Self>>( &self, predicate: P, e: ErrorKind ) -> IResult<Self, Self, E>where P: Fn(Self::Item) -> bool,
source§impl ParseError<Z80Span> for Z80ParserError
impl ParseError<Z80Span> for Z80ParserError
source§fn from_error_kind(input: Z80Span, kind: ErrorKind) -> Self
fn from_error_kind(input: Z80Span, kind: ErrorKind) -> Self
source§fn from_char(input: Z80Span, c: char) -> Self
fn from_char(input: Z80Span, c: char) -> Self
source§impl PartialEq<Z80Span> for Z80Span
impl PartialEq<Z80Span> for Z80Span
impl Eq for Z80Span
impl StructuralEq for Z80Span
impl StructuralPartialEq for Z80Span
Auto Trait Implementations§
impl RefUnwindSafe for Z80Span
impl Send for Z80Span
impl Sync for Z80Span
impl Unpin for Z80Span
impl UnwindSafe for Z80Span
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> FmtForward for T
impl<T> FmtForward for T
§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where Self: Binary,
self to use its Binary implementation when Debug-formatted.§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where Self: Display,
self to use its Display implementation when
Debug-formatted.§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where Self: Octal,
self to use its Octal implementation when Debug-formatted.§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.§fn fmt_list(self) -> FmtList<Self>where
&'a Self: for<'a> IntoIterator,
fn fmt_list(self) -> FmtList<Self>where &'a Self: for<'a> IntoIterator,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere Self: Sized,
§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere R: 'a,
self and passes that borrow into the pipe function. Read more§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere
Self: Borrow<B>,
B: 'a + ?Sized,
R: 'a,
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> Rwhere Self: Borrow<B>, B: 'a + ?Sized, R: 'a,
§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R
) -> Rwhere
Self: BorrowMut<B>,
B: 'a + ?Sized,
R: 'a,
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R ) -> Rwhere Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,
§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere
Self: AsRef<U>,
U: 'a + ?Sized,
R: 'a,
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> Rwhere Self: AsRef<U>, U: 'a + ?Sized, R: 'a,
self, then passes self.as_ref() into the pipe function.§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere
Self: AsMut<U>,
U: 'a + ?Sized,
R: 'a,
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> Rwhere Self: AsMut<U>, U: 'a + ?Sized, R: 'a,
self, then passes self.as_mut() into the pipe
function.§impl<T> Pointable for T
impl<T> Pointable for T
§impl<T> Tap for T
impl<T> Tap for T
§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Selfwhere Self: Borrow<B>, B: ?Sized,
Borrow<B> of a value. Read more§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere Self: BorrowMut<B>, B: ?Sized,
BorrowMut<B> of a value. Read more§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Selfwhere Self: AsRef<R>, R: ?Sized,
AsRef<R> view of a value. Read more§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere Self: AsMut<R>, R: ?Sized,
AsMut<R> view of a value. Read more§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere
Self: Deref<Target = T>,
T: ?Sized,
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Selfwhere Self: Deref<Target = T>, T: ?Sized,
Deref::Target of a value. Read more§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere
Self: DerefMut<Target = T> + Deref,
T: ?Sized,
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Selfwhere Self: DerefMut<Target = T> + Deref, T: ?Sized,
Deref::Target of a value. Read more§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere
Self: Borrow<B>,
B: ?Sized,
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Selfwhere Self: Borrow<B>, B: ?Sized,
.tap_borrow() only in debug builds, and is erased in release
builds.§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere
Self: BorrowMut<B>,
B: ?Sized,
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Selfwhere Self: BorrowMut<B>, B: ?Sized,
.tap_borrow_mut() only in debug builds, and is erased in release
builds.§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere
Self: AsRef<R>,
R: ?Sized,
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Selfwhere Self: AsRef<R>, R: ?Sized,
.tap_ref() only in debug builds, and is erased in release
builds.§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere
Self: AsMut<R>,
R: ?Sized,
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Selfwhere Self: AsMut<R>, R: ?Sized,
.tap_ref_mut() only in debug builds, and is erased in release
builds.