implement arrays
This commit is contained in:
parent
6020b173a0
commit
1b503549b3
1 changed files with 31 additions and 6 deletions
|
|
@ -1,18 +1,43 @@
|
||||||
|
use crate::{EncodedValue, Uleb128};
|
||||||
use crate::{ReadSeek, Result, Serializable};
|
use crate::{ReadSeek, Result, Serializable};
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
|
|
||||||
|
/// Encoded Array: https://source.android.com/docs/core/runtime/dex-format#encoded-array
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
pub struct EncodedArray;
|
pub struct EncodedArray {
|
||||||
|
// pub size: Uleb128,
|
||||||
|
pub values: Vec<EncodedValue>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl EncodedArray {
|
||||||
|
/// Return the size field
|
||||||
|
pub fn size(&self) -> Uleb128 {
|
||||||
|
Uleb128(self.values.len() as u32)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Serializable for EncodedArray {
|
impl Serializable for EncodedArray {
|
||||||
fn serialize(&self, _output: &mut dyn Write) -> Result<()> {
|
fn serialize(&self, output: &mut dyn Write) -> Result<()> {
|
||||||
todo!()
|
self.size().serialize(output)?;
|
||||||
|
for value in self.values {
|
||||||
|
value.serialize(output)?;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
fn deserialize(_input: &mut dyn ReadSeek) -> Result<Self> {
|
|
||||||
todo!()
|
fn deserialize(input: &mut dyn ReadSeek) -> Result<Self> {
|
||||||
|
let Uleb128(size) = Uleb128::deserialize(input)?;
|
||||||
|
let mut values = vec![];
|
||||||
|
for _ in 0..size {
|
||||||
|
values.push(EncodedValue::deserialize(input)?);
|
||||||
|
}
|
||||||
|
Ok(Self {
|
||||||
|
// size: Uleb128(size),
|
||||||
|
values,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn size(&self) -> usize {
|
fn size(&self) -> usize {
|
||||||
todo!()
|
self.size().size() + self.values.iter().map(|val| val.size()).sum::<usize>()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue