aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bits64/paging.rs41
-rw-r--r--src/lib.rs1
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)
diff --git a/src/lib.rs b/src/lib.rs
index 0c35999..42d22bc 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -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")]