Crate dubble[−][src]
A generic double-buffer.
Description
A generic double-buffer for anything that implements Clone
.
Usage
DoubleBuffered
implements Default
so long as the type being double-buffered
does.
use dubble::DoubleBuffered; let mut my_buf = DoubleBuffered::<i32>::default();
Otherwise, you can use a Fn() -> T
to construct the value in each buffer.
let mut my_buf = DoubleBuffered::construct_with(Vec::<i32>::new);
A longer example usage is shown below.
// creating a buffer using a closure to initialise the buffers let mut my_buf = DoubleBuffered::construct_with(|| { let mut s = String::new(); s.push_str("hello,"); s }); // writing to the buffer { // creates a mutable reference to the write buffer let mut wb = my_buf.write(); wb.push_str(" world!"); } // NB: DoubleBuffer implements DerefMut, so we could also use the // `push_str` method of `String` directly, like so. my_buf.push_str(" Hello again!"); // reading from the buffer // note: the read half of the buffer should not have updated yet assert!(my_buf.read() == "hello,"); // updating the buffer // other half of the buffer has been updated // NB: DoubleBuffer implements Deref, so we could use the dereference operator // here as well my_buf.update(); assert!(*my_buf == "hello, world! Hello again!");
Notes
Default
DoubleBuffered
implements Default
so long as the type being buffered
implements it. For example, if you needed a double-buffered i32
:
use dubble::DoubleBuffered; let my_buf: DoubleBuffered<i32> = DoubleBuffered::default();
Deref
and DerefMut
An important note on the impl
s for each of these is that Deref
will
dereference to the read buffer while DerefMut
will dereference to the
write buffer. So, if you did *my_buf = 3
followed by assert(*my_buf == 3)
,
you'd find that the assertion would fail.
*my_buf = 3; assert!(*my_buf == 3);
In other words, Deref
behaves as if you had called my_buf.read()
, and
DerefMut
behaves as if you had called my_buf.write()
.
Structs
DoubleBuffered |
Represents something that is double-buffered. The type being buffered must
be |