NOBUG Switched to 64 bits addr

This commit is contained in:
Paul Masurel
2017-12-21 11:06:46 +09:00
parent 9e132b7dde
commit 79132e803a
4 changed files with 25 additions and 26 deletions
+5 -5
View File
@@ -159,7 +159,7 @@ impl<'a> FieldSerializer<'a> {
let (filepos, offset) = self.positions_serializer_opt
.as_ref()
.map(|positions_serializer| positions_serializer.addr())
.unwrap_or((0u32, 0u8));
.unwrap_or((0u64, 0u8));
TermInfo {
doc_freq: 0,
postings_offset: self.postings_serializer.addr(),
@@ -311,8 +311,8 @@ impl<W: Write> PostingsSerializer<W> {
self.postings_write.flush()
}
fn addr(&self) -> u32 {
self.postings_write.written_bytes() as u32
fn addr(&self) -> u64 {
self.postings_write.written_bytes() as u64
}
fn clear(&mut self) {
@@ -337,8 +337,8 @@ impl<W: Write> PositionSerializer<W> {
}
}
fn addr(&self) -> (u32, u8) {
(self.write.written_bytes() as u32, self.buffer.len() as u8)
fn addr(&self) -> (u64, u8) {
(self.write.written_bytes() as u64, self.buffer.len() as u8)
}
fn write_block(&mut self) -> io::Result<()> {
+4 -4
View File
@@ -16,9 +16,9 @@ pub struct TermInfo {
/// Number of documents in the segment containing the term
pub doc_freq: u32,
/// Offset within the postings (`.idx`) file.
pub postings_offset: u32,
pub postings_offset: u64,
/// Offset within the position (`.pos`) file.
pub positions_offset: u32,
pub positions_offset: u64,
/// Offset within the position block.
pub positions_inner_offset: u8,
}
@@ -33,8 +33,8 @@ impl BinarySerializable for TermInfo {
fn deserialize<R: io::Read>(reader: &mut R) -> io::Result<Self> {
let doc_freq = u32::deserialize(reader)?;
let postings_offset = u32::deserialize(reader)?;
let positions_offset = u32::deserialize(reader)?;
let postings_offset = u64::deserialize(reader)?;
let positions_offset = u64::deserialize(reader)?;
let positions_inner_offset = u8::deserialize(reader)?;
Ok(TermInfo {
doc_freq,
+5 -5
View File
@@ -27,10 +27,10 @@ impl StoreReader {
let (data_source, offset_index_source, max_doc) = split_source(data);
StoreReader {
data: data_source,
offset_index_source: offset_index_source,
offset_index_source,
current_block_offset: RefCell::new(usize::max_value()),
current_block: RefCell::new(Vec::new()),
max_doc: max_doc,
max_doc,
}
}
@@ -49,9 +49,9 @@ impl StoreReader {
let block_length = u32::deserialize(&mut cursor).unwrap();
let block_array: &[u8] = &total_buffer
[(block_offset + 4 as usize)..(block_offset + 4 + block_length as usize)];
let mut lz4_decoder = try!(lz4::Decoder::new(block_array));
let mut lz4_decoder = lz4::Decoder::new(block_array)?;
*self.current_block_offset.borrow_mut() = usize::max_value();
try!(lz4_decoder.read_to_end(&mut current_block_mut).map(|_| ()));
lz4_decoder.read_to_end(&mut current_block_mut).map(|_| ())?;
*self.current_block_offset.borrow_mut() = block_offset;
}
Ok(())
@@ -70,7 +70,7 @@ impl StoreReader {
let current_block_mut = self.current_block.borrow_mut();
let mut cursor = &current_block_mut[..];
for _ in first_doc_id..doc_id {
let block_length = try!(u32::deserialize(&mut cursor));
let block_length = u32::deserialize(&mut cursor)?;
cursor = &cursor[block_length as usize..];
}
u32::deserialize(&mut cursor)?;
+11 -12
View File
@@ -133,7 +133,6 @@ pub trait TermStreamer: Sized {
fn advance(&mut self) -> bool;
/// Accesses the current key.
///
/// `.key()` should return the key that was returned
/// by the `.next()` method.
///
@@ -204,11 +203,11 @@ mod tests {
const BLOCK_SIZE: usize = 1_500;
fn make_term_info(val: u32) -> TermInfo {
fn make_term_info(val: u64) -> TermInfo {
TermInfo {
doc_freq: val,
positions_offset: val * 2u32,
postings_offset: val * 3u32,
doc_freq: val as u32,
positions_offset: val * 2u64,
postings_offset: val * 3u64,
positions_inner_offset: 5u8,
}
}
@@ -223,10 +222,10 @@ mod tests {
let mut term_dictionary_builder =
TermDictionaryBuilderImpl::new(write, field_type).unwrap();
term_dictionary_builder
.insert("abc".as_bytes(), &make_term_info(34u32))
.insert("abc".as_bytes(), &make_term_info(34u64))
.unwrap();
term_dictionary_builder
.insert("abcd".as_bytes(), &make_term_info(346u32))
.insert("abcd".as_bytes(), &make_term_info(346u64))
.unwrap();
term_dictionary_builder.finish().unwrap();
}
@@ -312,7 +311,7 @@ mod tests {
TermDictionaryBuilderImpl::new(vec![], field_type).unwrap();
for &(ref id, ref i) in &ids {
term_dictionary_builder
.insert(id.as_bytes(), &make_term_info(*i))
.insert(id.as_bytes(), &make_term_info(*i as u64))
.unwrap();
}
term_dictionary_builder.finish().unwrap()
@@ -325,7 +324,7 @@ mod tests {
while let Some((streamer_k, streamer_v)) = streamer.next() {
let &(ref key, ref v) = &ids[i];
assert_eq!(streamer_k.as_ref(), key.as_bytes());
assert_eq!(streamer_v, &make_term_info(*v));
assert_eq!(streamer_v, &make_term_info(*v as u64));
i += 1;
}
}
@@ -377,7 +376,7 @@ mod tests {
TermDictionaryBuilderImpl::new(vec![], field_type).unwrap();
for &(ref id, ref i) in &ids {
term_dictionary_builder
.insert(id.as_bytes(), &make_term_info(*i))
.insert(id.as_bytes(), &make_term_info(*i as u64))
.unwrap();
}
term_dictionary_builder.finish().unwrap()
@@ -398,7 +397,7 @@ mod tests {
let &(ref key, ref v) = &ids[i + j];
assert_eq!(str::from_utf8(streamer_k.as_ref()).unwrap(), key);
assert_eq!(streamer_v.doc_freq, *v);
assert_eq!(streamer_v, &make_term_info(*v));
assert_eq!(streamer_v, &make_term_info(*v as u64));
}
}
}
@@ -447,7 +446,7 @@ mod tests {
for i in 0u8..10u8 {
let number_arr = [i; 1];
term_dictionary_builder
.insert(&number_arr, &make_term_info(i as u32))
.insert(&number_arr, &make_term_info(i as u64))
.unwrap();
}
term_dictionary_builder.finish().unwrap()