simplified append_list, read_list

This commit is contained in:
debris 2016-09-18 14:05:39 +02:00
parent bfe1b6e823
commit 7f1bc7de05
4 changed files with 8 additions and 12 deletions

View File

@ -1,5 +1,4 @@
use block_header::BlockHeader;
use compact_integer::CompactInteger;
use crypto::dhash256;
use hash::H256;
use merkle_root::merkle_root;
@ -16,7 +15,6 @@ impl Serializable for Block {
fn serialize(&self, stream: &mut Stream) {
stream
.append(&self.block_header)
.append(&CompactInteger::from(self.transactions.len()))
.append_list(&self.transactions);
}
}
@ -24,8 +22,7 @@ impl Serializable for Block {
impl Deserializable for Block {
fn deserialize(reader: &mut Reader) -> Result<Self, ReaderError> where Self: Sized {
let block_header = try!(reader.read());
let tx_len = try!(reader.read::<CompactInteger>());
let transactions = try!(reader.read_list(tx_len.into()));
let transactions = try!(reader.read_list());
let result = Block {
block_header: block_header,

View File

@ -1,5 +1,6 @@
use std::{io, cmp};
use byteorder::{LittleEndian, ReadBytesExt};
use compact_integer::CompactInteger;
pub fn deserialize<T>(buffer: &[u8]) -> Result<T, Error> where T: Deserializable {
let mut reader = Reader::new(buffer);
@ -65,7 +66,8 @@ impl<'a> Reader<'a> {
Ok(result)
}
pub fn read_list<T>(&mut self, len: usize) -> Result<Vec<T>, Error> where T: Deserializable {
pub fn read_list<T>(&mut self) -> Result<Vec<T>, Error> where T: Deserializable {
let len: usize = try!(self.read::<CompactInteger>()).into();
let mut result = vec![];
for _ in 0..len {

View File

@ -1,6 +1,7 @@
//! Stream used for serialization.
use std::io::{self, Write};
use byteorder::{LittleEndian, WriteBytesExt};
use compact_integer::CompactInteger;
pub fn serialize(t: &Serializable) -> Vec<u8> {
let mut stream = Stream::default();
@ -35,6 +36,7 @@ impl Stream {
/// Appends a list of serializable structs to the end of the stream.
pub fn append_list<T>(&mut self, t: &[T]) -> &mut Self where T: Serializable {
CompactInteger::from(t.len()).serialize(self);
for i in t {
i.serialize(self);
}

View File

@ -8,7 +8,6 @@ use reader::{Deserializable, Reader, Error as ReaderError, deserialize};
use crypto::dhash256;
use hash::H256;
use stream::{Serializable, Stream, serialize};
use compact_integer::CompactInteger;
// Below flags apply in the context of BIP 68
// If this flag set, CTxIn::nSequence is NOT interpreted as a
@ -172,9 +171,7 @@ impl Serializable for Transaction {
fn serialize(&self, stream: &mut Stream) {
stream
.append(&self.version)
.append(&CompactInteger::from(self.inputs.len()))
.append_list(&self.inputs)
.append(&CompactInteger::from(self.outputs.len()))
.append_list(&self.outputs)
.append(&self.lock_time);
}
@ -183,10 +180,8 @@ impl Serializable for Transaction {
impl Deserializable for Transaction {
fn deserialize(reader: &mut Reader) -> Result<Self, ReaderError> where Self: Sized {
let version = try!(reader.read());
let tx_inputs_len= try!(reader.read::<CompactInteger>());
let tx_inputs = try!(reader.read_list(tx_inputs_len.into()));
let tx_outputs_len= try!(reader.read::<CompactInteger>());
let tx_outputs = try!(reader.read_list(tx_outputs_len.into()));
let tx_inputs = try!(reader.read_list());
let tx_outputs = try!(reader.read_list());
let lock_time = try!(reader.read());
let result = Transaction {