pub trait CostType: Sized + From<usize> + Copy + Send + Mul<Output = Self> + Div<Output = Self> + Add<Output = Self> + Sub<Output = Self> + Shr<usize, Output = Self> + Shl<usize, Output = Self> + Ord + Debug {
    // Required methods
    fn as_u256(&self) -> U256;
    fn from_u256(val: U256) -> Result<Self>;
    fn as_usize(&self) -> usize;
    fn overflow_add(self, other: Self) -> (Self, bool);
    fn overflow_mul(self, other: Self) -> (Self, bool);
    fn overflow_mul_shr(self, other: Self, shr: usize) -> (Self, bool);
}
Expand description

Cost calculation type. For low-gas usage we calculate costs using usize instead of U256

Required Methods§

source

fn as_u256(&self) -> U256

Converts this cost into U256

source

fn from_u256(val: U256) -> Result<Self>

Tries to fit U256 into this Cost type

source

fn as_usize(&self) -> usize

Convert to usize (may panic)

source

fn overflow_add(self, other: Self) -> (Self, bool)

Add with overflow

source

fn overflow_mul(self, other: Self) -> (Self, bool)

Multiple with overflow

source

fn overflow_mul_shr(self, other: Self, shr: usize) -> (Self, bool)

Single-step full multiplication and shift: (self*other) >> shr Should not overflow on intermediate steps

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl CostType for usize

source§

fn as_u256(&self) -> U256

source§

fn from_u256(val: U256) -> Result<Self>

source§

fn as_usize(&self) -> usize

source§

fn overflow_add(self, other: Self) -> (Self, bool)

source§

fn overflow_mul(self, other: Self) -> (Self, bool)

source§

fn overflow_mul_shr(self, other: Self, shr: usize) -> (Self, bool)

source§

impl CostType for U256

source§

fn as_u256(&self) -> U256

source§

fn from_u256(val: U256) -> Result<Self>

source§

fn as_usize(&self) -> usize

source§

fn overflow_add(self, other: Self) -> (Self, bool)

source§

fn overflow_mul(self, other: Self) -> (Self, bool)

source§

fn overflow_mul_shr(self, other: Self, shr: usize) -> (Self, bool)

Implementors§