"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"
"flate2",
"integer-encoding",
"lz4",
+ "memmap",
"snap",
"zstd",
]
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"
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"
+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);
+ }
}
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
}
}
+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..]);