Even more style
This commit is contained in:
parent
469b0a17dc
commit
9286a03656
@ -1,5 +1,3 @@
|
|||||||
//#![allow(dead_code)] //TODO: remove this after everything is done
|
|
||||||
|
|
||||||
use mio::*;
|
use mio::*;
|
||||||
use hash::*;
|
use hash::*;
|
||||||
use rlp::*;
|
use rlp::*;
|
||||||
@ -126,15 +124,15 @@ impl Session {
|
|||||||
}
|
}
|
||||||
match packet_id {
|
match packet_id {
|
||||||
PACKET_HELLO => {
|
PACKET_HELLO => {
|
||||||
let rlp = UntrustedRlp::new(&packet.data[1..]); //TODO: validate rlp expected size
|
let rlp = UntrustedRlp::new(&packet.data[1..]); //TODO: validate rlp expected size
|
||||||
try!(self.read_hello(&rlp, host));
|
try!(self.read_hello(&rlp, host));
|
||||||
Ok(SessionData::Ready)
|
Ok(SessionData::Ready)
|
||||||
}
|
},
|
||||||
PACKET_DISCONNECT => Err(Error::Disconnect(DisconnectReason::DisconnectRequested)),
|
PACKET_DISCONNECT => Err(Error::Disconnect(DisconnectReason::DisconnectRequested)),
|
||||||
PACKET_PING => {
|
PACKET_PING => {
|
||||||
try!(self.write_pong());
|
try!(self.write_pong());
|
||||||
Ok(SessionData::None)
|
Ok(SessionData::None)
|
||||||
}
|
},
|
||||||
PACKET_GET_PEERS => Ok(SessionData::None), //TODO;
|
PACKET_GET_PEERS => Ok(SessionData::None), //TODO;
|
||||||
PACKET_PEERS => Ok(SessionData::None),
|
PACKET_PEERS => Ok(SessionData::None),
|
||||||
PACKET_USER ... PACKET_LAST => {
|
PACKET_USER ... PACKET_LAST => {
|
||||||
@ -226,7 +224,6 @@ impl Session {
|
|||||||
self.send(try!(Session::prepare(PACKET_PONG, 0)))
|
self.send(try!(Session::prepare(PACKET_PONG, 0)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fn disconnect(&mut self, reason: DisconnectReason) -> Error {
|
fn disconnect(&mut self, reason: DisconnectReason) -> Error {
|
||||||
let mut rlp = RlpStream::new();
|
let mut rlp = RlpStream::new();
|
||||||
rlp.append(&(PACKET_DISCONNECT as u32));
|
rlp.append(&(PACKET_DISCONNECT as u32));
|
||||||
|
@ -29,8 +29,8 @@ impl<'a, 'view> View<'a, 'view> for Rlp<'a> where 'a: 'view {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn raw(&'view self) -> &'a [u8] {
|
fn as_raw(&'view self) -> &'a [u8] {
|
||||||
self.rlp.raw()
|
self.rlp.as_raw()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn prototype(&self) -> Self::Prototype {
|
fn prototype(&self) -> Self::Prototype {
|
||||||
|
@ -32,11 +32,11 @@ pub trait View<'a, 'view>: Sized {
|
|||||||
/// fn main () {
|
/// fn main () {
|
||||||
/// let data = vec![0xc8, 0x83, b'c', b'a', b't', 0x83, b'd', b'o', b'g'];
|
/// let data = vec![0xc8, 0x83, b'c', b'a', b't', 0x83, b'd', b'o', b'g'];
|
||||||
/// let rlp = Rlp::new(&data);
|
/// let rlp = Rlp::new(&data);
|
||||||
/// let dog = rlp.at(1).raw();
|
/// let dog = rlp.at(1).as_raw();
|
||||||
/// assert_eq!(dog, &[0x83, b'd', b'o', b'g']);
|
/// assert_eq!(dog, &[0x83, b'd', b'o', b'g']);
|
||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
fn raw(&'view self) -> &'a [u8];
|
fn as_raw(&'view self) -> &'a [u8];
|
||||||
|
|
||||||
/// Get the prototype of the RLP.
|
/// Get the prototype of the RLP.
|
||||||
fn prototype(&self) -> Self::Prototype;
|
fn prototype(&self) -> Self::Prototype;
|
||||||
|
@ -19,19 +19,19 @@ fn rlp_at() {
|
|||||||
|
|
||||||
let cat = rlp.at(0).unwrap();
|
let cat = rlp.at(0).unwrap();
|
||||||
assert!(cat.is_data());
|
assert!(cat.is_data());
|
||||||
assert_eq!(cat.raw(), &[0x83, b'c', b'a', b't']);
|
assert_eq!(cat.as_raw(), &[0x83, b'c', b'a', b't']);
|
||||||
//assert_eq!(String::decode_untrusted(&cat).unwrap(), "cat".to_string());
|
//assert_eq!(String::decode_untrusted(&cat).unwrap(), "cat".to_string());
|
||||||
assert_eq!(cat.as_val::<String>().unwrap(), "cat".to_string());
|
assert_eq!(cat.as_val::<String>().unwrap(), "cat".to_string());
|
||||||
|
|
||||||
let dog = rlp.at(1).unwrap();
|
let dog = rlp.at(1).unwrap();
|
||||||
assert!(dog.is_data());
|
assert!(dog.is_data());
|
||||||
assert_eq!(dog.raw(), &[0x83, b'd', b'o', b'g']);
|
assert_eq!(dog.as_raw(), &[0x83, b'd', b'o', b'g']);
|
||||||
//assert_eq!(String::decode_untrusted(&dog).unwrap(), "dog".to_string());
|
//assert_eq!(String::decode_untrusted(&dog).unwrap(), "dog".to_string());
|
||||||
assert_eq!(dog.as_val::<String>().unwrap(), "dog".to_string());
|
assert_eq!(dog.as_val::<String>().unwrap(), "dog".to_string());
|
||||||
|
|
||||||
let cat_again = rlp.at(0).unwrap();
|
let cat_again = rlp.at(0).unwrap();
|
||||||
assert!(cat_again.is_data());
|
assert!(cat_again.is_data());
|
||||||
assert_eq!(cat_again.raw(), &[0x83, b'c', b'a', b't']);
|
assert_eq!(cat_again.as_raw(), &[0x83, b'c', b'a', b't']);
|
||||||
//assert_eq!(String::decode_untrusted(&cat_again).unwrap(), "cat".to_string());
|
//assert_eq!(String::decode_untrusted(&cat_again).unwrap(), "cat".to_string());
|
||||||
assert_eq!(cat_again.as_val::<String>().unwrap(), "cat".to_string());
|
assert_eq!(cat_again.as_val::<String>().unwrap(), "cat".to_string());
|
||||||
}
|
}
|
||||||
@ -61,18 +61,18 @@ fn rlp_iter() {
|
|||||||
|
|
||||||
let cat = iter.next().unwrap();
|
let cat = iter.next().unwrap();
|
||||||
assert!(cat.is_data());
|
assert!(cat.is_data());
|
||||||
assert_eq!(cat.raw(), &[0x83, b'c', b'a', b't']);
|
assert_eq!(cat.as_raw(), &[0x83, b'c', b'a', b't']);
|
||||||
|
|
||||||
let dog = iter.next().unwrap();
|
let dog = iter.next().unwrap();
|
||||||
assert!(dog.is_data());
|
assert!(dog.is_data());
|
||||||
assert_eq!(dog.raw(), &[0x83, b'd', b'o', b'g']);
|
assert_eq!(dog.as_raw(), &[0x83, b'd', b'o', b'g']);
|
||||||
|
|
||||||
let none = iter.next();
|
let none = iter.next();
|
||||||
assert!(none.is_none());
|
assert!(none.is_none());
|
||||||
|
|
||||||
let cat_again = rlp.at(0).unwrap();
|
let cat_again = rlp.at(0).unwrap();
|
||||||
assert!(cat_again.is_data());
|
assert!(cat_again.is_data());
|
||||||
assert_eq!(cat_again.raw(), &[0x83, b'c', b'a', b't']);
|
assert_eq!(cat_again.as_raw(), &[0x83, b'c', b'a', b't']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,7 +79,7 @@ impl<'a, 'view> View<'a, 'view> for UntrustedRlp<'a> where 'a: 'view {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn raw(&'view self) -> &'a [u8] {
|
fn as_raw(&'view self) -> &'a [u8] {
|
||||||
self.bytes
|
self.bytes
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -294,7 +294,7 @@ impl<'a> Decoder for BasicDecoder<'a> {
|
|||||||
fn read_value<T, F>(&self, f: F) -> Result<T, DecoderError>
|
fn read_value<T, F>(&self, f: F) -> Result<T, DecoderError>
|
||||||
where F: FnOnce(&[u8]) -> Result<T, DecoderError> {
|
where F: FnOnce(&[u8]) -> Result<T, DecoderError> {
|
||||||
|
|
||||||
let bytes = self.rlp.raw();
|
let bytes = self.rlp.as_raw();
|
||||||
|
|
||||||
match bytes.first().map(|&x| x) {
|
match bytes.first().map(|&x| x) {
|
||||||
// rlp is too short
|
// rlp is too short
|
||||||
@ -316,7 +316,7 @@ impl<'a> Decoder for BasicDecoder<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn as_raw(&self) -> &[u8] {
|
fn as_raw(&self) -> &[u8] {
|
||||||
self.rlp.raw()
|
self.rlp.as_raw()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn as_list(&self) -> Result<Vec<Self>, DecoderError> {
|
fn as_list(&self) -> Result<Vec<Self>, DecoderError> {
|
||||||
|
@ -25,13 +25,13 @@ impl<'a> Node<'a> {
|
|||||||
// fed back into this function or inline RLP which can be fed back into this function).
|
// fed back into this function or inline RLP which can be fed back into this function).
|
||||||
Prototype::List(2) => match NibbleSlice::from_encoded(r.at(0).data()) {
|
Prototype::List(2) => match NibbleSlice::from_encoded(r.at(0).data()) {
|
||||||
(slice, true) => Node::Leaf(slice, r.at(1).data()),
|
(slice, true) => Node::Leaf(slice, r.at(1).data()),
|
||||||
(slice, false) => Node::Extension(slice, r.at(1).raw()),
|
(slice, false) => Node::Extension(slice, r.at(1).as_raw()),
|
||||||
},
|
},
|
||||||
// branch - first 16 are nodes, 17th is a value (or empty).
|
// branch - first 16 are nodes, 17th is a value (or empty).
|
||||||
Prototype::List(17) => {
|
Prototype::List(17) => {
|
||||||
let mut nodes: [&'a [u8]; 16] = unsafe { ::std::mem::uninitialized() };
|
let mut nodes: [&'a [u8]; 16] = unsafe { ::std::mem::uninitialized() };
|
||||||
for i in 0..16 {
|
for i in 0..16 {
|
||||||
nodes[i] = r.at(i).raw();
|
nodes[i] = r.at(i).as_raw();
|
||||||
}
|
}
|
||||||
Node::Branch(nodes, if r.at(16).is_empty() { None } else { Some(r.at(16).data()) })
|
Node::Branch(nodes, if r.at(16).is_empty() { None } else { Some(r.at(16).data()) })
|
||||||
},
|
},
|
||||||
|
@ -309,22 +309,22 @@ impl<'db> TrieDBMut<'db> {
|
|||||||
/// removal instructions from the backing database.
|
/// removal instructions from the backing database.
|
||||||
fn take_node<'a, 'rlp_view>(&'a self, rlp: &'rlp_view Rlp<'a>, journal: &mut Journal) -> &'a [u8] where 'a: 'rlp_view {
|
fn take_node<'a, 'rlp_view>(&'a self, rlp: &'rlp_view Rlp<'a>, journal: &mut Journal) -> &'a [u8] where 'a: 'rlp_view {
|
||||||
if rlp.is_list() {
|
if rlp.is_list() {
|
||||||
trace!("take_node {:?} (inline)", rlp.raw().pretty());
|
trace!("take_node {:?} (inline)", rlp.as_raw().pretty());
|
||||||
rlp.raw()
|
rlp.as_raw()
|
||||||
}
|
}
|
||||||
else if rlp.is_data() && rlp.size() == 32 {
|
else if rlp.is_data() && rlp.size() == 32 {
|
||||||
let h = rlp.as_val();
|
let h = rlp.as_val();
|
||||||
let r = self.db.lookup(&h).unwrap_or_else(||{
|
let r = self.db.lookup(&h).unwrap_or_else(||{
|
||||||
println!("Node not found! rlp={:?}, node_hash={:?}", rlp.raw().pretty(), h);
|
println!("Node not found! rlp={:?}, node_hash={:?}", rlp.as_raw().pretty(), h);
|
||||||
println!("Journal: {:?}", journal);
|
println!("Journal: {:?}", journal);
|
||||||
panic!();
|
panic!();
|
||||||
});
|
});
|
||||||
trace!("take_node {:?} (indirect for {:?})", rlp.raw().pretty(), r);
|
trace!("take_node {:?} (indirect for {:?})", rlp.as_raw().pretty(), r);
|
||||||
journal.delete_node_sha3(h);
|
journal.delete_node_sha3(h);
|
||||||
r
|
r
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
trace!("take_node {:?} (???)", rlp.raw().pretty());
|
trace!("take_node {:?} (???)", rlp.as_raw().pretty());
|
||||||
panic!("Empty or invalid node given?");
|
panic!("Empty or invalid node given?");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -350,7 +350,7 @@ impl<'db> TrieDBMut<'db> {
|
|||||||
for i in 0..17 {
|
for i in 0..17 {
|
||||||
match index == i {
|
match index == i {
|
||||||
// not us - leave alone.
|
// not us - leave alone.
|
||||||
false => { s.append_raw(old_rlp.at(i).raw(), 1); },
|
false => { s.append_raw(old_rlp.at(i).as_raw(), 1); },
|
||||||
// branch-leaf entry - just replace.
|
// branch-leaf entry - just replace.
|
||||||
true if i == 16 => { s.append(&value); },
|
true if i == 16 => { s.append(&value); },
|
||||||
// original had empty slot - place a leaf there.
|
// original had empty slot - place a leaf there.
|
||||||
@ -384,13 +384,13 @@ impl<'db> TrieDBMut<'db> {
|
|||||||
// not us - empty.
|
// not us - empty.
|
||||||
_ if index != i => { s.append_empty_data(); },
|
_ if index != i => { s.append_empty_data(); },
|
||||||
// branch-value: just replace.
|
// branch-value: just replace.
|
||||||
true if i == 16 => { s.append_raw(old_rlp.at(1).raw(), 1); },
|
true if i == 16 => { s.append_raw(old_rlp.at(1).as_raw(), 1); },
|
||||||
// direct extension: just replace.
|
// direct extension: just replace.
|
||||||
false if existing_key.len() == 1 => { s.append_raw(old_rlp.at(1).raw(), 1); },
|
false if existing_key.len() == 1 => { s.append_raw(old_rlp.at(1).as_raw(), 1); },
|
||||||
// original has empty slot.
|
// original has empty slot.
|
||||||
true => journal.new_node(Self::compose_leaf(&existing_key.mid(1), old_rlp.at(1).data()), &mut s),
|
true => journal.new_node(Self::compose_leaf(&existing_key.mid(1), old_rlp.at(1).data()), &mut s),
|
||||||
// additional work required after branching.
|
// additional work required after branching.
|
||||||
false => journal.new_node(Self::compose_extension(&existing_key.mid(1), old_rlp.at(1).raw()), &mut s),
|
false => journal.new_node(Self::compose_extension(&existing_key.mid(1), old_rlp.at(1).as_raw()), &mut s),
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
self.augmented(&s.out(), partial, value, journal)
|
self.augmented(&s.out(), partial, value, journal)
|
||||||
@ -422,7 +422,7 @@ impl<'db> TrieDBMut<'db> {
|
|||||||
trace!("partially-shared-prefix (exist={:?}; new={:?}; cp={:?}): AUGMENT-AT-END", existing_key.len(), partial.len(), cp);
|
trace!("partially-shared-prefix (exist={:?}; new={:?}; cp={:?}): AUGMENT-AT-END", existing_key.len(), partial.len(), cp);
|
||||||
|
|
||||||
// low (farther from root)
|
// low (farther from root)
|
||||||
let low = Self::compose_raw(&existing_key.mid(cp), old_rlp.at(1).raw(), is_leaf);
|
let low = Self::compose_raw(&existing_key.mid(cp), old_rlp.at(1).as_raw(), is_leaf);
|
||||||
let augmented_low = self.augmented(&low, &partial.mid(cp), value, journal);
|
let augmented_low = self.augmented(&low, &partial.mid(cp), value, journal);
|
||||||
|
|
||||||
// high (closer to root)
|
// high (closer to root)
|
||||||
|
26
src/uint.rs
26
src/uint.rs
@ -63,6 +63,28 @@ macro_rules! construct_uint {
|
|||||||
let &$name(ref arr) = self;
|
let &$name(ref arr) = self;
|
||||||
arr[0]
|
arr[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Conversion to u32 with overflow checking
|
||||||
|
#[inline]
|
||||||
|
pub fn as_u32(&self) -> u32 {
|
||||||
|
let &$name(ref arr) = self;
|
||||||
|
if (arr[0] & (0xffffffffu64 << 32)) != 0 {
|
||||||
|
panic!("Intger overflow when casting U256")
|
||||||
|
}
|
||||||
|
self.as_u64() as u32
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Conversion to u64 with overflow checking
|
||||||
|
#[inline]
|
||||||
|
pub fn as_u64(&self) -> u64 {
|
||||||
|
let &$name(ref arr) = self;
|
||||||
|
for i in 1..$n_words {
|
||||||
|
if arr[i] != 0 {
|
||||||
|
panic!("Intger overflow when casting U256")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
arr[0]
|
||||||
|
}
|
||||||
/// Return the least number of bits needed to represent the number
|
/// Return the least number of bits needed to represent the number
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn bits(&self) -> usize {
|
pub fn bits(&self) -> usize {
|
||||||
@ -442,13 +464,13 @@ impl From<U128> for U256 {
|
|||||||
|
|
||||||
impl From<U256> for u64 {
|
impl From<U256> for u64 {
|
||||||
fn from(value: U256) -> u64 {
|
fn from(value: U256) -> u64 {
|
||||||
value.low_u64()
|
value.as_u64()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl From<U256> for u32 {
|
impl From<U256> for u32 {
|
||||||
fn from(value: U256) -> u32 {
|
fn from(value: U256) -> u32 {
|
||||||
value.low_u32()
|
value.as_u32()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user