-
Notifications
You must be signed in to change notification settings - Fork 19
New design based on *mut T
#22
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
17 commits
Select commit
Hold shift + click to select a range
a7ae579
New design based on `UnsafeCell`
phil-opp 946b37b
Use `*mut T` instead of `&UnsafeCell<T>` since the latter is derefere…
phil-opp 682dd70
Add access types for allowing only unsafe reads and/or writes
phil-opp 0699e4e
Remove stabilized const_generics feature
phil-opp 2ece021
Redesign access types and adjust (doc)tests
phil-opp 534ec6e
Use `NonNull` instead of `*mut T`
phil-opp c3d6b9a
Add lifetime parameter and rename to `VolatilePtr`
phil-opp 9f7b015
Fix: do bounds checking in `index` and `index_mut`
phil-opp b525f38
Add `const` index functions under a new `very_unstable` feature
phil-opp 4accd51
add `VolatilePtr::as_slice_mut`
Freax13 a9e8509
add `VolatilePtr::iter` & `VolatilePtr::iter_mut`
Freax13 167adec
add `VolatilePtr::is_empty`
Freax13 aa93fb9
add missing access where bounds
Freax13 554c806
reject mapping to unaligned fields
Freax13 ff0ee4f
WIP: owned with borrow
Freax13 cd57be9
fix UAF in doctest
Freax13 927b061
Merge pull request #28 from Freax13/unsafe-cell-but-owned
phil-opp File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,22 +1,48 @@ | ||
/// Helper trait that is implemented by [`ReadWrite`] and [`ReadOnly`]. | ||
pub trait Readable {} | ||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] | ||
pub struct NoAccess; | ||
|
||
/// Helper trait that is implemented by [`ReadWrite`] and [`WriteOnly`]. | ||
pub trait Writable {} | ||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] | ||
pub struct UnsafeAccess; | ||
|
||
/// Zero-sized marker type for allowing both read and write access. | ||
#[derive(Debug, Copy, Clone)] | ||
pub struct ReadWrite; | ||
impl Readable for ReadWrite {} | ||
impl Writable for ReadWrite {} | ||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] | ||
pub struct SafeAccess; | ||
|
||
/// Zero-sized marker type for allowing only read access. | ||
#[derive(Debug, Copy, Clone)] | ||
pub struct ReadOnly; | ||
pub trait Unsafe {} | ||
pub trait Safe: Unsafe {} | ||
|
||
impl Readable for ReadOnly {} | ||
impl Unsafe for UnsafeAccess {} | ||
impl Unsafe for SafeAccess {} | ||
impl Safe for SafeAccess {} | ||
|
||
/// Zero-sized marker type for allowing only write access. | ||
#[derive(Debug, Copy, Clone)] | ||
pub struct WriteOnly; | ||
impl Writable for WriteOnly {} | ||
#[derive(Debug, Clone, Copy, PartialEq, Eq)] | ||
pub struct Access<R, W> { | ||
pub read: R, | ||
pub write: W, | ||
} | ||
|
||
impl Access<SafeAccess, NoAccess> { | ||
pub const fn read_only() -> ReadOnly { | ||
Access { | ||
read: SafeAccess, | ||
write: NoAccess, | ||
} | ||
} | ||
|
||
pub const fn write_only() -> WriteOnly { | ||
Access { | ||
read: NoAccess, | ||
write: SafeAccess, | ||
} | ||
} | ||
|
||
pub const fn read_write() -> ReadWrite { | ||
Access { | ||
read: SafeAccess, | ||
write: SafeAccess, | ||
} | ||
} | ||
} | ||
|
||
pub type ReadOnly = Access<SafeAccess, NoAccess>; | ||
pub type WriteOnly = Access<NoAccess, SafeAccess>; | ||
pub type ReadWrite = Access<SafeAccess, SafeAccess>; |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If we got rid of the need to pass
Access
by value and instead just referred to the type, we could delete all these type methods, and also just defineAccess
like: