move unstable code out of lib.rs

This commit is contained in:
numzero 2026-10-27 19:35:49 +03:00
parent 1a91735a6a
commit 6bf0376ac6
2 changed files with 24 additions and 22 deletions

22
src/iter.rs Normal file
View File

@ -0,0 +1,22 @@
use std::convert::identity;
pub(crate) fn loop_list<T: Clone>(iter: impl IntoIterator<Item = T>) -> impl Iterator<Item = T> {
loop_list_ex(iter, identity, identity)
}
pub(crate) fn loop_list_ex<T: Clone, U>(
iter: impl IntoIterator<Item = T>,
mut fa: impl FnMut(T) -> U,
mut fb: impl FnMut(T) -> U,
) -> impl Iterator<Item = U> {
gen move {
let mut iter = iter.into_iter();
let Some(first) = iter.next() else { return };
yield fa(first.clone());
for item in iter {
yield fb(item.clone());
yield fa(item);
}
yield fb(first);
}
}

View File

@ -1,12 +1,13 @@
#![feature(gen_blocks)] #![feature(gen_blocks)]
use std::{convert::identity, error::Error, f32::consts::PI}; use std::{error::Error, f32::consts::PI};
use glam::{Mat4, UVec2, Vec2, Vec3, vec3}; use glam::{Mat4, UVec2, Vec2, Vec3, vec3};
use rand_distr::Distribution as _; use rand_distr::Distribution as _;
use crate::{ use crate::{
camera::OrbitalCamera, camera::OrbitalCamera,
iter::loop_list,
ray::Ray, ray::Ray,
render::{ render::{
DEPTH_FORMAT, OUTPUT_FORMAT, DEPTH_FORMAT, OUTPUT_FORMAT,
@ -118,27 +119,6 @@ pub fn new_tripod(device: &wgpu::Device) -> Mesh {
) )
} }
fn loop_list<T: Clone>(iter: impl IntoIterator<Item = T>) -> impl Iterator<Item = T> {
loop_list_ex(iter, identity, identity)
}
fn loop_list_ex<T: Clone, U>(
iter: impl IntoIterator<Item = T>,
mut fa: impl FnMut(T) -> U,
mut fb: impl FnMut(T) -> U,
) -> impl Iterator<Item = U> {
gen move {
let mut iter = iter.into_iter();
let Some(first) = iter.next() else { return };
yield fa(first.clone());
for item in iter {
yield fb(item.clone());
yield fa(item);
}
yield fb(first);
}
}
impl OrbitalCamera { impl OrbitalCamera {
fn make_ray(&self, rng: &mut impl rand::Rng) -> Ray { fn make_ray(&self, rng: &mut impl rand::Rng) -> Ray {
let off: f32 = rand_distr::StandardUniform.sample(rng); let off: f32 = rand_distr::StandardUniform.sample(rng);