diff options
| author | metamuffin <metamuffin@disroot.org> | 2026-01-07 14:29:16 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2026-01-07 14:29:16 +0100 |
| commit | 095d4234558c39f28ddc777f123a15e410a74c14 (patch) | |
| tree | a69ef65ab41816e11b2e1d2f68d972526ae07c08 /common/object | |
| parent | 7cc5fe5cd008072b99fc470b0ed730f7fa4e2881 (diff) | |
| download | jellything-095d4234558c39f28ddc777f123a15e410a74c14.tar jellything-095d4234558c39f28ddc777f123a15e410a74c14.tar.bz2 jellything-095d4234558c39f28ddc777f123a15e410a74c14.tar.zst | |
fix insert
Diffstat (limited to 'common/object')
| -rw-r--r-- | common/object/src/lib.rs | 10 | ||||
| -rw-r--r-- | common/object/src/tests.rs | 7 |
2 files changed, 13 insertions, 4 deletions
diff --git a/common/object/src/lib.rs b/common/object/src/lib.rs index 0f059b0..bb21942 100644 --- a/common/object/src/lib.rs +++ b/common/object/src/lib.rs @@ -114,8 +114,8 @@ impl<'a> Object<'a> { pub fn insert_multi<T: ValueStore>(&self, tag: TypedTag<T>, values: &[T]) -> ObjectBuffer { let prefix = self.tags.partition_point(|&x| x < tag.0.0); let suffix = self.tags.partition_point(|&x| x <= tag.0.0); - let values_prefix = self.offset(prefix + 1); - let values_suffix = self.offset(suffix + 1); + let values_prefix = self.offset(prefix); + let values_suffix = self.offset(suffix); let mut buf = Vec::new(); let cut_size = suffix - prefix; @@ -149,10 +149,12 @@ impl<'a> Object<'a> { buf.extend(bytemuck::cast_slice(&temp)); } } - let insert_size = (buf.len() - values_new) as u32; + let values_insert_size = buf.len() - values_new; + let values_cut_size = values_suffix - values_prefix; + let suffix_offset = (values_insert_size as i32 - values_cut_size as i32) * 4; buf[suffix_offs..suffix_end] .iter_mut() - .for_each(|e| *e += insert_size << 2); + .for_each(|e| *e = e.strict_add_signed(suffix_offset)); buf.extend(&self.values[values_suffix..]); ObjectBuffer(buf) diff --git a/common/object/src/tests.rs b/common/object/src/tests.rs index 86c0287..6ffa9e5 100644 --- a/common/object/src/tests.rs +++ b/common/object/src/tests.rs @@ -63,9 +63,16 @@ fn insert() { let bob = test_object(); let edward = bob.as_object().insert(NAME, "Edward"); + eprintln!("{:#?}", bob.as_object()); let edward = edward.as_object(); eprintln!("{edward:#?}"); assert_eq!(edward.get(NAME), Some("Edward")); + assert_eq!(edward.get(AGE), Some(35)); + + let mut friends = edward.iter(FRIEND); + assert_eq!(friends.next(), Some("Alice")); + assert_eq!(friends.next(), Some("Charlie")); + assert_eq!(friends.next(), None); } #[test] |