use bytesbuf::BytesView;
use bytesbuf::mem::{GlobalPool, Memory};
fn main() {
let memory = GlobalPool::new();
let message = produce_message(&memory);
consume_message(message);
}
fn produce_message(memory: &impl Memory) -> BytesView {
const MESSAGE_LEN_WORDS: usize = 123_456;
const MESSAGE_LEN_BYTES: usize = MESSAGE_LEN_WORDS * size_of::<u64>();
let mut buf = memory.reserve(MESSAGE_LEN_BYTES);
println!(
"Requested {MESSAGE_LEN_BYTES} bytes of memory capacity, got {} bytes.",
buf.capacity()
);
(0..MESSAGE_LEN_WORDS).for_each(|word| {
buf.put_num_le(word as u64);
});
buf.consume_all()
}
fn consume_message(mut message: BytesView) {
let mut sum: u64 = 0;
while !message.is_empty() {
let word = message.get_num_le::<u64>();
sum = sum.saturating_add(word);
}
println!("Message received. The sum of all words in the message is {sum}.");
}