[−][src]Struct shared_string::SharedGenString
A SharedString
, generic over its reference counter.
Most likely you will only need to interact with the type definitions
SharedString
and SharedSyncString
.
This struct is useful for parsers or other struct that hold a lot of strings
which could all reference. For example a Uri
Struct or
if you have a string with many lines and need every line independently
.
Lines example
use shared_string::SharedString; // or SharedSyncString if `Sync` is required let lines: Vec<_> = SharedString::from("many\nlines\nmany").lines().collect(); assert_eq!( lines[0], SharedString::from("many") ); assert_eq!( lines[1], "lines" ); assert_eq!( lines.len(), 3 );
Implementations
impl<R> SharedGenString<R> where
R: RefCounter,
[src]
R: RefCounter,
pub fn new(string: String) -> Self
[src]
Creates a new SharedString
with the content of String
.
This will convert the String into a Boxed u8 slice.
pub fn from_utf8(vec: Vec<u8>) -> Result<Self, FromUtf8Error>
[src]
Convert a vector of bytes to a SharedString
.
Behaves the same way as String::from_utf8.
If you are sure that the bytes are valid UTF-8, there is an unsafe method from_utf8_unchecked which behaves the same way but skips the checks.
Errors
Returns an FromUtf8Error
if the bytes are not valid UTF-8 with a description
were an invalid byte was found.
pub unsafe fn from_utf8_unchecked(vec: Vec<u8>) -> Self
[src]
Converts a vector of bytes to a SharedString
with out checking that every
bytes is valid UTF-8.
Safe version from_utf8
pub fn as_bytes(&self) -> &[u8]
[src]
Returns a byte slice of the underlying bytes.
To get the full bytes from which this SharedString
was created from use
as_bytes_full.
pub fn as_full_bytes(&self) -> &[u8]
[src]
Return a byte slice of the bytes from which this SharedString
was created.
pub fn as_str(&self) -> &str
[src]
Returns a string slice of the SharedString
.
Example
let s = SharedString::from("foo"); assert_eq!( "foo", s.as_str() );
pub fn as_full_str(&self) -> &str
[src]
Return a string slice of the bytes from which this SharedString
was created.
Example
let mut foo = SharedString::from("foobar"); let bar = foo.split_off(3); assert_eq!( "foo", foo.as_str() ); assert_eq!( "foobar", foo.as_full_str() );
pub fn len(&self) -> usize
[src]
Returns the len of SharedString
.
Example
let mut foo = SharedString::from("foobar"); let bar = foo.split_off(3); assert_eq!( 3, foo.len() ); assert_eq!( 3, bar.len() );
pub fn is_empty(&self) -> bool
[src]
Returns true
if the length is zero, and false
otherwise.
pub fn get<I>(&self, range: I) -> Option<Self> where
I: AsRangeInclusive,
[src]
I: AsRangeInclusive,
Returns a substring of SharedString
.
This is the non-panicking alternative to idx and returns None
if the range is out-of-bounds or if the start or the end are not at a char_boundary.
No allocation is performed.
Example
let foobar = SharedString::from("foobar"); assert_eq!( "foo", foobar.get(..3)? ); assert_eq!( "foob", foobar.get(..=3)? ); assert_eq!( "foobar", foobar.get(..)? ); assert_eq!( "bar", foobar.get(3..)? );
pub fn idx<I>(&self, range: I) -> Self where
I: AsRangeInclusive,
[src]
I: AsRangeInclusive,
Returns a substring of SharedString
for which no allocation is performed.
Panics
Panics if the range is out-of-bounds.
Warning
This method can lead to invalid utf8 if not "split" at a char boundary.
Note
The Index Trait
is not implemented because index
always returns a reference
and here you always received an owned type.
Example
let foobar = SharedString::from("foobar"); assert_eq!( "foo", foobar.idx(..3) ); assert_eq!( "foob", foobar.idx(..=3) ); assert_eq!( "foobar", foobar.idx(..) ); assert_eq!( "bar", foobar.idx(3..) );
pub fn into_bytes(self) -> Vec<u8>
[src]
Convert SharedString
to a Vec<u8>
.
Tries to avoid a call to clone
if the underlying data is not used
by another instance of SharedString
and start is at zero.
pub fn into_full_bytes(self) -> Vec<u8>
[src]
Returns the underlying Bytes from which this SharedString
was created.
Tries to avoid a call to clone
if the underlying data is not used
by another instance.
pub fn into_string(self) -> String
[src]
Convert SharedString
to a String
.
Tries to avoid a call to clone
if the underlying data is not used
by another instance of SharedString
and start is at zero.
pub fn into_full_string(self) -> String
[src]
Returns the underlying Bytes as a String
from which this SharedString
was created.
Tries to avoid a call to clone
if the underlying data is not used
by another instance.
pub fn push(self, ch: char) -> String
[src]
Pushes a char to the String
returned by into_string.
If the conditions in into_string
are met no clone
is perfomed.
Example
let fooba = SharedString::from("fooba"); let foobar = fooba.push('r'); assert_eq!( foobar, "foobar" );
pub fn push_str(self, string: &str) -> String
[src]
Pushes a string slice to the String
returned by into_string.
If the conditions in into_string
are met no clone
is perfomed.
Example
let foo = SharedString::from("foo"); let foobar = foo.push_str("bar"); assert_eq!( foobar, "foobar" );
pub fn split_off(&mut self, at: usize) -> Self
[src]
Splits the SharedString
into two at the given index.
No allocation is needed.
This is O(1)
because only the reference counter is increased.
Panics
Panics if at is not at a char boundary.
pub fn split(self, byte: u8) -> Split<R>ⓘNotable traits for Split<R>
impl<R> Iterator for Split<R> where
R: RefCounter, type Item = SharedGenString<R>;
[src]
Notable traits for Split<R>
impl<R> Iterator for Split<R> where
R: RefCounter, type Item = SharedGenString<R>;
Returns an iterator which returns for every "segment" a SharedString
.
At the moment only u8 as "splitter" is supported.
u8 will be replaced when Pattern gets stabilized.
Example
let mut foobar = SharedString::from("foo bar").split(b' '); let foo = foobar.next().unwrap(); let bar = foobar.next().unwrap(); assert_eq!( foo, "foo" ); assert_eq!( bar, "bar" );
pub fn lines(self) -> Lines<R>ⓘNotable traits for Lines<R>
impl<R> Iterator for Lines<R> where
R: RefCounter, type Item = SharedGenString<R>;
[src]
Notable traits for Lines<R>
impl<R> Iterator for Lines<R> where
R: RefCounter, type Item = SharedGenString<R>;
Returns an iterator which returns for every line a SharedString
.
Be aware that this doens't behave exactly like lines.
This implementation returns an empty line at the if there is a \n
byte.
Example
let mut lines = SharedString::from("foo\r\nbar\n\nbaz\n").lines(); assert_eq!( "foo", lines.next().unwrap() ); assert_eq!( "bar", lines.next().unwrap() ); assert_eq!( "", lines.next().unwrap() ); assert_eq!( "baz", lines.next().unwrap() ); assert_eq!( None, lines.next() );
Trait Implementations
impl<R> AsRef<str> for SharedGenString<R> where
R: RefCounter,
[src]
R: RefCounter,
impl<R> Borrow<str> for SharedGenString<R> where
R: RefCounter,
[src]
R: RefCounter,
impl<R: Clone> Clone for SharedGenString<R> where
R: RefCounter,
[src]
R: RefCounter,
pub fn clone(&self) -> SharedGenString<R>
[src]
pub fn clone_from(&mut self, source: &Self)
1.0.0[src]
impl<R> Debug for SharedGenString<R> where
R: RefCounter,
[src]
R: RefCounter,
impl<R> Deref for SharedGenString<R> where
R: RefCounter,
[src]
R: RefCounter,
impl<R> Display for SharedGenString<R> where
R: RefCounter,
[src]
R: RefCounter,
impl<R> Eq for SharedGenString<R> where
R: RefCounter,
[src]
R: RefCounter,
impl<R, '_> From<&'_ str> for SharedGenString<R> where
R: RefCounter,
[src]
R: RefCounter,
impl<R> From<String> for SharedGenString<R> where
R: RefCounter,
[src]
R: RefCounter,
impl<R> Hash for SharedGenString<R> where
R: RefCounter,
[src]
R: RefCounter,
pub fn hash<H: Hasher>(&self, hasher: &mut H)
[src]
pub fn hash_slice<H>(data: &[Self], state: &mut H) where
H: Hasher,
1.3.0[src]
H: Hasher,
impl<R, '_> PartialEq<&'_ str> for SharedGenString<R> where
R: RefCounter,
[src]
R: RefCounter,
pub fn eq(&self, other: &&str) -> bool
[src]
#[must_use]pub fn ne(&self, other: &Rhs) -> bool
1.0.0[src]
impl PartialEq<SharedGenString<Arc<Box<[u8], Global>>>> for str
[src]
pub fn eq(&self, other: &SharedSyncString) -> bool
[src]
#[must_use]pub fn ne(&self, other: &Rhs) -> bool
1.0.0[src]
impl<'_> PartialEq<SharedGenString<Arc<Box<[u8], Global>>>> for &'_ str
[src]
pub fn eq(&self, other: &SharedSyncString) -> bool
[src]
#[must_use]pub fn ne(&self, other: &Rhs) -> bool
1.0.0[src]
impl<R, O> PartialEq<SharedGenString<O>> for SharedGenString<R> where
R: RefCounter,
O: RefCounter,
[src]
R: RefCounter,
O: RefCounter,
pub fn eq(&self, other: &SharedGenString<O>) -> bool
[src]
#[must_use]pub fn ne(&self, other: &Rhs) -> bool
1.0.0[src]
impl PartialEq<SharedGenString<Rc<Box<[u8], Global>>>> for str
[src]
pub fn eq(&self, other: &SharedString) -> bool
[src]
#[must_use]pub fn ne(&self, other: &Rhs) -> bool
1.0.0[src]
impl<'_> PartialEq<SharedGenString<Rc<Box<[u8], Global>>>> for &'_ str
[src]
pub fn eq(&self, other: &SharedString) -> bool
[src]
#[must_use]pub fn ne(&self, other: &Rhs) -> bool
1.0.0[src]
impl<R> PartialEq<str> for SharedGenString<R> where
R: RefCounter,
[src]
R: RefCounter,
Auto Trait Implementations
impl<R> RefUnwindSafe for SharedGenString<R> where
R: RefUnwindSafe,
R: RefUnwindSafe,
impl<R> Send for SharedGenString<R> where
R: Send,
R: Send,
impl<R> Sync for SharedGenString<R> where
R: Sync,
R: Sync,
impl<R> Unpin for SharedGenString<R> where
R: Unpin,
R: Unpin,
impl<R> UnwindSafe for SharedGenString<R> where
R: UnwindSafe,
R: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> ToOwned for T where
T: Clone,
[src]
T: Clone,
type Owned = T
The resulting type after obtaining ownership.
pub fn to_owned(&self) -> T
[src]
pub fn clone_into(&self, target: &mut T)
[src]
impl<T> ToString for T where
T: Display + ?Sized,
[src]
T: Display + ?Sized,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,