use utls::containers::{buf::CircularBuffer, Sorted};
fn main() {
println!("CircularBuffer Example:");
let mut int_buffer = CircularBuffer::new(5).unwrap();
for i in 0..4 {
int_buffer.push(i).unwrap();
}
println!("Buffer contents: {:?}", int_buffer.iter().collect::<Vec<_>>());
println!("Peek first element: {:?}", int_buffer.peek());
println!("Pop first element: {:?}", int_buffer.pop());
println!("Available space: {}", int_buffer.free_space());
println!("\nCircularBuffer with Strings:");
let mut string_buffer = CircularBuffer::new(3).unwrap();
string_buffer.push(String::from("Hello")).unwrap();
string_buffer.push(String::from("World")).unwrap();
for s in string_buffer.iter() {
println!("Buffer contains: {}", s);
}
println!("\nSorted Container Example:");
let desc_sort = |slice: &[i32]| {
let mut vec = slice.to_vec();
vec.sort_by(|a, b| b.cmp(a));
vec
};
let mut sorted_numbers = Sorted::new(desc_sort);
sorted_numbers.add(5);
sorted_numbers.add(2);
sorted_numbers.add(8);
sorted_numbers.add(1);
println!("Sorted numbers (descending):");
for i in 0..4 {
if let Some(num) = sorted_numbers.get(i) {
println!("Position {}: {}", i, num);
}
}
println!("\nSorted Strings Example:");
let string_sort = |slice: &[String]| {
let mut vec = slice.to_vec();
vec.sort();
vec
};
let mut sorted_strings = Sorted::new(string_sort);
sorted_strings.add_no_sort(String::from("zebra"));
sorted_strings.add_no_sort(String::from("apple"));
sorted_strings.add_no_sort(String::from("banana"));
println!("Unsorted strings (alphabetical):");
for i in 0..3 {
if let Some(s) = sorted_strings.get(i) {
println!("Position {}: {}", i, s);
}
}
sorted_strings.man_sort();
println!("Sorted strings (alphabetical):");
for i in 0..3 {
if let Some(s) = sorted_strings.get(i) {
println!("Position {}: {}", i, s);
}
}
}