Implement CachedTreeHash for TreeHashVector

This commit is contained in:
Paul Hauner
2019-04-26 11:15:17 +10:00
parent f1d8224d89
commit 15f81c0907
7 changed files with 215 additions and 149 deletions

View File

@@ -1,4 +1,5 @@
use crate::test_utils::{RngCore, TestRandom};
use cached_tree_hash::CachedTreeHash;
use serde_derive::{Deserialize, Serialize};
use ssz::{Decodable, DecodeError, Encodable, SszStream};
use std::ops::{Deref, DerefMut};
@@ -54,6 +55,43 @@ where
}
}
impl<T> CachedTreeHash<TreeHashVector<T>> for TreeHashVector<T>
where
T: CachedTreeHash<T> + TreeHash,
{
fn new_tree_hash_cache(
&self,
depth: usize,
) -> Result<cached_tree_hash::TreeHashCache, cached_tree_hash::Error> {
let (cache, _overlay) = cached_tree_hash::impls::vec::new_tree_hash_cache(self, depth)?;
Ok(cache)
}
fn num_tree_hash_cache_chunks(&self) -> usize {
cached_tree_hash::BTreeOverlay::new(self, 0, 0)
.and_then(|o| Ok(o.num_chunks()))
.unwrap_or_else(|_| 1)
}
fn tree_hash_cache_overlay(
&self,
chunk_offset: usize,
depth: usize,
) -> Result<cached_tree_hash::BTreeOverlay, cached_tree_hash::Error> {
cached_tree_hash::impls::vec::produce_overlay(self, chunk_offset, depth)
}
fn update_tree_hash_cache(
&self,
cache: &mut cached_tree_hash::TreeHashCache,
) -> Result<(), cached_tree_hash::Error> {
cached_tree_hash::impls::vec::update_tree_hash_cache(self, cache)?;
Ok(())
}
}
impl<T> Encodable for TreeHashVector<T>
where
T: Encodable,