]> git.mikk.net Git - mtbl-rs/commitdiff
Add file reader, rudimentary mtbl_dump
authorChris Mikkelson <cmikk@fsi.io>
Thu, 8 Aug 2024 22:39:10 +0000 (16:39 -0600)
committerChris Mikkelson <cmikk@fsi.io>
Thu, 8 Aug 2024 22:39:10 +0000 (16:39 -0600)
Cargo.lock
Cargo.toml
src/bin/mtbl_dump.rs
src/reader/mod.rs

index c366fea9e85a95ec823c1c188e52f0aaf6ec336d..b80f6ab258f78dd516a45e65f0c69309258acfa5 100644 (file)
@@ -93,6 +93,16 @@ dependencies = [
  "libc",
 ]
 
+[[package]]
+name = "memmap"
+version = "0.7.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6585fd95e7bb50d6cc31e20d4cf9afb4e2ba16c5846fc76793f11218da9c475b"
+dependencies = [
+ "libc",
+ "winapi",
+]
+
 [[package]]
 name = "miniz_oxide"
 version = "0.7.4"
@@ -110,6 +120,7 @@ dependencies = [
  "flate2",
  "integer-encoding",
  "lz4",
+ "memmap",
  "snap",
  "zstd",
 ]
@@ -141,6 +152,28 @@ version = "1.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b"
 
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
 [[package]]
 name = "zstd"
 version = "0.13.2"
index 0a56bd6dfe07ee67712a15673dbf6625eec6a4f6..b00b9217dc7abfce7578782f4a8fbb7a51f1f0b6 100644 (file)
@@ -8,6 +8,7 @@ crc32c = "0.6.8"
 flate2 = "1.0.31"
 integer-encoding = "4.0.2"
 lz4 = "1.26.0"
+memmap = "0.7.0"
 snap = "1.1.1"
 zstd = "0.13.2"
 
index e7a11a969c037e00a796aafeff6258501ec15e9a..2e92c10c6ca21eac9e9244313c5f1fd0525682c6 100644 (file)
@@ -1,3 +1,10 @@
+use mtbl::prelude::*;
+use std::env;
+
 fn main() {
-    println!("Hello, world!");
+    let fname = env::args().nth(1).expect("Usage: mtbl_dump <filename>");
+    let reader = mtbl::reader::from_file(fname);
+    for e in reader.iter() {
+        println!("{:?}: {:?}", *e.key, *e.value);
+    }
 }
index 255eb1cdf3355cea525c0ed4e8abbd8cc4d7d9c9..6eb739fb79ff988eaa37ab9256579166db4407c8 100644 (file)
@@ -1,10 +1,12 @@
 use crate::metadata::Metadata;
 use crate::source::{DefaultSource, IterSource};
-use crate::Entry;
-use crate::Iter;
+use crate::{Entry, Iter};
 use integer_encoding::VarInt;
 pub(crate) mod block;
+use memmap::{Mmap, MmapOptions};
+use std::fs::File;
 use std::io::{Cursor, Seek, SeekFrom};
+use std::path::Path;
 use std::sync::Arc;
 
 // interface for a range
@@ -78,6 +80,12 @@ impl<D: AsRef<[u8]>> Clone for Reader<D> {
     }
 }
 
+pub fn from_file(fname: impl AsRef<Path>) -> Reader<Mmap> {
+    let f = File::open(fname).expect("open file");
+    let mmap = unsafe { MmapOptions::new().map(&f).expect("mmap") };
+    Reader::new(mmap)
+}
+
 impl<D: AsRef<[u8]>> Reader<D> {
     pub fn new(d: D) -> Self {
         let mut cur = Cursor::new(&d.as_ref()[d.as_ref().len() - 512..]);