From dcba7bb36ff58c5f016facdfccc78cfb92d7ecbf Mon Sep 17 00:00:00 2001 From: Paul Masurel Date: Mon, 15 Feb 2016 09:44:37 +0900 Subject: [PATCH] top --- src/core/mod.rs | 1 + src/core/serialize.rs | 44 ++++++++++++++++++++++++++++++++++++++++++ src/core/skip.rs | 45 +++---------------------------------------- 3 files changed, 48 insertions(+), 42 deletions(-) create mode 100644 src/core/serialize.rs diff --git a/src/core/mod.rs b/src/core/mod.rs index d1e74071a..72e347cff 100644 --- a/src/core/mod.rs +++ b/src/core/mod.rs @@ -13,3 +13,4 @@ pub mod searcher; pub mod collector; pub mod skip; pub use core::global::DocId; +pub mod serialize; diff --git a/src/core/serialize.rs b/src/core/serialize.rs new file mode 100644 index 000000000..d16e98289 --- /dev/null +++ b/src/core/serialize.rs @@ -0,0 +1,44 @@ +use byteorder; +use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt}; +use std::fmt; +use std::io::Write; +use core::error; +use std::io::Read; + +pub trait BinarySerializable : fmt::Debug + Sized { + // TODO move Result from Error. + fn serialize(&self, writer: &mut Write) -> error::Result; + fn deserialize(reader: &mut Read) -> error::Result; +} + +impl BinarySerializable for () { + fn serialize(&self, writer: &mut Write) -> error::Result { + Ok(0) + } + fn deserialize(reader: &mut Read) -> error::Result { + Ok(()) + } +} + +impl BinarySerializable for Vec { + fn serialize(&self, writer: &mut Write) -> error::Result { + let mut total_size = 0; + writer.write_u32::(self.len() as u32); + total_size += 4; + for it in self.iter() { + let item_size = try!(it.serialize(writer)); + total_size += item_size; + } + Ok(total_size) + } + fn deserialize(reader: &mut Read) -> error::Result> { + // TODO error + let num_items = reader.read_u32::().unwrap(); + let mut items: Vec = Vec::with_capacity(num_items as usize); + for i in 0..num_items { + let item = try!(T::deserialize(reader)); + items.push(item); + } + Ok(items) + } +} diff --git a/src/core/skip.rs b/src/core/skip.rs index 447b9d2b9..1e530b8f6 100644 --- a/src/core/skip.rs +++ b/src/core/skip.rs @@ -7,50 +7,11 @@ use std::io::Seek; use std::marker::PhantomData; use core::DocId; use std::ops::DerefMut; -use bincode; -use byteorder; use core::error; +use byteorder; use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt}; use std::fmt; - - -pub trait BinarySerializable : fmt::Debug + Sized { - // TODO move Result from Error. - fn serialize(&self, writer: &mut Write) -> error::Result; - fn deserialize(reader: &mut Read) -> error::Result; -} - -impl BinarySerializable for () { - fn serialize(&self, writer: &mut Write) -> error::Result { - Ok(0) - } - fn deserialize(reader: &mut Read) -> error::Result { - Ok(()) - } -} - -impl BinarySerializable for Vec { - fn serialize(&self, writer: &mut Write) -> error::Result { - let mut total_size = 0; - writer.write_u32::(self.len() as u32); - total_size += 4; - for it in self.iter() { - let item_size = try!(it.serialize(writer)); - total_size += item_size; - } - Ok(total_size) - } - fn deserialize(reader: &mut Read) -> error::Result> { - // TODO error - let num_items = reader.read_u32::().unwrap(); - let mut items: Vec = Vec::with_capacity(num_items as usize); - for i in 0..num_items { - let item = try!(T::deserialize(reader)); - items.push(item); - } - Ok(items) - } -} +use core::serialize::*; struct LayerBuilder { period: usize, @@ -89,7 +50,7 @@ impl LayerBuilder { self.remaining -= 1; self.len += 1; let offset = self.written_size() as u32; // TODO not sure if we want after or here - let mut res; + let res; if self.remaining == 0 { self.remaining = self.period; res = Some((doc_id, offset));