Slices

Note slices require OpenCL 1.1 or higher.

Buffer slices act the same way as Rust slices, allowing access to a specified region of a buffer.

Examples

use std::ops::Deref;
use blaze_rs::prelude::*;

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

fn main () -> Result<()> {
    let buffer = Buffer::new(&[1, 2, 3, 4, 5], MemAccess::default(), false)?;
    let slice = buffer.slice(..)?;

    assert_eq!(slice.deref(), &buffer);
    Ok(())
}
use std::ops::Deref;
use blaze_rs::prelude::*;

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

fn main () -> Result<()> {
    let mut buffer = Buffer::new(&[1, 2, 3, 4, 5], MemAccess::default(), false)?;
    let slice = buffer.slice(None)?;
    let mut mut_slice = buffer.slice_mut(None)?; // compile error: cannot borrow `buffer` as mutable because it is also borrowed as immutable

    assert_eq!(slice, slice_mut);
    Ok(())
}

Note that when maping mutably, the OpenCL mapping is done as a read-write mapping, not a write-only map.