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;  } | 
