From 6ae2681aa1abc1fa447d64d2a269878e29b1d904 Mon Sep 17 00:00:00 2001 From: memdmp Date: Sun, 25 Jan 2026 16:31:33 +0100 Subject: feat: paralllelism, memory overcommitment to save on repeated mallocs --- src/xcursor.rs | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) (limited to 'src/xcursor.rs') diff --git a/src/xcursor.rs b/src/xcursor.rs index ff6c3d6..8d329bf 100644 --- a/src/xcursor.rs +++ b/src/xcursor.rs @@ -31,11 +31,14 @@ 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_iterated(data: &mut Vec, new_data: impl IntoIterator) { + // for int in new_data { + // data.push(int); + // } + // } fn insert_int(data: &mut Vec, int: u32) { data.push((int & 0xff) as u8); data.push(((int >> 8) & 0xff) as u8); @@ -44,11 +47,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 +69,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 +85,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 +99,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