]>
git.proxmox.com Git - rustc.git/blob - vendor/bstr/src/slice_index.rs
5 /// Ensure that callers cannot implement `SliceIndex` by making an
6 /// umplementable trait its super trait.
8 impl Sealed
for usize {}
9 impl Sealed
for ops
::Range
<usize> {}
10 impl Sealed
for ops
::RangeTo
<usize> {}
11 impl Sealed
for ops
::RangeFrom
<usize> {}
12 impl Sealed
for ops
::RangeFull {}
13 impl Sealed
for ops
::RangeInclusive
<usize> {}
14 impl Sealed
for ops
::RangeToInclusive
<usize> {}
16 /// A trait that parameterizes the different types of indexing a byte string.
18 /// In general, this trait makes it possible to define generic routines like
19 /// `get` that can accept either single positions or ranges, and return single
20 /// bytes or slices, respectively.
22 /// This trait is sealed such that callers cannot implement it. In general,
23 /// callers should not need to interact with this trait directly unless you're
24 /// defining generic functions that index or slice a byte string.
25 pub trait SliceIndex
: Sealed
{
26 /// The output type returned by methods. For indexing by position, this
27 /// is always a single byte (`u8`). For ranges, this is always a slice
31 /// Returns a shared reference to the output at this location, if in
33 fn get(self, slice
: &BStr
) -> Option
<&Self::Output
>;
35 /// Returns a mutable reference to the output at this location, if in
37 fn get_mut(self, slice
: &mut BStr
) -> Option
<&mut Self::Output
>;
39 /// Returns a shared reference to the output at this location, without
40 /// performing any bounds checking.
41 unsafe fn get_unchecked(self, slice
: &BStr
) -> &Self::Output
;
43 /// Returns a mutable reference to the output at this location, without
44 /// performing any bounds checking.
45 unsafe fn get_unchecked_mut(self, slice
: &mut BStr
) -> &mut Self::Output
;
47 /// Returns a shared reference to the output at this location, panicking
49 fn index(self, slice
: &BStr
) -> &Self::Output
;
51 /// Returns a mutable reference to the output at this location, panicking
53 fn index_mut(self, slice
: &mut BStr
) -> &mut Self::Output
;
56 impl SliceIndex
for usize {
60 fn get(self, slice
: &BStr
) -> Option
<&u8> {
61 slice
.as_bytes().get(self)
65 fn get_mut(self, slice
: &mut BStr
) -> Option
<&mut u8> {
66 slice
.as_bytes_mut().get_mut(self)
70 unsafe fn get_unchecked(self, slice
: &BStr
) -> &u8 {
71 slice
.as_bytes().get_unchecked(self)
75 unsafe fn get_unchecked_mut(self, slice
: &mut BStr
) -> &mut u8 {
76 slice
.as_bytes_mut().get_unchecked_mut(self)
80 fn index(self, slice
: &BStr
) -> &u8 {
81 &slice
.as_bytes()[self]
85 fn index_mut(self, slice
: &mut BStr
) -> &mut u8 {
86 &mut slice
.as_bytes_mut()[self]
90 impl SliceIndex
for ops
::Range
<usize> {
94 fn get(self, slice
: &BStr
) -> Option
<&BStr
> {
95 slice
.as_bytes().get(self).map(BStr
::new
)
99 fn get_mut(self, slice
: &mut BStr
) -> Option
<&mut BStr
> {
100 slice
.as_bytes_mut().get_mut(self).map(BStr
::new_mut
)
104 unsafe fn get_unchecked(self, slice
: &BStr
) -> &BStr
{
105 BStr
::new(slice
.as_bytes().get_unchecked(self))
109 unsafe fn get_unchecked_mut(self, slice
: &mut BStr
) -> &mut BStr
{
110 BStr
::new_mut(slice
.as_bytes_mut().get_unchecked_mut(self))
114 fn index(self, slice
: &BStr
) -> &BStr
{
119 fn index_mut(self, slice
: &mut BStr
) -> &mut BStr
{
124 impl SliceIndex
for ops
::RangeTo
<usize> {
128 fn get(self, slice
: &BStr
) -> Option
<&BStr
> {
129 slice
.as_bytes().get(self).map(BStr
::new
)
133 fn get_mut(self, slice
: &mut BStr
) -> Option
<&mut BStr
> {
134 slice
.as_bytes_mut().get_mut(self).map(BStr
::new_mut
)
138 unsafe fn get_unchecked(self, slice
: &BStr
) -> &BStr
{
139 BStr
::new(slice
.as_bytes().get_unchecked(self))
143 unsafe fn get_unchecked_mut(self, slice
: &mut BStr
) -> &mut BStr
{
144 BStr
::new_mut(slice
.as_bytes_mut().get_unchecked_mut(self))
148 fn index(self, slice
: &BStr
) -> &BStr
{
153 fn index_mut(self, slice
: &mut BStr
) -> &mut BStr
{
158 impl SliceIndex
for ops
::RangeFrom
<usize> {
162 fn get(self, slice
: &BStr
) -> Option
<&BStr
> {
163 slice
.as_bytes().get(self).map(BStr
::new
)
167 fn get_mut(self, slice
: &mut BStr
) -> Option
<&mut BStr
> {
168 slice
.as_bytes_mut().get_mut(self).map(BStr
::new_mut
)
172 unsafe fn get_unchecked(self, slice
: &BStr
) -> &BStr
{
173 BStr
::new(slice
.as_bytes().get_unchecked(self))
177 unsafe fn get_unchecked_mut(self, slice
: &mut BStr
) -> &mut BStr
{
178 BStr
::new_mut(slice
.as_bytes_mut().get_unchecked_mut(self))
182 fn index(self, slice
: &BStr
) -> &BStr
{
187 fn index_mut(self, slice
: &mut BStr
) -> &mut BStr
{
192 impl SliceIndex
for ops
::RangeFull
{
196 fn get(self, slice
: &BStr
) -> Option
<&BStr
> {
197 slice
.as_bytes().get(self).map(BStr
::new
)
201 fn get_mut(self, slice
: &mut BStr
) -> Option
<&mut BStr
> {
202 slice
.as_bytes_mut().get_mut(self).map(BStr
::new_mut
)
206 unsafe fn get_unchecked(self, slice
: &BStr
) -> &BStr
{
207 BStr
::new(slice
.as_bytes().get_unchecked(self))
211 unsafe fn get_unchecked_mut(self, slice
: &mut BStr
) -> &mut BStr
{
212 BStr
::new_mut(slice
.as_bytes_mut().get_unchecked_mut(self))
216 fn index(self, slice
: &BStr
) -> &BStr
{
221 fn index_mut(self, slice
: &mut BStr
) -> &mut BStr
{
226 impl SliceIndex
for ops
::RangeInclusive
<usize> {
230 fn get(self, slice
: &BStr
) -> Option
<&BStr
> {
231 slice
.as_bytes().get(self).map(BStr
::new
)
235 fn get_mut(self, slice
: &mut BStr
) -> Option
<&mut BStr
> {
236 slice
.as_bytes_mut().get_mut(self).map(BStr
::new_mut
)
240 unsafe fn get_unchecked(self, slice
: &BStr
) -> &BStr
{
241 BStr
::new(slice
.as_bytes().get_unchecked(self))
245 unsafe fn get_unchecked_mut(self, slice
: &mut BStr
) -> &mut BStr
{
246 BStr
::new_mut(slice
.as_bytes_mut().get_unchecked_mut(self))
250 fn index(self, slice
: &BStr
) -> &BStr
{
255 fn index_mut(self, slice
: &mut BStr
) -> &mut BStr
{
260 impl SliceIndex
for ops
::RangeToInclusive
<usize> {
264 fn get(self, slice
: &BStr
) -> Option
<&BStr
> {
265 slice
.as_bytes().get(self).map(BStr
::new
)
269 fn get_mut(self, slice
: &mut BStr
) -> Option
<&mut BStr
> {
270 slice
.as_bytes_mut().get_mut(self).map(BStr
::new_mut
)
274 unsafe fn get_unchecked(self, slice
: &BStr
) -> &BStr
{
275 BStr
::new(slice
.as_bytes().get_unchecked(self))
279 unsafe fn get_unchecked_mut(self, slice
: &mut BStr
) -> &mut BStr
{
280 BStr
::new_mut(slice
.as_bytes_mut().get_unchecked_mut(self))
284 fn index(self, slice
: &BStr
) -> &BStr
{
289 fn index_mut(self, slice
: &mut BStr
) -> &mut BStr
{