Skip to content

Commit 952b7cd

Browse files
committed
Remove new_with_access
1 parent b525f38 commit 952b7cd

File tree

3 files changed

+17
-69
lines changed

3 files changed

+17
-69
lines changed

src/access.rs

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -15,33 +15,7 @@ impl Unsafe for SafeAccess {}
1515
impl Safe for SafeAccess {}
1616

1717
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
18-
pub struct Access<R, W> {
19-
pub read: R,
20-
pub write: W,
21-
}
22-
23-
impl Access<SafeAccess, NoAccess> {
24-
pub const fn read_only() -> ReadOnly {
25-
Access {
26-
read: SafeAccess,
27-
write: NoAccess,
28-
}
29-
}
30-
31-
pub const fn write_only() -> WriteOnly {
32-
Access {
33-
read: NoAccess,
34-
write: SafeAccess,
35-
}
36-
}
37-
38-
pub const fn read_write() -> ReadWrite {
39-
Access {
40-
read: SafeAccess,
41-
write: SafeAccess,
42-
}
43-
}
44-
}
18+
pub struct Access<R, W>(R, W);
4519

4620
pub type ReadOnly = Access<SafeAccess, NoAccess>;
4721
pub type WriteOnly = Access<NoAccess, SafeAccess>;

src/lib.rs

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ use access::{Access, ReadOnly, ReadWrite, WriteOnly};
2525
use core::{
2626
fmt,
2727
marker::PhantomData,
28-
mem,
2928
ptr::{self, NonNull},
3029
};
3130
#[cfg(feature = "unstable")]
@@ -115,15 +114,15 @@ where
115114
T: ?Sized,
116115
{
117116
pub unsafe fn new_read_write(pointer: NonNull<T>) -> VolatilePtr<'static, T> {
118-
unsafe { VolatilePtr::new_with_access(pointer, Access::read_write()) }
117+
unsafe { VolatilePtr::new_generic(pointer) }
119118
}
120119

121120
pub const unsafe fn new_read_only(pointer: NonNull<T>) -> VolatilePtr<'static, T, ReadOnly> {
122-
unsafe { VolatilePtr::new_with_access(pointer, Access::read_only()) }
121+
unsafe { VolatilePtr::new_generic(pointer) }
123122
}
124123

125124
pub const unsafe fn new_write_only(pointer: NonNull<T>) -> VolatilePtr<'static, T, WriteOnly> {
126-
unsafe { VolatilePtr::new_with_access(pointer, Access::write_only()) }
125+
unsafe { VolatilePtr::new_generic(pointer) }
127126
}
128127

129128
/// Constructs a new volatile instance wrapping the given reference.
@@ -149,14 +148,6 @@ where
149148
/// volatile.write(1);
150149
/// assert_eq!(volatile.read(), 1);
151150
/// ```
152-
pub const unsafe fn new_with_access<A>(
153-
pointer: NonNull<T>,
154-
access: A,
155-
) -> VolatilePtr<'static, T, A> {
156-
mem::forget(access); // needed because we cannot require `A: Copy` on stable Rust yet
157-
unsafe { Self::new_generic(pointer) }
158-
}
159-
160151
pub const unsafe fn new_generic<'a, A>(pointer: NonNull<T>) -> VolatilePtr<'a, T, A> {
161152
VolatilePtr {
162153
pointer,

src/tests.rs

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -33,34 +33,26 @@ fn test_access() {
3333

3434
// ReadWrite
3535
assert_eq!(
36-
unsafe { VolatilePtr::new_with_access(NonNull::from(&mut val), Access::read_write()) }
37-
.read(),
36+
unsafe { VolatilePtr::new_read_write(NonNull::from(&mut val)) }.read(),
3837
42
3938
);
40-
unsafe { VolatilePtr::new_with_access(NonNull::from(&mut val), Access::read_write()) }
41-
.write(50);
39+
unsafe { VolatilePtr::new_read_write(NonNull::from(&mut val)) }.write(50);
4240
assert_eq!(val, 50);
43-
unsafe { VolatilePtr::new_with_access(NonNull::from(&mut val), Access::read_write()) }
44-
.update(|i| *i += 1);
41+
unsafe { VolatilePtr::new_read_write(NonNull::from(&mut val)) }.update(|i| *i += 1);
4542
assert_eq!(val, 51);
4643

4744
// ReadOnly and WriteOnly
4845
assert_eq!(
49-
unsafe { VolatilePtr::new_with_access(NonNull::from(&mut val), Access::read_only()) }
50-
.read(),
46+
unsafe { VolatilePtr::new_read_only(NonNull::from(&mut val)) }.read(),
5147
51
5248
);
53-
unsafe { VolatilePtr::new_with_access(NonNull::from(&mut val), Access::write_only()) }
54-
.write(12);
49+
unsafe { VolatilePtr::new_write_only(NonNull::from(&mut val)) }.write(12);
5550
assert_eq!(val, 12);
5651

5752
// Custom: safe read + safe write
5853
{
59-
let access = Access {
60-
read: SafeAccess,
61-
write: SafeAccess,
62-
};
63-
let mut volatile = unsafe { VolatilePtr::new_with_access(NonNull::from(&mut val), access) };
54+
type Custom = Access<SafeAccess, SafeAccess>;
55+
let mut volatile = unsafe { VolatilePtr::new_generic::<Custom>(NonNull::from(&mut val)) };
6456
let random: i32 = rand::random();
6557
volatile.write(i64::from(random));
6658
assert_eq!(volatile.read(), i64::from(random));
@@ -71,11 +63,8 @@ fn test_access() {
7163

7264
// Custom: safe read + unsafe write
7365
{
74-
let access = Access {
75-
read: SafeAccess,
76-
write: UnsafeAccess,
77-
};
78-
let mut volatile = unsafe { VolatilePtr::new_with_access(NonNull::from(&mut val), access) };
66+
type Custom = Access<SafeAccess, UnsafeAccess>;
67+
let mut volatile = unsafe { VolatilePtr::new_generic::<Custom>(NonNull::from(&mut val)) };
7968
let random: i32 = rand::random();
8069
unsafe { volatile.write_unsafe(i64::from(random)) };
8170
assert_eq!(volatile.read(), i64::from(random));
@@ -86,23 +75,17 @@ fn test_access() {
8675

8776
// Custom: safe read + no write
8877
{
89-
let access = Access {
90-
read: SafeAccess,
91-
write: NoAccess,
92-
};
78+
type Custom = Access<SafeAccess, NoAccess>;
9379
let random = rand::random();
9480
val = random;
95-
let volatile = unsafe { VolatilePtr::new_with_access(NonNull::from(&mut val), access) };
81+
let volatile = unsafe { VolatilePtr::new_generic::<Custom>(NonNull::from(&mut val)) };
9682
assert_eq!(volatile.read(), i64::from(random));
9783
}
9884

9985
// Custom: unsafe read + safe write
10086
{
101-
let access = Access {
102-
read: UnsafeAccess,
103-
write: SafeAccess,
104-
};
105-
let mut volatile = unsafe { VolatilePtr::new_with_access(NonNull::from(&mut val), access) };
87+
type Custom = Access<UnsafeAccess, SafeAccess>;
88+
let mut volatile = unsafe { VolatilePtr::new_generic::<Custom>(NonNull::from(&mut val)) };
10689
let random: i32 = rand::random();
10790
volatile.write(i64::from(random));
10891
assert_eq!(unsafe { volatile.read_unsafe() }, i64::from(random));

0 commit comments

Comments
 (0)