Simplify 'for' loop by keeping more information about iterator
authorunC0Rr
Mon, 03 Feb 2025 15:25:28 +0100
changeset 16082 669cdf697f16
parent 16081 ac8a3f377197
child 16083 004258297037
Simplify 'for' loop by keeping more information about iterator
rust/mapgen/src/lib.rs
rust/mapgen/src/theme.rs
rust/vec2d/src/lib.rs
--- a/rust/mapgen/src/lib.rs	Mon Feb 03 15:03:26 2025 +0100
+++ b/rust/mapgen/src/lib.rs	Mon Feb 03 15:25:28 2025 +0100
@@ -66,9 +66,8 @@
         let mut texture = Vec2D::new(&land.size().size(), 0);
 
         if let Some(land_sprite) = theme.land_texture() {
-            for (row_index, (land_row, tex_row)) in land.rows().zip(texture.rows_mut()).enumerate()
+            for (sprite_row, (land_row, tex_row)) in land_sprite.rows().cycle().zip(land.rows().zip(texture.rows_mut()))
             {
-                let sprite_row = land_sprite.get_row(row_index % land_sprite.height() as usize);
                 let mut x_offset = 0;
                 while sprite_row.len() < land.width() - x_offset {
                     let copy_range = x_offset..x_offset + sprite_row.len();
--- a/rust/mapgen/src/theme.rs	Mon Feb 03 15:03:26 2025 +0100
+++ b/rust/mapgen/src/theme.rs	Mon Feb 03 15:25:28 2025 +0100
@@ -7,7 +7,7 @@
     path::Path,
     slice::{from_raw_parts, from_raw_parts_mut},
 };
-
+use std::slice::ChunksExact;
 use integral_geometry::Size;
 use vec2d::Vec2D;
 
@@ -32,7 +32,7 @@
     }
 
     #[inline]
-    pub fn rows(&self) -> impl DoubleEndedIterator<Item = &[u32]> {
+    pub fn rows(&self) -> ChunksExact<u32> {
         self.pixels.rows()
     }
 
--- a/rust/vec2d/src/lib.rs	Mon Feb 03 15:03:26 2025 +0100
+++ b/rust/vec2d/src/lib.rs	Mon Feb 03 15:25:28 2025 +0100
@@ -1,7 +1,7 @@
 use integral_geometry::Size;
 use std::{
     ops::{Index, IndexMut},
-    slice::SliceIndex,
+    slice::{ChunksExact, ChunksExactMut, SliceIndex},
 };
 
 #[derive(Debug, Clone)]
@@ -114,12 +114,12 @@
     }
 
     #[inline]
-    pub fn rows(&self) -> impl DoubleEndedIterator<Item = &[T]> {
+    pub fn rows(&self) -> ChunksExact<'_, T> {
         self.data.chunks_exact(self.width())
     }
 
     #[inline]
-    pub fn rows_mut(&mut self) -> impl DoubleEndedIterator<Item = &mut [T]> {
+    pub fn rows_mut(&mut self) -> ChunksExactMut<'_, T> {
         let width = self.width();
         self.data.chunks_exact_mut(width)
     }