diff --git a/src/collector/mod.rs b/src/collector/mod.rs index f64df3cde..1f43851a9 100644 --- a/src/collector/mod.rs +++ b/src/collector/mod.rs @@ -93,6 +93,7 @@ mod tests { use super::*; use test::Bencher; + use ScoredDoc; #[bench] fn build_collector(b: &mut Bencher) { @@ -100,7 +101,7 @@ mod tests { let mut count_collector = CountCollector::new(); let docs: Vec = (0..1_000_000).collect(); for doc in docs { - count_collector.collect(doc, 1f32); + count_collector.collect(ScoredDoc(1f32, doc)); } count_collector.count() }); diff --git a/src/compression/simdcomp.rs b/src/compression/simdcomp.rs index a6512c0eb..f40d5c694 100644 --- a/src/compression/simdcomp.rs +++ b/src/compression/simdcomp.rs @@ -199,7 +199,7 @@ mod tests { assert_eq!(remaining_data.len(), 0); } for i in 0..128 { - assert_eq!(vals[i], decoder.output()[i]); + assert_eq!(vals[i], decoder.output(i)); } } @@ -214,7 +214,7 @@ mod tests { assert_eq!(remaining_data.len(), 0); } for i in 0..128 { - assert_eq!(vals[i], decoder.output()[i]); + assert_eq!(vals[i], decoder.output(i)); } } @@ -234,7 +234,7 @@ mod tests { assert_eq!(remaining_data[0], 173u8); } for i in 0..n { - assert_eq!(vals[i], decoder.output()[i]); + assert_eq!(vals[i], decoder.output(i)); } } @@ -254,7 +254,7 @@ mod tests { assert_eq!(remaining_data[0], 173u8); } for i in 0..n { - assert_eq!(vals[i], decoder.output()[i]); + assert_eq!(vals[i], decoder.output(i)); } } @@ -274,7 +274,7 @@ mod tests { let mut decoder = SIMDBlockDecoder::new(); let remaining_data = decoder.uncompress_vint_sorted(&encoded_data, *offset, input.len()); assert_eq!(0, remaining_data.len()); - for (&decoded, &expected) in decoder.output().iter().zip(input.iter()) { + for (&decoded, &expected) in decoder.output_array().iter().zip(input.iter()) { assert_eq!(decoded, expected); } } diff --git a/src/core/index.rs b/src/core/index.rs index 38e6be78b..f083a04a9 100644 --- a/src/core/index.rs +++ b/src/core/index.rs @@ -15,7 +15,7 @@ use num_cpus; use core::segment_serializer::SegmentSerializer; -#[derive(Clone, PartialEq, Eq, Hash,RustcDecodable,RustcEncodable)] +#[derive(Clone, Copy, PartialEq, Eq, Hash,RustcDecodable,RustcEncodable)] pub struct SegmentId(Uuid); impl SegmentId { @@ -48,6 +48,12 @@ impl IndexMeta { schema: schema, } } + + fn segment_ordinal(&self, segment_id: SegmentId) -> Option { + self.segments + .iter() + .position(|&el| el == segment_id) + } } impl fmt::Debug for Index { @@ -147,10 +153,8 @@ impl Index { pub fn publish_merge_segment(&mut self, segments: &Vec, merged_segment: &Segment) -> io::Result<()> { { let mut meta_write = self.metas.write().unwrap(); - for segment in segments.iter() { - let segment_pos = meta_write - .segments.iter() - .position(|el| *el == segment.id()); + for segment in segments { + let segment_pos = meta_write.segment_ordinal(segment.id()); match segment_pos { Some(pos) => { meta_write.segments.remove(pos); @@ -176,17 +180,16 @@ impl Index { } pub fn segments(&self,) -> Vec { - // TODO handle error self.segment_ids() .into_iter() - .map(|segment_id| self.segment(&segment_id)) + .map(|segment_id| self.segment(segment_id)) .collect() } - pub fn segment(&self, segment_id: &SegmentId) -> Segment { + pub fn segment(&self, segment_id: SegmentId) -> Segment { Segment { index: self.clone(), - segment_id: segment_id.clone() + segment_id: segment_id } } @@ -201,7 +204,7 @@ impl Index { } pub fn new_segment(&self,) -> Segment { - self.segment(&SegmentId::new()) + self.segment(SegmentId::new()) } pub fn load_metas(&mut self,) -> io::Result<()> { @@ -262,7 +265,7 @@ impl Segment { } pub fn id(&self,) -> SegmentId { - self.segment_id.clone() + self.segment_id } fn path_suffix(component: &SegmentComponent)-> &'static str { diff --git a/src/core/merger.rs b/src/core/merger.rs index c78b56121..c2d6d21c3 100644 --- a/src/core/merger.rs +++ b/src/core/merger.rs @@ -226,7 +226,7 @@ mod tests { use schema::Document; use schema::Term; use core::index::Index; - use core::searcher::DocAddress; + use DocAddress; use collector::FastFieldTestCollector; use collector::TestCollector; use query::MultiTermQuery; diff --git a/src/core/segment_writer.rs b/src/core/segment_writer.rs index 375ec5808..5f90bcafd 100644 --- a/src/core/segment_writer.rs +++ b/src/core/segment_writer.rs @@ -41,7 +41,8 @@ impl SegmentWriter { // - the dictionary in an fst // - the postings // - the segment info - // The segment writer cannot be used after this. + // The segment writer cannot be used after this, which is + // enforced by the fact that "self" is moved. pub fn finalize(mut self,) -> io::Result<()> { let segment_info = self.segment_info(); self.postings_writer.close(); diff --git a/src/directory/directory.rs b/src/directory/directory.rs index eca3692ec..1a73ce4ee 100644 --- a/src/directory/directory.rs +++ b/src/directory/directory.rs @@ -5,15 +5,6 @@ use std::fmt; use std::path::Path; use directory::{ReadOnlySource, WritePtr}; -/////////////////////////////////////////////////////////////// -// -// #[derive(Debug)] -// pub enum CreateError { -// RootDirectoryDoesNotExist, -// DirectoryAlreadyExists, -// CannotCreateTempDirectory(io::Error), -// } - pub trait Directory: fmt::Debug + Send + Sync { fn open_read(&self, path: &Path) -> io::Result; fn open_write(&mut self, path: &Path) -> io::Result;