mirror of
https://github.com/xavo95/repak.git
synced 2025-01-18 19:04:07 +00:00
Factor out compression index size version check
This commit is contained in:
parent
55d419df74
commit
78c4725d73
1 changed files with 21 additions and 10 deletions
|
@ -36,6 +36,18 @@ fn align(offset: u64) -> u64 {
|
||||||
(offset + 15) & !15
|
(offset + 15) & !15
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn compression_index_size(version: Version) -> CompressionIndexSize {
|
||||||
|
match version {
|
||||||
|
Version::V8A => CompressionIndexSize::U8,
|
||||||
|
_ => CompressionIndexSize::U32,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
enum CompressionIndexSize {
|
||||||
|
U8,
|
||||||
|
U32,
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub(crate) struct Entry {
|
pub(crate) struct Entry {
|
||||||
pub offset: u64,
|
pub offset: u64,
|
||||||
|
@ -65,9 +77,9 @@ impl Entry {
|
||||||
size += 8; // offset
|
size += 8; // offset
|
||||||
size += 8; // compressed
|
size += 8; // compressed
|
||||||
size += 8; // uncompressed
|
size += 8; // uncompressed
|
||||||
size += match version != Version::V8A {
|
size += match compression_index_size(version) {
|
||||||
true => 4, // 32 bit compression
|
CompressionIndexSize::U8 => 1, // 8 bit compression
|
||||||
false => 1, // 8 bit compression
|
CompressionIndexSize::U32 => 4, // 32 bit compression
|
||||||
};
|
};
|
||||||
size += match version.version_major() == VersionMajor::Initial {
|
size += match version.version_major() == VersionMajor::Initial {
|
||||||
true => 8, // timestamp
|
true => 8, // timestamp
|
||||||
|
@ -223,10 +235,9 @@ impl Entry {
|
||||||
let offset = reader.read_u64::<LE>()?;
|
let offset = reader.read_u64::<LE>()?;
|
||||||
let compressed = reader.read_u64::<LE>()?;
|
let compressed = reader.read_u64::<LE>()?;
|
||||||
let uncompressed = reader.read_u64::<LE>()?;
|
let uncompressed = reader.read_u64::<LE>()?;
|
||||||
let compression = match if version == Version::V8A {
|
let compression = match match compression_index_size(version) {
|
||||||
reader.read_u8()? as u32
|
CompressionIndexSize::U8 => reader.read_u8()? as u32,
|
||||||
} else {
|
CompressionIndexSize::U32 => reader.read_u32::<LE>()?,
|
||||||
reader.read_u32::<LE>()?
|
|
||||||
} {
|
} {
|
||||||
0 => None,
|
0 => None,
|
||||||
n => Some(n - 1),
|
n => Some(n - 1),
|
||||||
|
@ -267,9 +278,9 @@ impl Entry {
|
||||||
writer.write_u64::<LE>(self.compressed)?;
|
writer.write_u64::<LE>(self.compressed)?;
|
||||||
writer.write_u64::<LE>(self.uncompressed)?;
|
writer.write_u64::<LE>(self.uncompressed)?;
|
||||||
let compression = self.compression_slot.map_or(0, |n| n + 1);
|
let compression = self.compression_slot.map_or(0, |n| n + 1);
|
||||||
match version {
|
match compression_index_size(version) {
|
||||||
Version::V8A => writer.write_u8(compression.try_into().unwrap())?,
|
CompressionIndexSize::U8 => writer.write_u8(compression.try_into().unwrap())?,
|
||||||
_ => writer.write_u32::<LE>(compression)?,
|
CompressionIndexSize::U32 => writer.write_u32::<LE>(compression)?,
|
||||||
}
|
}
|
||||||
|
|
||||||
if version.version_major() == VersionMajor::Initial {
|
if version.version_major() == VersionMajor::Initial {
|
||||||
|
|
Loading…
Reference in a new issue