Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/third_party/rust/arraystring/src/   (Firefox Browser Version 153.0.1©)  Datei vom 27.6.2026 mit Größe 8 kB image not shown  

Quelle  implementations.rs

  Sprache: Rust
 

//! Trait implementations for `ArrayString` (that aren't for integration)

use crate::{generic::ArraySlice, prelude::*};
use core::fmt::{self, Debug, Display, Formatter, Write};
use core::iter::FromIterator;
use core::ops::{Add, Deref, DerefMut, Index, IndexMut};
use core::ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo, RangeToInclusive};
use core::str::{self, FromStr};
use core::{borrow::Borrow, borrow::BorrowMut, cmp::Ordering, hash::Hash, hash::Hasher};

impl<SIZE> Default for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    #[inline]
    fn default() -> Self {
        Self {
            array: SIZE::Array::zeroed(),
            size: Default::default(),
        }
    }
}

impl<SIZE: Capacity + Copy> Copy for ArrayString<SIZE> where SIZE::Array: Copy {}

impl<SIZE> AsRef<str> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    #[inline]
    fn as_ref(&self) -> &str {
        unsafe { str::from_utf8_unchecked(self.as_ref()) }
    }
}

impl<SIZE> AsMut<str> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    #[inline]
    fn as_mut(&mut self) -> &mut str {
        let len = self.size as usize;
        let slice = unsafe { self.array.as_mut_slice().get_unchecked_mut(..len) };
        unsafe { str::from_utf8_unchecked_mut(slice) }
    }
}

impl<SIZE> AsRef<[u8]> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    #[inline]
    fn as_ref(&self) -> &[u8] {
        unsafe { self.array.as_slice().get_unchecked(..self.size.into()) }
    }
}

impl<'a, SIZE> From<&'a str> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    #[inline]
    fn from(s: &str) -> Self {
        Self::from_str_truncate(s)
    }
}

impl<SIZE> FromStr for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    type Err = OutOfBounds;

    #[inline]
    fn from_str(s: &str) -> Result<SelfSelf::Err> {
        Self::try_from_str(s)
    }
}

impl<SIZE> Debug for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    #[inline]
    fn fmt(&self, f: &mut Formatter) -> fmt::Result {
        f.debug_struct("ArrayString")
            .field("array", &self.as_str())
            .field("size", &self.size)
            .finish()
    }
}

impl<'a, 'b, SIZE> PartialEq<str> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    #[inline]
    fn eq(&self, other: &str) -> bool {
        self.as_str().eq(other)
    }
}

impl<SIZE> Borrow<str> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    #[inline]
    fn borrow(&self) -> &str {
        self.as_str()
    }
}

impl<SIZE> BorrowMut<str> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    #[inline]
    fn borrow_mut(&mut self) -> &mut str {
        self.as_mut_str()
    }
}

impl<SIZE> Hash for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    #[inline]
    fn hash<H: Hasher>(&self, hasher: &mut H) {
        self.as_str().hash(hasher);
    }
}

impl<SIZE> PartialEq for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    #[inline]
    fn eq(&self, other: &Self) -> bool {
        self.as_str().eq(other.as_str())
    }
}
impl<SIZE: Capacity> Eq for ArrayString<SIZE> {}

impl<SIZE> Ord for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    #[inline]
    fn cmp(&self, other: &Self) -> Ordering {
        self.as_str().cmp(other.as_str())
    }
}

impl<SIZE> PartialOrd for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    #[inline]
    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
        Some(self.cmp(other))
    }
}

impl<'a, SIZE> Add<&'a str> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    type Output = Self;

    #[inline]
    fn add(self, other: &str) -> Self::Output {
        let mut out = unsafe { Self::from_str_unchecked(self) };
        out.push_str(other);
        out
    }
}

impl<SIZE> Write for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    #[inline]
    fn write_str(&mut self, slice: &str) -> fmt::Result {
        self.try_push_str(slice).map_err(|_| fmt::Error)
    }
}

impl<SIZE> Display for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    #[inline]
    fn fmt(&self, f: &mut Formatter) -> fmt::Result {
        write!(f, "{}"self.as_str())
    }
}

impl<SIZE> Deref for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    type Target = str;

    #[inline]
    fn deref(&self) -> &Self::Target {
        self.as_ref()
    }
}

impl<SIZE> DerefMut for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    #[inline]
    fn deref_mut(&mut self) -> &mut Self::Target {
        self.as_mut()
    }
}

impl<SIZE> FromIterator<char> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    fn from_iter<I: IntoIterator<Item = char>>(iter: I) -> Self {
        Self::from_chars(iter)
    }
}

impl<'a, SIZE> FromIterator<&'a str> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    fn from_iter<I: IntoIterator<Item = &'a str>>(iter: I) -> Self {
        Self::from_iterator(iter)
    }
}

impl<SIZE> Extend<char> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    fn extend<I: IntoIterator<Item = char>>(&mut self, iterable: I) {
        self.push_str(Self::from_chars(iterable))
    }
}

impl<'a, SIZE> Extend<&'a char> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    fn extend<I: IntoIterator<Item = &'a char>>(&mut self, iter: I) {
        self.extend(iter.into_iter().cloned());
    }
}

impl<'a, SIZE> Extend<&'a str> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    fn extend<I: IntoIterator<Item = &'a str>>(&mut self, iterable: I) {
        self.push_str(Self::from_iterator(iterable))
    }
}

impl<SIZE> IndexMut<RangeFrom<u8>> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    #[inline]
    fn index_mut(&mut self, index: RangeFrom<u8>) -> &mut str {
        let start = index.start as usize;
        self.as_mut_str().index_mut(RangeFrom { start })
    }
}

impl<SIZE> IndexMut<RangeTo<u8>> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    #[inline]
    fn index_mut(&mut self, index: RangeTo<u8>) -> &mut str {
        let end = index.end as usize;
        self.as_mut_str().index_mut(RangeTo { end })
    }
}

impl<SIZE> IndexMut<RangeFull> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    #[inline]
    fn index_mut(&mut self, index: RangeFull) -> &mut str {
        self.as_mut_str().index_mut(index)
    }
}

impl<SIZE> IndexMut<Range<u8>> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    #[inline]
    fn index_mut(&mut self, index: Range<u8>) -> &>mut str {
        let (start, end) = (index.start as usize, index.end as usize);
        let range = Range { start, end };
        self.as_mut_str().index_mut(range)
    }
}

impl<SIZE> IndexMut<RangeToInclusive<u8>> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    #[inline]
    fn index_mut(&mut self, index: RangeToInclusive<u8>) -> &'color:red'>mut str {
        let end = index.end as usize;
        let range = RangeToInclusive { end };
        self.as_mut_str().index_mut(range)
    }
}

impl<SIZE> IndexMut<RangeInclusive<u8>> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    #[inline]
    fn index_mut(&mut self, index: RangeInclusive<u8>) -> &mut str {
        let (start, end) = (*index.start() as usize, *index.end() as usize);
        let range = RangeInclusive::new(start, end);
        self.as_mut_str().index_mut(range)
    }
}

impl<SIZE> Index<RangeFrom<u8>> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    type Output = str;

    #[inline]
    fn index(&self, index: RangeFrom<u8>) -> &Self::Output {
        let start = index.start as usize;
        self.as_str().index(RangeFrom { start })
    }
}

impl<SIZE> Index<RangeTo<u8>> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    type Output = str;

    #[inline]
    fn index(&self, index: RangeTo<u8>) -> &Self::Output {
        let end = index.end as usize;
        self.as_str().index(RangeTo { end })
    }
}

impl<SIZE> Index<RangeFull> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    type Output = str;

    #[inline]
    fn index(&self, index: RangeFull) -> &Self::Output {
        self.as_str().index(index)
    }
}

impl<SIZE> Index<Range<u8>> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    type Output = str;

    #[inline]
    fn index(&self, index: Range<u8>) -> &Self::Output {
        let (start, end) = (index.start as usize, index.end as usize);
        self.as_str().index(Range { start, end })
    }
}

impl<SIZE> Index<RangeToInclusive<u8>> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    type Output = str;

    #[inline]
    fn index(&self, index: RangeToInclusive<u8>) -> &Self::Output {
        let end = index.end as usize;
        self.as_str().index(RangeToInclusive { end })
    }
}

impl<SIZE> Index<RangeInclusive<u8>> for ArrayString<SIZE>
where
    SIZE: Capacity,
{
    type Output = str;

    #[inline]
    fn index(&self, index: RangeInclusive<u8>) -> &Self::Output {
        let (start, end) = (*index.start() as usize, *index.end() as usize);
        let range = RangeInclusive::new(start, end);
        self.as_str().index(range)
    }
}

Messung V0.5 in Prozent
C=100 H=98 G=98

¤ Dauer der Verarbeitung: 0.5 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.