diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/bits64/paging.rs | 41 | ||||
-rw-r--r-- | src/lib.rs | 1 |
2 files changed, 42 insertions, 0 deletions
diff --git a/src/bits64/paging.rs b/src/bits64/paging.rs index 799fd43..71e6325 100644 --- a/src/bits64/paging.rs +++ b/src/bits64/paging.rs @@ -5,6 +5,8 @@ use bitflags::*; use core::convert::{From, Into}; use core::fmt; use core::hash::{Hash, Hasher}; +#[cfg(feature = "unstable")] +use core::iter::Step; use core::ops; macro_rules! check_flag { @@ -160,6 +162,19 @@ impl PAddr { } } +#[cfg(feature = "unstable")] +impl Step for PAddr { + fn steps_between(start: &Self, end: &Self) -> Option<usize> { + <u64 as Step>::steps_between(&start.0, &end.0) + } + fn forward_checked(start: Self, count: usize) -> Option<Self> { + <u64 as Step>::forward_checked(start.0, count).map(|v| PAddr(v)) + } + fn backward_checked(start: Self, count: usize) -> Option<Self> { + <u64 as Step>::backward_checked(start.0, count).map(|v| PAddr(v)) + } +} + impl From<u64> for PAddr { fn from(num: u64) -> Self { PAddr(num) @@ -487,6 +502,19 @@ impl IOAddr { } } +#[cfg(feature = "unstable")] +impl Step for IOAddr { + fn steps_between(start: &Self, end: &Self) -> Option<usize> { + <u64 as Step>::steps_between(&start.0, &end.0) + } + fn forward_checked(start: Self, count: usize) -> Option<Self> { + <u64 as Step>::forward_checked(start.0, count).map(|v| IOAddr(v)) + } + fn backward_checked(start: Self, count: usize) -> Option<Self> { + <u64 as Step>::backward_checked(start.0, count).map(|v| IOAddr(v)) + } +} + impl From<u64> for IOAddr { fn from(num: u64) -> Self { IOAddr(num) @@ -829,6 +857,19 @@ impl VAddr { } } +#[cfg(feature = "unstable")] +impl Step for VAddr { + fn steps_between(start: &Self, end: &Self) -> Option<usize> { + <u64 as Step>::steps_between(&start.0, &end.0) + } + fn forward_checked(start: Self, count: usize) -> Option<Self> { + <u64 as Step>::forward_checked(start.0, count).map(|v| VAddr(v)) + } + fn backward_checked(start: Self, count: usize) -> Option<Self> { + <u64 as Step>::backward_checked(start.0, count).map(|v| VAddr(v)) + } +} + impl From<u64> for VAddr { fn from(num: u64) -> Self { VAddr(num) @@ -3,6 +3,7 @@ #![cfg_attr(test, allow(unused_features))] #![cfg_attr(all(test, feature = "vmtest"), feature(custom_test_frameworks))] #![cfg_attr(all(test, feature = "vmtest"), test_runner(x86test::runner::runner))] +#![cfg_attr(feature = "unstable", feature(step_trait))] use core::arch::asm; #[cfg(target_arch = "x86")] |