@@ -31,7 +31,7 @@ use crate::access::{Access, ReadOnly, ReadWrite, Readable, Writable, WriteOnly};
31
31
///
32
32
/// struct Example { field_1: u32, field_2: u8, }
33
33
/// let mut value = Example { field_1: 15, field_2: 255 };
34
- /// let mut volatile = unsafe { VolatilePtr::new_read_write(NonNull::from( &mut value)) } ;
34
+ /// let mut volatile = VolatilePtr::from_mut_ref( &mut value);
35
35
///
36
36
/// // construct a volatile reference to a field
37
37
/// let field_2 = map_field!(volatile.field_2);
@@ -46,7 +46,7 @@ use crate::access::{Access, ReadOnly, ReadWrite, Readable, Writable, WriteOnly};
46
46
/// #[repr(packed)]
47
47
/// struct Example { field_1: u8, field_2: usize, }
48
48
/// let mut value = Example { field_1: 15, field_2: 255 };
49
- /// let mut volatile = unsafe { VolatilePtr::new_read_write(NonNull::from( &mut value)) } ;
49
+ /// let mut volatile = VolatilePtr::from_mut_ref( &mut value);
50
50
///
51
51
/// // Constructing a volatile reference to an unaligned field doesn't compile.
52
52
/// let field_2 = map_field!(volatile.field_2);
@@ -165,15 +165,17 @@ where
165
165
/// ## Examples
166
166
///
167
167
/// ```rust
168
- /// use volatile::VolatilePtr;
168
+ /// use volatile::{ VolatilePtr, access} ;
169
169
/// use core::ptr::NonNull;
170
170
///
171
171
/// let value = 42;
172
- /// let shared_reference = unsafe { VolatilePtr::new_read_only(NonNull::from(&value)) };
172
+ /// let shared_reference = unsafe {
173
+ /// VolatilePtr::new_restricted(access::ReadOnly, NonNull::from(&value))
174
+ /// };
173
175
/// assert_eq!(shared_reference.read(), 42);
174
176
///
175
177
/// let mut value = 50;
176
- /// let mut_reference = unsafe { VolatilePtr::new_read_write(NonNull::from( &mut value)) } ;
178
+ /// let mut_reference = VolatilePtr::from_mut_ref( &mut value);
177
179
/// assert_eq!(mut_reference.read(), 50);
178
180
/// ```
179
181
pub fn read ( & self ) -> T
@@ -198,7 +200,7 @@ where
198
200
/// use core::ptr::NonNull;
199
201
///
200
202
/// let mut value = 42;
201
- /// let mut volatile = unsafe { VolatilePtr::new_read_write(NonNull::from( &mut value)) } ;
203
+ /// let mut volatile = VolatilePtr::from_mut_ref( &mut value);
202
204
/// volatile.write(50);
203
205
///
204
206
/// assert_eq!(volatile.read(), 50);
@@ -223,8 +225,8 @@ where
223
225
/// use core::ptr::NonNull;
224
226
///
225
227
/// let mut value = 42;
226
- /// let mut volatile = unsafe { VolatilePtr::new_read_write(NonNull::from( &mut value)) } ;
227
- /// volatile.update(|val| * val += 1);
228
+ /// let mut volatile = VolatilePtr::from_mut_ref( &mut value);
229
+ /// volatile.update(|val| val + 1);
228
230
///
229
231
/// assert_eq!(volatile.read(), 43);
230
232
/// ```
@@ -257,7 +259,7 @@ where
257
259
/// use core::ptr::NonNull;
258
260
///
259
261
/// let mut value = 42;
260
- /// let mut volatile = unsafe { VolatilePtr::new_read_write(NonNull::from( &mut value)) } ;
262
+ /// let mut volatile = VolatilePtr::from_mut_ref( &mut value);
261
263
/// volatile.write(50);
262
264
/// let unwrapped: *mut i32 = volatile.as_ptr().as_ptr();
263
265
///
@@ -299,7 +301,7 @@ where
299
301
///
300
302
/// struct Example { field_1: u32, field_2: u8, }
301
303
/// let mut value = Example { field_1: 15, field_2: 255 };
302
- /// let mut volatile = unsafe { VolatilePtr::new_read_write(NonNull::from( &mut value)) } ;
304
+ /// let mut volatile = VolatilePtr::from_mut_ref( &mut value);
303
305
///
304
306
/// // construct a volatile reference to a field
305
307
/// let field_2 = unsafe { volatile.map(|ptr| NonNull::new(core::ptr::addr_of_mut!((*ptr.as_ptr()).field_2)).unwrap()) };
@@ -313,7 +315,7 @@ where
313
315
/// use core::ptr::NonNull;
314
316
///
315
317
/// let mut value = 5;
316
- /// let mut volatile = unsafe { VolatilePtr::new_read_write(NonNull::from( &mut value)) } ;
318
+ /// let mut volatile = VolatilePtr::from_mut_ref( &mut value);
317
319
///
318
320
/// // DON'T DO THIS:
319
321
/// let mut readout = 0;
@@ -375,7 +377,7 @@ where
375
377
/// use core::ptr::NonNull;
376
378
///
377
379
/// let mut value: i16 = -4;
378
- /// let mut volatile = unsafe { VolatilePtr::new_read_write(NonNull::from( &mut value)) } ;
380
+ /// let mut volatile = VolatilePtr::from_mut_ref( &mut value);
379
381
///
380
382
/// let read_only = volatile.read_only();
381
383
/// assert_eq!(read_only.read(), -4);
@@ -397,7 +399,7 @@ where
397
399
///
398
400
/// struct Example { field_1: u32, field_2: u8, }
399
401
/// let mut value = Example { field_1: 15, field_2: 255 };
400
- /// let mut volatile = unsafe { VolatilePtr::new_read_write(NonNull::from( &mut value)) } ;
402
+ /// let mut volatile = VolatilePtr::from_mut_ref( &mut value);
401
403
///
402
404
/// // construct a volatile write-only reference to `field_2`
403
405
/// let mut field_2 = map_field_mut!(volatile.field_2).write_only();
@@ -596,9 +598,8 @@ impl<'a, T, R, W> VolatilePtr<'a, [T], Access<R, W>> {
596
598
/// let mut dst = [0, 0];
597
599
/// // the `Volatile` type does not work with arrays, so convert `dst` to a slice
598
600
/// let slice = &mut dst[..];
599
- /// let mut volatile = unsafe { VolatilePtr::new_read_write(NonNull::from(slice))};
600
- ///
601
- /// // Because the slices have to be the same length,
601
+ /// let mut volatile = VolatilePtr::from_mut_ref(lice);
602
+ /// /// // Because the slices have to be the same length,
602
603
/// // we slice the source slice from four elements
603
604
/// // to two. It will panic if we don't do this.
604
605
/// volatile.copy_from_slice(&src[2..]);
@@ -655,8 +656,7 @@ impl<'a, T, R, W> VolatilePtr<'a, [T], Access<R, W>> {
655
656
///
656
657
/// let mut byte_array = *b"Hello, World!";
657
658
/// let mut slice: &mut [u8] = &mut byte_array[..];
658
- /// let mut volatile = unsafe { VolatilePtr::new_read_write(NonNull::from(slice)) };
659
- ///
659
+ /// let mut volatile = VolatilePtr::from_mut_ref(lice)) }; /
660
660
/// volatile.copy_within(1..5, 8);
661
661
///
662
662
/// assert_eq!(&byte_array, b"Hello, Wello!");
@@ -840,7 +840,7 @@ impl<R, W> VolatilePtr<'_, [u8], Access<R, W>> {
840
840
/// use core::ptr::NonNull;
841
841
///
842
842
/// let mut vec = vec![0; 10];
843
- /// let mut buf = unsafe { VolatilePtr::new_read_write(NonNull::from(vec .as_mut_slice())) } ;
843
+ /// let mut buf = VolatilePtr::from_mut_ref(ec .as_mut_slice());
844
844
/// buf.fill(1);
845
845
/// assert_eq!(unsafe { buf.as_ptr().as_mut() }, &mut vec![1; 10]);
846
846
/// ```
0 commit comments