Macro blaze_rs::buffer

source ·
macro_rules! buffer {
    ($($v:expr),+) => { ... };
    (|$i:ident| $v:expr; $len:expr) => { ... };
    ($v:expr; $len:expr) => { ... };
}
Expand description

Creates a buffer with sensible defaults.

This macro has three forms:

  • Create a Buffer containing a list of elements
use blaze_rs::{buffer, prelude::*};

#[global_context]
static CONTEXT : SimpleContext = SimpleContext::default();

let r#macro: Result<Buffer<i32>> = buffer![1, 2, 3];
let expanded: Result<Buffer<i32>> = Buffer::new(&[1, 2, 3], MemAccess::READ_WRITE, false);
  • Create a Buffer with a given element and size
use blaze_rs::{buffer, prelude::*};

#[global_context]
static CONTEXT : SimpleContext = SimpleContext::default();

let r#macro: Result<Buffer<i32>> = buffer![1; 3];
let expanded: Result<Buffer<i32>> = Buffer::new(&vec![1; 3], MemAccess::READ_WRITE, false);
  • Create a Buffer with a by-index constructor
use blaze_rs::{buffer, prelude::*};

#[global_context]
static CONTEXT : SimpleContext = SimpleContext::default();


let r#macro: Buffer<i32> = buffer![|i| i as i32; 3]?;
let expanded: Buffer<i32> = unsafe {
    let mut res = Buffer::new_uninit(3, MemAccess::READ_WRITE, false)?;
    for (i, v) in res.map_mut_blocking(.., WaitList::None)?.iter_mut().enumerate() {
        v.write(i as i32);
    }
    res.assume_init()
};

In particular, the by-index constructor facilitates the construction of Buffers of !Copy types.

use blaze_rs::{buffer, prelude::*};

#[global_context]
static CONTEXT : SimpleContext = SimpleContext::default();

#[repr(C)]
struct NoCopyStruct {
    lock: bool,
    val: i32,
}

let values: Result<Buffer<NoCopyStruct>> = buffer![|i| NoCopyStruct { lock: false, val: i as i32 }; 5];