Skip to content

Commit 24f7f09

Browse files
committed
Remove StaticXBuffer, make XBuffer impls require static. Fixes #10
1 parent be053d3 commit 24f7f09

File tree

1 file changed

+6
-96
lines changed

1 file changed

+6
-96
lines changed

src/lib.rs

Lines changed: 6 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ pub unsafe trait WriteBuffer {
105105

106106
unsafe impl<B, T> ReadBuffer for B
107107
where
108-
B: Deref<Target = T> + StableDeref,
108+
B: Deref<Target = T> + StableDeref + 'static,
109109
T: ReadTarget + ?Sized,
110110
{
111111
type Word = T::Word;
@@ -117,7 +117,7 @@ where
117117

118118
unsafe impl<B, T> WriteBuffer for B
119119
where
120-
B: DerefMut<Target = T> + StableDeref,
120+
B: DerefMut<Target = T> + StableDeref + 'static,
121121
T: WriteTarget + ?Sized,
122122
{
123123
type Word = T::Word;
@@ -153,7 +153,7 @@ unsafe impl Word for i64 {}
153153
/// # Safety
154154
///
155155
/// - `as_read_buffer` must adhere to the safety requirements
156-
/// documented for `DmaReadBuffer::dma_read_buffer`.
156+
/// documented for `ReadBuffer::read_buffer`.
157157
pub unsafe trait ReadTarget {
158158
type Word: Word;
159159

@@ -172,7 +172,7 @@ pub unsafe trait ReadTarget {
172172
/// # Safety
173173
///
174174
/// - `as_write_buffer` must adhere to the safety requirements
175-
/// documented for `DmaWriteBuffer::dma_write_buffer`.
175+
/// documented for `WriteBuffer::write_buffer`.
176176
pub unsafe trait WriteTarget {
177177
type Word: Word;
178178

@@ -256,75 +256,6 @@ unsafe impl<T: WriteTarget> WriteTarget for MaybeUninit<T> {
256256
type Word = T::Word;
257257
}
258258

259-
/// Trait for buffers that can be given to DMA for reading. This is a more strict version of
260-
/// [ReadBuffer](trait.ReadBuffer.html), if you are not sure about which one to use on your safe
261-
/// API, prefer this one. This trait also allows end users to __unsafely__ bypass the `'static`
262-
/// invariant.
263-
///
264-
/// # Safety
265-
///
266-
/// This has the same invariants as [ReadBuffer](trait.ReadBuffer.html) with the additional
267-
/// requirement that the buffer should have a `'static` lifetime.
268-
pub unsafe trait StaticReadBuffer: ReadBuffer {
269-
type Word;
270-
271-
/// Provide a buffer usable for DMA reads.
272-
///
273-
/// The return value is:
274-
///
275-
/// - pointer to the start of the buffer
276-
/// - buffer size in words
277-
///
278-
/// # Safety
279-
///
280-
/// Once this method has been called, it is unsafe to call any `&mut self`
281-
/// methods on this object as long as the returned value is in use (by DMA).
282-
unsafe fn static_read_buffer(&self) -> (*const <Self as StaticReadBuffer>::Word, usize);
283-
}
284-
285-
/// Trait for buffers that can be given to DMA for writing. This is a more strict version of
286-
/// [WriteBuffer](trait.WriteBuffer.html), if you are not sure about which one to use on your safe
287-
/// API, prefer this one. This trait also allows end users to __unsafely__ bypass the `'static`
288-
/// invariant.
289-
///
290-
/// # Safety
291-
///
292-
/// This has the same invariants as [WriteBuffer](trait.WriteBuffer.html) with the additional
293-
/// requirement that the buffer should have a `'static` lifetime.
294-
pub unsafe trait StaticWriteBuffer: WriteBuffer {
295-
type Word;
296-
297-
/// Provide a buffer usable for DMA writes.
298-
///
299-
/// The return value is:
300-
///
301-
/// - pointer to the start of the buffer
302-
/// - buffer size in words
303-
///
304-
/// # Safety
305-
///
306-
/// Once this method has been called, it is unsafe to call any `&mut self`
307-
/// methods, except for `write_buffer`, on this object as long as the
308-
/// returned value is in use (by DMA).
309-
unsafe fn static_write_buffer(&mut self) -> (*mut <Self as StaticWriteBuffer>::Word, usize);
310-
}
311-
312-
unsafe impl<B: ReadBuffer + 'static> StaticReadBuffer for B {
313-
type Word = <Self as ReadBuffer>::Word;
314-
315-
unsafe fn static_read_buffer(&self) -> (*const <Self as StaticReadBuffer>::Word, usize) {
316-
self.read_buffer()
317-
}
318-
}
319-
320-
unsafe impl<B: WriteBuffer + 'static> StaticWriteBuffer for B {
321-
type Word = <Self as WriteBuffer>::Word;
322-
323-
unsafe fn static_write_buffer(&mut self) -> (*mut <Self as StaticWriteBuffer>::Word, usize) {
324-
self.write_buffer()
325-
}
326-
}
327-
328259
#[cfg(test)]
329260
mod tests {
330261
use super::*;
@@ -337,40 +268,23 @@ mod tests {
337268
unsafe { buffer.read_buffer() }
338269
}
339270

340-
fn static_api_read<W, B>(buffer: B) -> (*const W, usize)
341-
where
342-
B: StaticReadBuffer<Word = W>,
343-
{
344-
unsafe { buffer.static_read_buffer() }
345-
}
346-
347271
fn api_write<W, B>(mut buffer: B) -> (*mut W, usize)
348272
where
349273
B: WriteBuffer<Word = W>,
350274
{
351275
unsafe { buffer.write_buffer() }
352276
}
353277

354-
fn static_api_write<W, B>(mut buffer: B) -> (*mut W, usize)
355-
where
356-
B: StaticWriteBuffer<Word = W>,
357-
{
358-
unsafe { buffer.static_write_buffer() }
359-
}
360-
361278
#[test]
362279
fn read_api() {
363280
const SIZE: usize = 128;
364281
static BUF: [u8; SIZE] = [0u8; SIZE];
365282
let local_buf = [0u8; SIZE];
366283

367-
let (ptr, size_local) = api_read(&local_buf);
284+
let (ptr, size_local) = api_read(&BUF);
368285
assert!(unsafe { (&*ptr as &dyn Any).is::<u8>() });
369286
assert!(size_local == SIZE);
370287

371-
let (ptr, size_static) = static_api_read(&BUF);
372-
assert!(unsafe { (&*ptr as &dyn Any).is::<u8>() });
373-
assert!(size_static == SIZE);
374288
}
375289

376290
#[test]
@@ -379,12 +293,8 @@ mod tests {
379293
static mut BUF: [u8; SIZE] = [0u8; SIZE];
380294
let mut local_buf = [0u8; SIZE];
381295

382-
let (ptr, size_local) = api_write(&mut local_buf);
296+
let (ptr, size_local) = api_write(unsafe { &mut BUF });
383297
assert!(unsafe { (&*ptr as &dyn Any).is::<u8>() });
384298
assert!(size_local == SIZE);
385-
386-
let (ptr, size_static) = static_api_write(unsafe { &mut BUF });
387-
assert!(unsafe { (&*ptr as &dyn Any).is::<u8>() });
388-
assert!(size_static == SIZE);
389299
}
390300
}

0 commit comments

Comments
 (0)