From 9b5d11a2a39e0030ce4eeab8905972f9472c7d27 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Fri, 16 Jan 2026 04:21:06 +0100 Subject: object extend method --- common/object/src/value.rs | 53 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 52 insertions(+), 1 deletion(-) (limited to 'common/object/src/value.rs') diff --git a/common/object/src/value.rs b/common/object/src/value.rs index aad6101..83878d3 100644 --- a/common/object/src/value.rs +++ b/common/object/src/value.rs @@ -4,7 +4,7 @@ Copyright (C) 2026 metamuffin */ -use crate::{Object, ObjectBuffer}; +use crate::{Object, ObjectBuffer, Tag}; pub trait Value<'a>: ValueStore + Sized { const ALIGNED: bool; @@ -57,6 +57,23 @@ impl ValueStore for u32 { 4 } } +impl Value<'_> for Tag { + const ALIGNED: bool = true; + fn load_aligned(buf: &[u32]) -> Option { + buf.get(0).copied().map(u32::from_be).map(Tag) + } +} +impl ValueStore for Tag { + fn is_aligned(&self) -> bool { + true + } + fn store_aligned(&self, buf: &mut Vec) { + buf.push(self.0.to_be()); + } + fn size(&self) -> usize { + 4 + } +} impl Value<'_> for u64 { const ALIGNED: bool = false; fn load_aligned(buf: &[u32]) -> Option { @@ -77,6 +94,40 @@ impl ValueStore for u64 { 8 } } +impl Value<'_> for f64 { + const ALIGNED: bool = false; + fn load_aligned(buf: &[u32]) -> Option { + u32::load_aligned(buf).map(|x| x as f64) + } +} +impl ValueStore for f64 { + fn is_aligned(&self) -> bool { + true + } + fn store_aligned(&self, buf: &mut Vec) { + (*self as u64).store_aligned(buf); + } + fn size(&self) -> usize { + 8 + } +} +impl Value<'_> for i64 { + const ALIGNED: bool = false; + fn load_aligned(buf: &[u32]) -> Option { + u32::load_aligned(buf).map(|x| x as i64) + } +} +impl ValueStore for i64 { + fn is_aligned(&self) -> bool { + true + } + fn store_aligned(&self, buf: &mut Vec) { + (*self as u64).store_aligned(buf); + } + fn size(&self) -> usize { + 8 + } +} impl<'a> Value<'a> for Object<'a> { const ALIGNED: bool = true; fn load_aligned(buf: &'a [u32]) -> Option { -- cgit v1.3