Merge pull request #4 from nervosnetwork/remove-failure

refactor: remove failure and f64 for no_std
This commit is contained in:
Jiang Jinyang
2020-01-17 17:09:33 +08:00
committed by GitHub
3 changed files with 29 additions and 7 deletions
-1
View File
@@ -12,7 +12,6 @@ default = ["std"]
std = []
[dependencies]
failure = "0.1.5"
cfg-if = "0.1"
[dev-dependencies]
+19 -5
View File
@@ -1,12 +1,26 @@
pub use failure::Fail;
pub type Result<T> = core::result::Result<T, Error>;
#[derive(Fail, Debug, PartialEq, Eq, Clone)]
#[derive(Debug, PartialEq, Eq, Clone)]
pub enum Error {
#[fail(display = "Get root on an empty MMR")]
GetRootOnEmpty,
#[fail(display = "Inconsistent store")]
InconsistentStore,
#[fail(display = "Store error {}", _0)]
StoreError(crate::string::String),
}
impl core::fmt::Display for Error {
fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
use Error::*;
match self {
GetRootOnEmpty => write!(f, "Get root on an empty MMR")?,
InconsistentStore => write!(f, "Inconsistent store")?,
StoreError(msg) => write!(f, "Store error {}", msg)?,
}
Ok(())
}
}
cfg_if::cfg_if! {
if #[cfg(feature = "std")] {
impl ::std::error::Error for Error {}
}
}
+10 -1
View File
@@ -1,5 +1,14 @@
use crate::vec::Vec;
fn log2(mut n: u64) -> u64 {
let mut k = 0;
while n > 1 {
k += 1;
n >>= 1;
}
k
}
pub fn leaf_index_to_pos(index: u64) -> u64 {
if index == 0 {
return 0;
@@ -10,7 +19,7 @@ pub fn leaf_index_to_pos(index: u64) -> u64 {
let mut height = 0u32;
while leaves > 1 {
// get heighest peak height
height = (leaves as f64).log2() as u32;
height = log2(leaves) as u32;
// calculate leaves in peak
let peak_leaves = 1 << height;
// heighest positon