changeset 187:82c2b63653c5

table_reader: Avoid unnecessary clones.
author Lewin Bormann <lbo@spheniscida.de>
date Wed, 23 Aug 2017 19:46:55 +0200
parents b573f3b55cf2
children ba0516209e6c
files src/table_reader.rs
diffstat 1 files changed, 7 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/table_reader.rs	Wed Aug 23 19:45:36 2017 +0200
+++ b/src/table_reader.rs	Wed Aug 23 19:46:55 2017 +0200
@@ -83,11 +83,9 @@
 impl Table {
     /// Creates a new table reader operating on unformatted keys (i.e., UserKey).
     fn new_raw(opt: Options, file: Arc<Box<RandomAccess>>, size: usize) -> Result<Table> {
-        let rfile = file.as_ref().as_ref();
-
-        let footer = try!(read_footer(rfile, size));
-        let indexblock = try!(TableBlock::read_block(opt.clone(), rfile, &footer.index));
-        let metaindexblock = try!(TableBlock::read_block(opt.clone(), rfile, &footer.meta_index));
+        let footer = try!(read_footer(file.as_ref().as_ref(), size));
+        let indexblock = try!(TableBlock::read_block(opt.clone(), file.as_ref().as_ref(), &footer.index));
+        let metaindexblock = try!(TableBlock::read_block(opt.clone(), file.as_ref().as_ref(), &footer.meta_index));
 
         if !indexblock.verify() || !metaindexblock.verify() {
             return Err(Status::new(StatusCode::InvalidData,
@@ -106,7 +104,7 @@
             let filter_block_location = BlockHandle::decode(&val).0;
 
             if filter_block_location.size() > 0 {
-                let buf = try!(read_bytes(rfile, &filter_block_location));
+                let buf = try!(read_bytes(file.as_ref().as_ref(), &filter_block_location));
                 filter_block_reader = Some(FilterBlockReader::new_owned(opt.filter_policy.clone(),
                                                                         buf));
             }
@@ -115,8 +113,7 @@
         let cache_id = opt.block_cache.lock().unwrap().new_cache_id();
 
         Ok(Table {
-            // clone file here so that we can use a immutable reference rfile above.
-            file: file.clone(),
+            file: file,
             file_size: size,
             cache_id: cache_id,
             opt: opt,
@@ -153,15 +150,14 @@
             }
         }
 
-        let rfile = self.file.clone();
         // Two times as_ref(): First time to get a ref from Arc<>, then one from Box<>.
-        let b = try!(TableBlock::read_block(self.opt.clone(), rfile.as_ref().as_ref(), location));
+        let b = try!(TableBlock::read_block(self.opt.clone(), self.file.as_ref().as_ref(), location));
 
         if !b.verify() {
             return Err(Status::new(StatusCode::InvalidData, "Data block failed verification"));
         }
         if let Ok(ref mut block_cache) = self.opt.block_cache.lock() {
-            // inserting a cheap copy (Rc)
+            // insert a cheap copy (Rc).
             block_cache.insert(&cachekey, b.clone());
         }