mirror of
https://github.com/lifegpc/msg-tool.git
synced 2026-06-09 06:18:46 +08:00
Add BGI Image decode support
Fix DSC decompress
This commit is contained in:
@@ -1040,14 +1040,14 @@ impl<'a> CPeek for MemReaderRef<'a> {
|
||||
fn cpeek(&self, buf: &mut [u8]) -> Result<usize> {
|
||||
let len = self.data.len();
|
||||
let bytes_to_read = std::cmp::min(buf.len(), len - self.pos);
|
||||
buf.copy_from_slice(&self.data[self.pos..self.pos + bytes_to_read]);
|
||||
buf[..bytes_to_read].copy_from_slice(&self.data[self.pos..self.pos + bytes_to_read]);
|
||||
Ok(bytes_to_read)
|
||||
}
|
||||
|
||||
fn cpeek_at(&self, offset: usize, buf: &mut [u8]) -> Result<usize> {
|
||||
let len = self.data.len();
|
||||
let bytes_to_read = std::cmp::min(buf.len(), len - offset);
|
||||
buf.copy_from_slice(&self.data[offset..offset + bytes_to_read]);
|
||||
buf[..bytes_to_read].copy_from_slice(&self.data[offset..offset + bytes_to_read]);
|
||||
Ok(bytes_to_read)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,17 +4,21 @@ pub trait VecExt<T> {
|
||||
}
|
||||
|
||||
impl<T: Copy> VecExt<T> for Vec<T> {
|
||||
fn copy_overlapped(&mut self, src: usize, dst: usize, len: usize) {
|
||||
let src = src.min(self.len());
|
||||
let dst = dst.min(self.len());
|
||||
if src < dst {
|
||||
let max_count = len.min(dst - src);
|
||||
for i in 0..max_count {
|
||||
self[dst + i] = self[src + i];
|
||||
fn copy_overlapped(&mut self, src: usize, dst: usize, mut len: usize) {
|
||||
let mut src = src.min(self.len());
|
||||
let mut dst = dst.min(self.len());
|
||||
if dst > src {
|
||||
while len > 0 {
|
||||
let preceding = (dst - src).min(len);
|
||||
for i in 0..preceding {
|
||||
self[dst + i] = self[src + i];
|
||||
}
|
||||
len -= preceding;
|
||||
src += preceding;
|
||||
dst += preceding;
|
||||
}
|
||||
} else {
|
||||
let max_count = len.min(src - dst);
|
||||
for i in (0..max_count).rev() {
|
||||
for i in 0..len {
|
||||
self[dst + i] = self[src + i];
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user