40 个版本
0.11.2 | 2023年6月24日 |
---|---|
0.11.1 | 2022年8月8日 |
0.11.0 | 2022年7月15日 |
0.10.0 | 2021年8月10日 |
0.7.0 | 2015年3月31日 |
#90 在 数据结构 分类中
3,264,355 每月下载量
在 2,814 个 crate (118 个直接使用) 中使用
46KB
667 行
Rust-PHF
Rust-PHF 是一个库,它使用完美哈希函数在编译时生成高效查找表。
它目前使用 CHD 算法,可以在大约 0.4 秒内生成包含 100,000 个条目的映射表。
最低支持的 Rust 版本 (MSRV) 是 Rust 1.60。
用法
PHF 数据结构可以通过 phf_macros
crate 中的过程宏或 phf_codegen
crate 支持的代码生成来构建。
要使用 libcore 而不是 libstd 编译 phf
crate,并使其在 libstd 无法使用的环境中可用,请将依赖项的 default-features = false
设置为 false
[dependencies]
# to use `phf` in `no_std` environments
phf = { version = "0.11", default-features = false }
phf_macros
use phf::phf_map;
#[derive(Clone)]
pub enum Keyword {
Loop,
Continue,
Break,
Fn,
Extern,
}
static KEYWORDS: phf::Map<&'static str, Keyword> = phf_map! {
"loop" => Keyword::Loop,
"continue" => Keyword::Continue,
"break" => Keyword::Break,
"fn" => Keyword::Fn,
"extern" => Keyword::Extern,
};
pub fn parse_keyword(keyword: &str) -> Option<Keyword> {
KEYWORDS.get(keyword).cloned()
}
[dependencies]
phf = { version = "0.11", features = ["macros"] }
注意
目前,宏的语法有一些限制,可能不会按预期工作。例如,请参阅 #183 或 #196。
phf_codegen
要在 build.rs 中使用 phf_codegen
,您必须在 [build-dependencies]
下添加依赖项
[build-dependencies]
phf = { version = "0.11.1", default-features = false }
phf_codegen = "0.11.1"
然后在 build.rs 上添加代码
use std::env;
use std::fs::File;
use std::io::{BufWriter, Write};
use std::path::Path;
fn main() {
let path = Path::new(&env::var("OUT_DIR").unwrap()).join("codegen.rs");
let mut file = BufWriter::new(File::create(&path).unwrap());
write!(
&mut file,
"static KEYWORDS: phf::Map<&'static str, Keyword> = {}",
phf_codegen::Map::new()
.entry("loop", "Keyword::Loop")
.entry("continue", "Keyword::Continue")
.entry("break", "Keyword::Break")
.entry("fn", "Keyword::Fn")
.entry("extern", "Keyword::Extern")
.build()
)
.unwrap();
write!(&mut file, ";\n").unwrap();
}
和 lib.rs
#[derive(Clone)]
enum Keyword {
Loop,
Continue,
Break,
Fn,
Extern,
}
include!(concat!(env!("OUT_DIR"), "/codegen.rs"));
pub fn parse_keyword(keyword: &str) -> Option<Keyword> {
KEYWORDS.get(keyword).cloned()
}
依赖项
~370KB