From 5d951e6dd6b130702fffb7238e7cb5daa782ca7d Mon Sep 17 00:00:00 2001 From: iximeow Date: Tue, 29 Jan 2019 02:41:42 -0800 Subject: add some predetermined address display stuff also add zero and one traits to Address, adjust layout --- src/lib.rs | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/lib.rs b/src/lib.rs index 77d3df2..b72686a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -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 + Sub + From + 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 + Sub + + WrappingAdd + WrappingSub + + CheckedAdd + CheckedSub + + identities::One + identities::Zero { fn to_linear(&self) -> usize; } /* @@ -15,6 +28,18 @@ impl Address for T where T: Sized + Ord + Add + From + 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; type Operand; } -- cgit v1.1