This commit is contained in:
Paul Masurel
2016-01-20 00:21:52 +09:00
parent 994a68741e
commit 22ebd6cd5c
3 changed files with 61 additions and 39 deletions

View File

@@ -18,7 +18,6 @@ use std::cell::RefCell;
use core::error::*;
use rand::{thread_rng, Rng};
#[derive(Clone, Debug)]
pub struct SegmentId(pub String);
@@ -156,3 +155,12 @@ impl SharedMmapMemory {
SharedMmapMemory(Arc::new(mmap_memory))
}
}
impl Borrow<[u8]> for SharedMmapMemory {
fn borrow(&self) -> &[u8] {
let SharedMmapMemory(ref arc) = *self;
let mmap: &Mmap = arc.borrow();
unsafe { mmap.as_slice() }
}
}

View File

@@ -1,47 +1,55 @@
use core::directory::Directory;
use core::directory::Segment;
use core::schema::Term;
// use fst::stream::Streamer;
use core::directory::SharedMmapMemory;
use fst::Streamer;
use fst;
use std::borrow::Borrow;
pub struct SegmentIndexReader {
segment: Segment,
term_offsets: fst::Map,
postings_data: SharedMmapMemory,
}
impl SegmentIndexReader {
fn term_cursor<'a>(&'a self) -> SegmentTermCur<'a> {
SegmentTermCur {
segment: &self.segment,
fst_streamer: self.term_offsets.stream(),
postings_data: self.postings_data.borrow(),
}
}
}
pub struct SegmentDocCursor<'a> {
postings_data: &'a [u8],
offset: usize,
}
struct SegmentTermCur<'a> {
segment: &'a Segment,
fst_streamer: fst::map::Stream<'a>,
postings_data: &'a [u8],
}
impl<'a> SegmentTermCur<'a> {
fn next(&mut self,) -> Option<(Term, SegmentDocCursor<'a>)> {
match self.fst_streamer.next() {
Some((k, offset)) => {
let term = Term::from(k);
let doc_cursor = SegmentDocCursor {
postings_data: self.postings_data,
offset: offset as usize,
};
Some((term, doc_cursor))
},
None => None
}
}
}
//
// pub struct SegmentDocCursor<'a> {
// data: &'a [u8],
// }
//
// struct SegmentTermCur<'a> {
// segment: &'a Segment,
// fst_streamer: fst::map::Stream<'a>,
// term: Term<'a>,
//
// }
//
// impl<'a> SegmentTermCur<'a> {
//
// fn next(&mut self,) -> Option<(Term<'a>, SegmentDocCursor<'a>)> {
// match self.fst_streamer.next() {
// Some(_) => None,
// None => None
// }
// }
// }
//
//
// impl SegmentIndexReader {
//
// fn term_cursor<'a>(&'a self) -> SegmentTermCur<'a> {
// let term: Term<'a> {
// self.
// };
// SegmentTermCur {
// segment: &self.segment,
// fst_streamer: self.term_offsets.stream(),
// term:
// }
// }
//
// }

View File

@@ -31,6 +31,12 @@ impl Term {
}
}
pub fn from(data: &[u8]) -> Term {
Term {
data: Vec::from(data),
}
}
pub fn write_into(&self, buf: &mut Vec<u8>) {
buf.clear();
buf.extend(&self.data);