test ReadStream with SGD decoding
This commit is contained in:
parent
aa0990e472
commit
26c99c529d
2 changed files with 21 additions and 31 deletions
|
|
@ -10,11 +10,10 @@ pub struct ReadStream<'a> {
|
|||
}
|
||||
|
||||
impl<'a> ReadStream<'a> {
|
||||
pub fn new(raw: &Raw, offset: usize) -> ReadStream {
|
||||
ReadStream {
|
||||
raw: raw,
|
||||
rdr: Cursor::new(&raw.mem[offset..]),
|
||||
}
|
||||
pub fn new(raw: &Raw, start: usize) -> ReadStream {
|
||||
let mut rdr = Cursor::new(&raw.mem[..]);
|
||||
rdr.set_position(start as u64);
|
||||
ReadStream { raw: raw, rdr: rdr }
|
||||
}
|
||||
|
||||
pub fn offset(&self) -> usize {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
use super::decoder::Decoder;
|
||||
use super::fstring::FString;
|
||||
use super::raw::Raw;
|
||||
use super::stream::ReadStream;
|
||||
use super::tag::Tag;
|
||||
use anyhow::anyhow;
|
||||
use anyhow::Result;
|
||||
|
|
@ -23,37 +24,27 @@ impl World {
|
|||
|
||||
pub fn test(&self) -> Result<()> {
|
||||
let sgd_start: usize = 0x4E;
|
||||
let mut cur = sgd_start;
|
||||
cur += Tag::decode(&self.data, sgd_start, 0)?.get_enc_size();
|
||||
cur += 0x48;
|
||||
let mut sgd = ReadStream::new(&self.data, sgd_start);
|
||||
let _ = sgd.read::<Tag>(0)?;
|
||||
sgd.skip(0x48);
|
||||
|
||||
let mut rdr = Cursor::new(&self.data.mem[..]);
|
||||
rdr.set_position(cur as u64);
|
||||
let N = rdr.read_u32::<LittleEndian>()?;
|
||||
|
||||
let mut names: Vec<FString> = Vec::new();
|
||||
cur += 4;
|
||||
for _ in 0..N {
|
||||
let name = FString::decode(&self.data, cur, 0)?;
|
||||
cur += name.get_enc_size();
|
||||
names.push(name);
|
||||
let n = sgd.read_u32()?;
|
||||
dbg!(sgd.offset(), n);
|
||||
let mut names: Vec<FString> = Vec::with_capacity(n as usize);
|
||||
for _ in 0..n {
|
||||
names.push(sgd.read::<FString>(0)?);
|
||||
}
|
||||
dbg!(names);
|
||||
|
||||
let unk1 = rdr.read_u32::<LittleEndian>()?;
|
||||
cur += 4;
|
||||
for _ in 0..N {
|
||||
rdr.set_position(cur as u64);
|
||||
let M = rdr.read_u32::<LittleEndian>()?;
|
||||
cur += 4;
|
||||
dbg!(M, cur);
|
||||
let mut strings: Vec<FString> = Vec::new();
|
||||
for _ in 0..M {
|
||||
let str = FString::decode(&self.data, cur, 0)?;
|
||||
cur += str.get_enc_size();
|
||||
strings.push(str);
|
||||
let unk1 = sgd.read_u32()?;
|
||||
dbg!(unk1);
|
||||
for _ in 0..n {
|
||||
let m = sgd.read_u32()?;
|
||||
let mut replics: Vec<FString> = Vec::with_capacity(m as usize);
|
||||
for _ in 0..m {
|
||||
replics.push(sgd.read::<FString>(0)?);
|
||||
}
|
||||
dbg!(strings);
|
||||
dbg!(replics);
|
||||
}
|
||||
|
||||
Ok(())
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue