From 1c17d0e09b4eb837a9217a6836d964eb86d9e9b8 Mon Sep 17 00:00:00 2001 From: memdmp Date: Sun, 25 Jan 2026 16:54:28 +0100 Subject: feat: overalloc --- src/xcursor.rs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'src/xcursor.rs') diff --git a/src/xcursor.rs b/src/xcursor.rs index ff6c3d6..7e365e4 100644 --- a/src/xcursor.rs +++ b/src/xcursor.rs @@ -31,10 +31,8 @@ impl XCursorEncoder { } pub fn pack(&mut self) -> Vec { - fn insert_bytes(data: &mut Vec, new_data: impl IntoIterator) { - for int in new_data { - data.push(int); - } + fn insert_bytes(data: &mut Vec, new_data: &[u8]) { + data.extend_from_slice(new_data); } fn insert_int(data: &mut Vec, int: u32) { data.push((int & 0xff) as u8); @@ -44,11 +42,15 @@ impl XCursorEncoder { } let mut data: Vec = Vec::new(); + #[cfg(feature="overalloc")] + data.reserve( + 4194304 + ); // File Header { // MAGIC string ("Xcur") - insert_bytes(&mut data, MAGIC); + insert_bytes(&mut data, &MAGIC); // CARD32 bytes in this header insert_int(&mut data, 16); // CARD32 file version @@ -62,7 +64,7 @@ impl XCursorEncoder { let mut img_idx: usize = 0; for img in self.images.clone().into_iter() { // Some header - insert_bytes(&mut data, IMAGE_HEADER); + insert_bytes(&mut data, &IMAGE_HEADER); // CARD32 type-specific label - size for images insert_int(&mut data, img.r#type); // CARD32 absolute byte position of table in file @@ -78,7 +80,7 @@ impl XCursorEncoder { // Header Size (36) insert_int(&mut data, 36); // Image Type - insert_bytes(&mut data, IMAGE_HEADER); + insert_bytes(&mut data, &IMAGE_HEADER); // Subtype, for nominal size insert_int(&mut data, img.subtype); // Version @@ -92,7 +94,7 @@ impl XCursorEncoder { // Milliseconds till next frame insert_int(&mut data, img.delay); // Raw image data - insert_bytes(&mut data, img.data); + insert_bytes(&mut data, &img.data); } } -- cgit v1.2.3