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数据结构 分类中

Download history 564401/week @ 2024-04-20 566882/week @ 2024-04-27 578385/week @ 2024-05-04 619390/week @ 2024-05-11 659043/week @ 2024-05-18 628138/week @ 2024-05-25 750147/week @ 2024-06-01 738193/week @ 2024-06-08 714945/week @ 2024-06-15 755660/week @ 2024-06-22 728611/week @ 2024-06-29 757785/week @ 2024-07-06 742147/week @ 2024-07-13 791486/week @ 2024-07-20 804551/week @ 2024-07-27 791243/week @ 2024-08-03

3,264,355 每月下载量
2,814 个 crate (118 个直接使用) 中使用

MIT 许可证

46KB
667

Rust-PHF

CI Latest Version

文档

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