From a8cf6007136779c121d90888ec976108baefa8b6 Mon Sep 17 00:00:00 2001 From: HampusM <hampus@hampusmat.com> Date: Sun, 30 Mar 2025 23:12:47 +0200 Subject: feat: add FieldSlice get_item fn --- src/lib.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src') diff --git a/src/lib.rs b/src/lib.rs index 6282a8b..6f0c95f 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -731,6 +731,24 @@ impl FieldSlice<'_> unsafe { self.bytes.cast::<Item>() } } + pub fn get_item(&self, item_index: usize) -> Option<Field<'_>> + { + let start_off = self.get_item_offset(item_index)?; + + if item_index >= self.len { + return None; + } + + let field_bytes = self + .bytes + .get(start_off..start_off + self.field_metadata.size)?; + + Some(Field { + bytes: field_bytes, + field_metadata: self.field_metadata, + }) + } + pub fn iter(&self) -> FieldSliceIter<'_> { FieldSliceIter { @@ -740,6 +758,15 @@ impl FieldSlice<'_> field_metadata: self.field_metadata, } } + + fn get_item_offset(&self, item_index: usize) -> Option<usize> + { + if item_index >= self.len { + return None; + } + + Some(item_index * self.field_metadata.size) + } } #[derive(Debug)] -- cgit v1.2.3-18-g5258