aboutsummaryrefslogtreecommitdiff
path: root/common/object
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2026-01-07 14:29:16 +0100
committermetamuffin <metamuffin@disroot.org>2026-01-07 14:29:16 +0100
commit095d4234558c39f28ddc777f123a15e410a74c14 (patch)
treea69ef65ab41816e11b2e1d2f68d972526ae07c08 /common/object
parent7cc5fe5cd008072b99fc470b0ed730f7fa4e2881 (diff)
downloadjellything-095d4234558c39f28ddc777f123a15e410a74c14.tar
jellything-095d4234558c39f28ddc777f123a15e410a74c14.tar.bz2
jellything-095d4234558c39f28ddc777f123a15e410a74c14.tar.zst
fix insert
Diffstat (limited to 'common/object')
-rw-r--r--common/object/src/lib.rs10
-rw-r--r--common/object/src/tests.rs7
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]