From 205aca90d6c21f3dd73b576c06f5ab8c1010772a Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 22 Mar 2025 19:48:53 +0100 Subject: horrible pptr external files system --- src/object/mod.rs | 6 ++++-- src/object/read.rs | 15 ++++++++------- 2 files changed, 12 insertions(+), 9 deletions(-) (limited to 'src/object') diff --git a/src/object/mod.rs b/src/object/mod.rs index 08f76cd..43cb011 100644 --- a/src/object/mod.rs +++ b/src/object/mod.rs @@ -1,5 +1,6 @@ +use crate::serialized_file::ExternalsContext; use serde::Serialize; -use std::collections::BTreeMap; +use std::{collections::BTreeMap, sync::Arc}; pub mod helper; pub mod parser; @@ -21,7 +22,8 @@ pub enum Value { Array(Vec), Object { class: String, - file: usize, + #[serde(skip)] + ecx: Arc, fields: BTreeMap, }, Typeless(Vec), diff --git a/src/object/read.rs b/src/object/read.rs index c41163a..013874c 100644 --- a/src/object/read.rs +++ b/src/object/read.rs @@ -1,16 +1,17 @@ use super::Value; use crate::helper::{AlignExt, Endianness, ReadExt}; -use crate::serialized_file::TypeTreeNode; +use crate::serialized_file::{ExternalsContext, TypeTreeNode}; use anyhow::{Result, bail}; use log::trace; use std::io::Seek; +use std::sync::Arc; use std::{collections::BTreeMap, io::Read}; impl Value { pub fn read( ty: &TypeTreeNode, e: Endianness, - file: usize, + ecx: &Arc, data: &mut (impl Read + Seek), ) -> Result { let mut align = false; @@ -41,7 +42,7 @@ impl Value { Ok(Value::F64(data.read_f64(e)?)) } "string" => { - let Value::Array(arr) = Value::read(&ty.children[0], e, file, data)? else { + let Value::Array(arr) = Value::read(&ty.children[0], e, ecx, data)? else { unreachable!() }; let bytes = arr @@ -56,13 +57,13 @@ impl Value { "Array" => { align |= ty.children[0].post_align(); assert_eq!(ty.byte_size, -1); - let Value::I32(size) = Value::read(&ty.children[0], e, file, data)? else { + let Value::I32(size) = Value::read(&ty.children[0], e, ecx, data)? else { unreachable!() }; trace!("array of size {size}"); let mut elems = Vec::new(); for _ in 0..size { - elems.push(Value::read(&ty.children[1], e, file, data)?); + elems.push(Value::read(&ty.children[1], e, ecx, data)?); } Ok(Value::Array(elems)) } @@ -78,11 +79,11 @@ impl Value { } let mut fields = BTreeMap::new(); for c in &ty.children { - fields.insert(c.name_string.clone(), Value::read(&c, e, file, data)?); + fields.insert(c.name_string.clone(), Value::read(&c, e, ecx, data)?); } Ok(Value::Object { fields, - file, + ecx: ecx.to_owned(), class: ty.type_string.clone(), }) } -- cgit v1.2.3-70-g09d2