Crate region_buffer
source ·Expand description
region_buffer
A growable array allowing for multiple mutable non overlapping regions from
the same Vec.
Examples
let mut buffer = RegionBuffer::new();
buffer.push(1);
buffer.push(2);
assert_eq!(buffer.len(), 2);
let mut a = buffer.get_mut(0);
let mut b = buffer.get_mut(1);
assert_eq!(*a, 1);
assert_eq!(*b, 2);
*a = *b;
*b = 3;
assert_eq!(*a, 2);
assert_eq!(*b, 3);There is a region_buffer macro provided to make initialisation more
convenient.
let strings = region_buffer!["Hello", "World", "!"];
let mut greeting = strings.get_mut(0);
let mut noun = strings.get_mut(1);
let mut punctuation = strings.get_mut(2);
*greeting = "Hallo";
*noun = "Peter";
*punctuation = ".";
let string = format!("{} {}{}", greeting, noun, punctuation);
assert_eq!(string, "Hallo Peter.")The macro can also be used to specify and initialise large regions of memory.
let memory = region_buffer![0; 0xFFFF];
let rom = memory.region(0, 0x800);
let gpu = memory.region(0x800, 0x1600);
let sound = memory.region(0x1600, 0x2400);
let ram = memory.region(0x2400, 0xFFFF);
let console = Console::new(rom, gpu, sound, ram);Macros
Creates a
RegionBuffer containing the arguments.
region_buffer! allows RegionBuffers to be defined with the same syntax
as array expressions. There are two forms of this macro:Structs
A struct representing a single element from the
RegionBuffer. When
Dropped the element’s solitary region is freed.A struct representing a single mutable element from the
RegionBuffer. When
Dropped the element’s solitary region is freed.A contiguous growable array type, allow you to obtain multiple mutable
regions from it, as long these regions don’t overlap.
Represents a mutable slice into a region of memory. The region will be freed
on
Drop.