use std::{slice, thread, time::Duration}; use crate::Cacher; pub fn split_at_mut(slice: &mut [i32], mid: usize) -> (&mut [i32], &mut [i32]) { // let len = slice.len(); // assert!(mid <= len); // (&mut slice[..mid], &mut slice[mid..]) let len = slice.len(); let ptr = slice.as_mut_ptr(); assert!(mid <= len); unsafe { ( slice::from_raw_parts_mut(ptr, mid), slice::from_raw_parts_mut(ptr.offset(mid as isize), len - mid), ) } } //pub fn first_words<'a>(s: &'a str) -> &'a str { pub fn first_words(s: &str) -> &str { let b = s.as_bytes(); for (i, &item) in b.iter().enumerate() { if item == b' ' { return &s[0..i]; } } &s[..] } pub fn generate_workout(intensity: u32, random_number: u32) { // let calculation = |num: u32| -> u32 { // println!("calculating slowly..."); // thread::sleep(Duration::from_secs(2)); // num // }; let mut expensive_result = Cacher::new(|num| { println!("calculating slowly..."); thread::sleep(Duration::from_millis(500)); num + 1 }); if intensity < 25 { println!("Today, do {} pushups!", expensive_result.value(intensity)); println!("Next, do {} situps!", expensive_result.value(intensity)); } else { if random_number == 3 { println!("Take a break today! Remember to stay hydrated!"); } else { println!( "Today, run for {} minutes!", expensive_result.value(intensity) ); } } } pub fn print_coordinates(&(x, y): &(i32, i32)) { println!("Current location: ({}, {})", x, y); }