diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib.rs | 33 |
1 files changed, 29 insertions, 4 deletions
@@ -1,12 +1,25 @@ extern crate num_traits; -use std::fmt::Debug; +use std::fmt::{Debug, Display}; use std::ops::{Add, Sub}; -use num_traits::{Bounded, WrappingAdd}; +use num_traits::identities; +use num_traits::{Bounded, WrappingAdd, WrappingSub, CheckedAdd, CheckedSub}; // This is pretty wonk.. -pub trait Address where Self: Debug + Copy + Clone + Sized + Ord + Add<Output=Self> + Sub<Output=Self> + From<u16> + Bounded + WrappingAdd { + +pub trait AddressDisplay { + fn stringy(&self) -> String; +} + +pub trait Address where Self: + Debug + Display + AddressDisplay + + Copy + Clone + Sized + + Ord + Eq + PartialEq + Bounded + + Add<Output=Self> + Sub<Output=Self> + + WrappingAdd + WrappingSub + + CheckedAdd + CheckedSub + + identities::One + identities::Zero { fn to_linear(&self) -> usize; } /* @@ -15,6 +28,18 @@ impl <T> Address for T where T: Sized + Ord + Add<Output=Self> + From<u16> + Int } */ +impl AddressDisplay for u32 { + fn stringy(&self) -> String { + format!("{:#x}", self) + } +} + +impl AddressDisplay for u16 { + fn stringy(&self) -> String { + format!("{:#x}", self) + } +} + impl Address for u16 { fn to_linear(&self) -> usize { *self as usize } } @@ -30,7 +55,7 @@ pub trait Decodable where Self: Sized { pub trait Arch { type Address: Address + Debug; - type Instruction: Decodable + LengthedInstruction; + type Instruction: Decodable + LengthedInstruction<Unit=Self::Address>; type Operand; } |