Memcpy()ing into a slice of cells

Simple API:

impl<T: Copy> [Cell<T>] {
  fn copy_cells_from_slice(&self, src: &[T]);
}

Maybe also a version that takes src: &[Cell<T>]? Notionally this would just call set() on every element, but compile down a memcpy. Thoughts?

3 Likes

.set() on every element in a loop already optimizes to memcpy:

I mean yes, LLVM is smart. But we have copy_from_slice, might as well advertise a well-lit path for safely-aliased mutation of byte buffers.

(This is how you wind up with people using ptr::copy_nonoverlapping because they think the for loop won't work. This isn't speculation, kernel programmers absolutely do this.)

3 Likes