update on EntityList decoding

This commit is contained in:
mykola2312 2023-09-04 03:03:51 +03:00
parent ff900bf123
commit 6d7b9f735b

View file

@ -18,6 +18,7 @@ pub struct EntityList {
encoding: EntityEncoding, encoding: EntityEncoding,
entity_file_tag: Option<Tag>, entity_file_tag: Option<Tag>,
entity_tag: Option<Tag>, entity_tag: Option<Tag>,
enc_size: usize,
types: Vec<FString>, types: Vec<FString>,
entities: Vec<Entity> entities: Vec<Entity>
@ -48,3 +49,51 @@ impl EntityList {
&self.types[type_idx] &self.types[type_idx]
} }
} }
impl DecoderCtx<EntityEncoding> for EntityList {
fn decode(raw: &Raw, offset: usize, size: usize, ctx: EntityEncoding) -> Result<Self> {
let mut rd = ReadStream::new(raw, offset);
let mut ent_list = EntityList {
encoding: ctx,
entity_file_tag: None,
entity_tag: None,
enc_size: 0,
types: Vec::new(),
entities: Vec::new()
};
Ok(match ctx {
EntityEncoding::File => {
let mut first = true;
while rd.offset() < size {
let tag: Tag = rd.read(0)?;
if (first) {
ent_list.entity_tag = Some(tag);
first = false;
}
let ent: Entity = rd.read_opt(0, &mut ent_list)?;
ent_list.entities.push(ent);
}
ent_list.enc_size = rd.offset() - offset;
ent_list
},
EntityEncoding::World => {
ent_list.enc_size = rd.offset() - offset;
ent_list
}
})
}
fn encode(&self, ctx: EntityEncoding) -> Result<Raw> {
todo!();
}
fn get_enc_size(&self) -> usize {
todo!();
}
}