Returns an iterator over the last `suffix_len` bytes of each array element, including null values. Note that for [`StringViewArray`] the last bytes may start in the middle of a UTF-8 codepoint, and thus may not be a valid `&str`. If `suffix_len` is larger than the element's length, the iterator will return an empty slice (`&[]`).
(&self, suffix_len: usize)
| 417 | /// If `suffix_len` is larger than the element's length, the iterator will |
| 418 | /// return an empty slice (`&[]`). |
| 419 | pub fn suffix_bytes_iter(&self, suffix_len: usize) -> impl Iterator<Item = &[u8]> { |
| 420 | self.views().into_iter().map(move |v| { |
| 421 | let len = (*v as u32) as usize; |
| 422 | |
| 423 | if len < suffix_len { |
| 424 | return &[] as &[u8]; |
| 425 | } |
| 426 | |
| 427 | if len as u32 <= MAX_INLINE_VIEW_LEN { |
| 428 | unsafe { &StringViewArray::inline_value(v, len)[len - suffix_len..] } |
| 429 | } else { |
| 430 | let view = ByteView::from(*v); |
| 431 | let data = unsafe { |
| 432 | self.data_buffers() |
| 433 | .get_unchecked(view.buffer_index as usize) |
| 434 | }; |
| 435 | let offset = view.offset as usize; |
| 436 | unsafe { data.get_unchecked(offset + len - suffix_len..offset + len) } |
| 437 | } |
| 438 | }) |
| 439 | } |
| 440 | |
| 441 | /// Return an iterator over the length of each array element, including null values. |
| 442 | /// |
no test coverage detected