diff options
author | Paul Masurel <paul.masurel@gmail.com> | 2017-06-13 23:16:42 +0900 |
---|---|---|
committer | Paul Masurel <paul.masurel@gmail.com> | 2017-06-13 23:16:50 +0900 |
commit | 8875b9794acddd19e828a981ec99bb27e0b57a0d (patch) | |
tree | 60eae6b515570353361a115efa6d3a39ae064ee1 /src/fastfield/reader.rs | |
parent | 90fcfb3f43da1bcf105ac15b2dcdf3167ff9b8c2 (diff) |
Added API to get range from fastfield
Diffstat (limited to 'src/fastfield/reader.rs')
-rw-r--r-- | src/fastfield/reader.rs | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/fastfield/reader.rs b/src/fastfield/reader.rs index 7c01d0a..8413527 100644 --- a/src/fastfield/reader.rs +++ b/src/fastfield/reader.rs @@ -13,6 +13,7 @@ use common::bitpacker::compute_num_bits; use common::bitpacker::BitUnpacker; use schema::FieldType; use error::ResultExt; +use std::mem; use common; use owning_ref::OwningRef; @@ -29,6 +30,7 @@ pub trait FastFieldReader: Sized { /// This accessor should return as fast as possible. fn get(&self, doc: DocId) -> Self::ValueType; + fn get_range(&self, start: u32, output: &mut [Self::ValueType]); /// Opens a fast field given a source. fn open(source: ReadOnlySource) -> Self; @@ -80,6 +82,13 @@ impl FastFieldReader for U64FastFieldReader { } } + fn get_range(&self, start: u32, output: &mut [Self::ValueType]) { + self.bit_unpacker.get_range(start, output); + for out in output.iter_mut() { + *out += self.min_value; + } + } + /// Opens a new fast field reader given a read only source. /// /// # Panics @@ -181,6 +190,19 @@ impl FastFieldReader for I64FastFieldReader { common::u64_to_i64(self.underlying.get(doc)) } + /// + /// # Panics + /// + /// May panic or return wrong random result if `doc` + /// is greater or equal to the segment's `maxdoc`. + fn get_range(&self, start: u32, output: &mut [Self::ValueType]) { + let output_u64: &mut [u64] = unsafe { mem::transmute(output) }; + self.underlying.get_range(start, output_u64); + for mut_val in output_u64.iter_mut() { + *mut_val ^= 1 << 63; + } + } + /// Opens a new fast field reader given a read only source. /// /// # Panics |