[package]
edition = "2021"
rust-version = "1.70"
name = "libdictenstein"
version = "0.1.0"
authors = ["Dylon Edwards <dylon.devo@gmail.com>"]
build = "build.rs"
exclude = [
"docs/",
"formal-verification/",
]
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "High-performance dictionary data structures (trie, DAWG, double-array trie, suffix automaton, lock-free durable persistent ART) behind one trait API; pairs with liblevenshtein for fuzzy matching"
readme = "README.md"
keywords = [
"trie",
"dawg",
"dictionary",
"fuzzy-search",
"automata",
]
categories = [
"algorithms",
"data-structures",
"text-processing",
]
license = "Apache-2.0"
repository = "https://github.com/vinary-tree/libdictenstein"
[package.metadata.docs.rs]
all-features = true
[features]
bench-internals = ["io-uring-backend"]
compression = ["flate2"]
default = ["parking_lot"]
group-commit = [
"persistent-artrie",
"crossbeam-channel",
]
io-uring-backend = [
"persistent-artrie",
"dep:io-uring",
"dep:libc",
]
parallel-merge = [
"persistent-artrie",
"rayon",
]
pathmap-backend = ["pathmap"]
persistent-artrie = [
"memmap2",
"parking_lot",
"serde",
"bincode",
"sysinfo",
"xxhash-rust",
"lru",
"dashmap",
"crossbeam-channel",
"serialization",
]
protobuf = [
"prost",
"prost-build",
]
serialization = [
"serde",
"bincode",
"serde_json",
]
[lib]
name = "libdictenstein"
path = "src/lib.rs"
[[example]]
name = "batched_merge_comparison"
path = "examples/batched_merge_comparison.rs"
required-features = ["persistent-artrie"]
[[example]]
name = "bench_disk_io"
path = "examples/bench_disk_io.rs"
required-features = ["persistent-artrie"]
[[example]]
name = "exp_checkpoint_throughput"
path = "examples/exp_checkpoint_throughput.rs"
required-features = ["persistent-artrie"]
[[example]]
name = "insert_trace"
path = "examples/insert_trace.rs"
required-features = ["persistent-artrie"]
[[example]]
name = "massif_overlay_eviction"
path = "examples/massif_overlay_eviction.rs"
[[example]]
name = "prefix_diversity_test"
path = "examples/prefix_diversity_test.rs"
required-features = ["persistent-artrie"]
[[example]]
name = "streaming_merge_test"
path = "examples/streaming_merge_test.rs"
required-features = ["persistent-artrie"]
[[example]]
name = "test_bench"
path = "examples/test_bench.rs"
required-features = ["persistent-artrie"]
[[example]]
name = "test_bench_large"
path = "examples/test_bench_large.rs"
required-features = ["persistent-artrie"]
[[example]]
name = "test_checkpoint_debug"
path = "examples/test_checkpoint_debug.rs"
required-features = ["persistent-artrie"]
[[example]]
name = "wal_compare"
path = "examples/wal_compare.rs"
required-features = ["persistent-artrie"]
[[example]]
name = "wal_debug"
path = "examples/wal_debug.rs"
required-features = ["persistent-artrie"]
[[example]]
name = "wal_flush_debug"
path = "examples/wal_flush_debug.rs"
required-features = ["persistent-artrie"]
[[example]]
name = "wal_size_test"
path = "examples/wal_size_test.rs"
required-features = ["persistent-artrie"]
[[test]]
name = "arena_manager_correspondence"
path = "tests/arena_manager_correspondence.rs"
[[test]]
name = "bijective_tests"
path = "tests/bijective_tests.rs"
[[test]]
name = "bijective_trait_invariant"
path = "tests/bijective_trait_invariant.rs"
[[test]]
name = "bloom_filter_correspondence"
path = "tests/bloom_filter_correspondence.rs"
[[test]]
name = "checkpoint_retention_correspondence"
path = "tests/checkpoint_retention_correspondence.rs"
[[test]]
name = "compaction_tests"
path = "tests/compaction_tests.rs"
[[test]]
name = "dedup_arena_correspondence"
path = "tests/dedup_arena_correspondence.rs"
[[test]]
name = "dictionary_iterator_tests"
path = "tests/dictionary_iterator_tests.rs"
[[test]]
name = "dictionary_law_correspondence"
path = "tests/dictionary_law_correspondence.rs"
[[test]]
name = "dictionary_node_reopen_traversal_correspondence"
path = "tests/dictionary_node_reopen_traversal_correspondence.rs"
[[test]]
name = "dirty_checkpoint_correspondence"
path = "tests/dirty_checkpoint_correspondence.rs"
[[test]]
name = "double_array_trie_correspondence"
path = "tests/double_array_trie_correspondence.rs"
[[test]]
name = "dynamic_dawg_mutation_correspondence"
path = "tests/dynamic_dawg_mutation_correspondence.rs"
[[test]]
name = "dynamic_dawg_u64_correspondence"
path = "tests/dynamic_dawg_u64_correspondence.rs"
[[test]]
name = "epoch_checkpoint_recovery_correspondence"
path = "tests/epoch_checkpoint_recovery_correspondence.rs"
[[test]]
name = "excluding_prefix_zipper_tests"
path = "tests/excluding_prefix_zipper_tests.rs"
[[test]]
name = "fuzzy_candidate_coverage_correspondence"
path = "tests/fuzzy_candidate_coverage_correspondence.rs"
[[test]]
name = "io_uring_integration_tests"
path = "tests/io_uring_integration_tests.rs"
[[test]]
name = "overlay_eviction_arbitrary_v_bug46"
path = "tests/overlay_eviction_arbitrary_v_bug46.rs"
[[test]]
name = "pathmap_factory_correspondence"
path = "tests/pathmap_factory_correspondence.rs"
[[test]]
name = "persistent_arbitrary_v_overlay"
path = "tests/persistent_arbitrary_v_overlay.rs"
[[test]]
name = "persistent_artrie_acid_tests"
path = "tests/persistent_artrie_acid_tests.rs"
[[test]]
name = "persistent_artrie_char_integration"
path = "tests/persistent_artrie_char_integration.rs"
[[test]]
name = "persistent_artrie_concurrent"
path = "tests/persistent_artrie_concurrent.rs"
[[test]]
name = "persistent_artrie_error_handling"
path = "tests/persistent_artrie_error_handling.rs"
[[test]]
name = "persistent_artrie_formal_correspondence"
path = "tests/persistent_artrie_formal_correspondence.rs"
[[test]]
name = "persistent_artrie_loom_correspondence"
path = "tests/persistent_artrie_loom_correspondence.rs"
[[test]]
name = "persistent_artrie_proptest"
path = "tests/persistent_artrie_proptest.rs"
[[test]]
name = "persistent_artrie_recovery_tests"
path = "tests/persistent_artrie_recovery_tests.rs"
[[test]]
name = "persistent_artrie_storage_correspondence"
path = "tests/persistent_artrie_storage_correspondence.rs"
[[test]]
name = "persistent_artrie_stress"
path = "tests/persistent_artrie_stress.rs"
[[test]]
name = "persistent_byte_thread_lifecycle"
path = "tests/persistent_byte_thread_lifecycle.rs"
[[test]]
name = "persistent_char_eviction_correspondence"
path = "tests/persistent_char_eviction_correspondence.rs"
[[test]]
name = "persistent_char_eviction_registry_correspondence"
path = "tests/persistent_char_eviction_registry_correspondence.rs"
[[test]]
name = "persistent_char_get_readflip_regression"
path = "tests/persistent_char_get_readflip_regression.rs"
[[test]]
name = "persistent_char_node_layout_correspondence"
path = "tests/persistent_char_node_layout_correspondence.rs"
[[test]]
name = "persistent_char_thread_lifecycle"
path = "tests/persistent_char_thread_lifecycle.rs"
[[test]]
name = "persistent_char_thread_lifecycle_proptest"
path = "tests/persistent_char_thread_lifecycle_proptest.rs"
[[test]]
name = "persistent_compaction_correspondence"
path = "tests/persistent_compaction_correspondence.rs"
[[test]]
name = "persistent_counter_u64_above_i64max_correspondence"
path = "tests/persistent_counter_u64_above_i64max_correspondence.rs"
[[test]]
name = "persistent_end_to_end_trace_correspondence"
path = "tests/persistent_end_to_end_trace_correspondence.rs"
[[test]]
name = "persistent_f4_lock_collapse_soak"
path = "tests/persistent_f4_lock_collapse_soak.rs"
[[test]]
name = "persistent_f5_reopen_roundtrip"
path = "tests/persistent_f5_reopen_roundtrip.rs"
[[test]]
name = "persistent_l21_cx_compaction_reopen"
path = "tests/persistent_l21_cx_compaction_reopen.rs"
[[test]]
name = "persistent_l32_new_overlay"
path = "tests/persistent_l32_new_overlay.rs"
[[test]]
name = "persistent_libgrammstein_support"
path = "tests/persistent_libgrammstein_support.rs"
[[test]]
name = "persistent_lockfree_durable_loom"
path = "tests/persistent_lockfree_durable_loom.rs"
[[test]]
name = "persistent_lockfree_f4_lock_hierarchy_loom"
path = "tests/persistent_lockfree_f4_lock_hierarchy_loom.rs"
[[test]]
name = "persistent_lockfree_overlay_loom"
path = "tests/persistent_lockfree_overlay_loom.rs"
[[test]]
name = "persistent_lockfree_overlay_proptest"
path = "tests/persistent_lockfree_overlay_proptest.rs"
[[test]]
name = "persistent_merge_correspondence"
path = "tests/persistent_merge_correspondence.rs"
[[test]]
name = "persistent_nonblocking_checkpoint_correspondence"
path = "tests/persistent_nonblocking_checkpoint_correspondence.rs"
[[test]]
name = "persistent_prefix_correspondence"
path = "tests/persistent_prefix_correspondence.rs"
[[test]]
name = "persistent_public_durability_policy_correspondence"
path = "tests/persistent_public_durability_policy_correspondence.rs"
[[test]]
name = "persistent_public_lifecycle_correspondence"
path = "tests/persistent_public_lifecycle_correspondence.rs"
[[test]]
name = "persistent_read_snapshot_correspondence"
path = "tests/persistent_read_snapshot_correspondence.rs"
[[test]]
name = "persistent_recovery_watermark_seed_l14"
path = "tests/persistent_recovery_watermark_seed_l14.rs"
[[test]]
name = "persistent_rewrite_compaction_correspondence"
path = "tests/persistent_rewrite_compaction_correspondence.rs"
[[test]]
name = "persistent_shared_concurrency_correspondence"
path = "tests/persistent_shared_concurrency_correspondence.rs"
[[test]]
name = "persistent_transaction_increment_correspondence"
path = "tests/persistent_transaction_increment_correspondence.rs"
[[test]]
name = "persistent_vocab_checkpoint_correspondence"
path = "tests/persistent_vocab_checkpoint_correspondence.rs"
[[test]]
name = "persistent_vocab_wal_atomicity_correspondence"
path = "tests/persistent_vocab_wal_atomicity_correspondence.rs"
[[test]]
name = "persistent_wal_atomicity_correspondence"
path = "tests/persistent_wal_atomicity_correspondence.rs"
[[test]]
name = "persistent_worker_lifecycle_loom"
path = "tests/persistent_worker_lifecycle_loom.rs"
[[test]]
name = "prefix_zipper_tests"
path = "tests/prefix_zipper_tests.rs"
[[test]]
name = "proptest_bijective"
path = "tests/proptest_bijective.rs"
[[test]]
name = "proptest_core_dictionaries"
path = "tests/proptest_core_dictionaries.rs"
[[test]]
name = "proptest_serialization"
path = "tests/proptest_serialization.rs"
[[test]]
name = "proptest_trait_macros"
path = "tests/proptest_trait_macros.rs"
[[test]]
name = "proptest_zipper_operations"
path = "tests/proptest_zipper_operations.rs"
[[test]]
name = "protobuf_compression_correspondence"
path = "tests/protobuf_compression_correspondence.rs"
[[test]]
name = "recovery_planner_correspondence"
path = "tests/recovery_planner_correspondence.rs"
[[test]]
name = "recovery_replay_completeness_correspondence"
path = "tests/recovery_replay_completeness_correspondence.rs"
[[test]]
name = "relative_encoding_correspondence"
path = "tests/relative_encoding_correspondence.rs"
[[test]]
name = "root_descriptor_reopen_correspondence"
path = "tests/root_descriptor_reopen_correspondence.rs"
[[test]]
name = "scdawg_core_parity"
path = "tests/scdawg_core_parity.rs"
[[test]]
name = "scdawg_occurrence_correspondence"
path = "tests/scdawg_occurrence_correspondence.rs"
[[test]]
name = "serialization_correspondence"
path = "tests/serialization_correspondence.rs"
[[test]]
name = "serialization_value_roundtrip"
path = "tests/serialization_value_roundtrip.rs"
[[test]]
name = "set_zipper_tests"
path = "tests/set_zipper_tests.rs"
[[test]]
name = "substring_candidate_correspondence"
path = "tests/substring_candidate_correspondence.rs"
[[test]]
name = "union_zipper_tests"
path = "tests/union_zipper_tests.rs"
[[test]]
name = "unsafe_boundary_contracts"
path = "tests/unsafe_boundary_contracts.rs"
[[test]]
name = "valued_set_combinator_correspondence"
path = "tests/valued_set_combinator_correspondence.rs"
[[test]]
name = "vocab_trait_honesty"
path = "tests/vocab_trait_honesty.rs"
[[test]]
name = "wal_segment_lifecycle_correspondence"
path = "tests/wal_segment_lifecycle_correspondence.rs"
[[test]]
name = "zipper_language_correspondence"
path = "tests/zipper_language_correspondence.rs"
[[bench]]
name = "adaptive_pool_benchmarks"
path = "benches/adaptive_pool_benchmarks.rs"
harness = false
required-features = ["persistent-artrie"]
[[bench]]
name = "batch_wal_benchmarks"
path = "benches/batch_wal_benchmarks.rs"
harness = false
required-features = ["persistent-artrie"]
[[bench]]
name = "concurrent_read_vs_flush_benchmarks"
path = "benches/concurrent_read_vs_flush_benchmarks.rs"
harness = false
required-features = ["persistent-artrie"]
[[bench]]
name = "epoch_benchmarks"
path = "benches/epoch_benchmarks.rs"
harness = false
required-features = ["persistent-artrie"]
[[bench]]
name = "eviction_benchmarks"
path = "benches/eviction_benchmarks.rs"
harness = false
required-features = ["bench-internals"]
[[bench]]
name = "group_commit_benchmarks"
path = "benches/group_commit_benchmarks.rs"
harness = false
required-features = ["group-commit"]
[[bench]]
name = "io_backend_benchmarks"
path = "benches/io_backend_benchmarks.rs"
harness = false
required-features = ["persistent-artrie"]
[[bench]]
name = "io_uring_comparison_benchmarks"
path = "benches/io_uring_comparison_benchmarks.rs"
harness = false
required-features = ["io-uring-backend"]
[[bench]]
name = "loading_experiments"
path = "benches/loading_experiments.rs"
harness = false
required-features = ["persistent-artrie"]
[[bench]]
name = "lockfree_flip_benchmark"
path = "benches/lockfree_flip_benchmark.rs"
harness = false
required-features = [
"persistent-artrie",
"bench-internals",
]
[[bench]]
name = "memory_pressure_benchmarks"
path = "benches/memory_pressure_benchmarks.rs"
harness = false
required-features = ["persistent-artrie"]
[[bench]]
name = "parallel_merge_benchmarks"
path = "benches/parallel_merge_benchmarks.rs"
harness = false
required-features = ["parallel-merge"]
[[bench]]
name = "per_node_log_benchmarks"
path = "benches/per_node_log_benchmarks.rs"
harness = false
required-features = ["persistent-artrie"]
[[bench]]
name = "persistent_artrie_benchmarks"
path = "benches/persistent_artrie_benchmarks.rs"
harness = false
required-features = ["persistent-artrie"]
[[bench]]
name = "persistent_artrie_char_benchmarks"
path = "benches/persistent_artrie_char_benchmarks.rs"
harness = false
required-features = ["persistent-artrie"]
[[bench]]
name = "serialization_benchmarks"
path = "benches/serialization_benchmarks.rs"
harness = false
required-features = [
"serialization",
"pathmap-backend",
]
[[bench]]
name = "transaction_benchmarks"
path = "benches/transaction_benchmarks.rs"
harness = false
required-features = ["persistent-artrie"]
[[bench]]
name = "write_locality_benchmarks"
path = "benches/write_locality_benchmarks.rs"
harness = false
required-features = ["persistent-artrie"]
[dependencies.arc-swap]
version = "1.7"
[dependencies.bincode]
version = "2.0"
features = ["serde"]
optional = true
[dependencies.crossbeam-channel]
version = "0.5"
optional = true
[dependencies.dashmap]
version = "6.1"
optional = true
[dependencies.flate2]
version = "1.0"
optional = true
[dependencies.io-uring]
version = "0.7"
optional = true
[dependencies.libc]
version = "0.2"
optional = true
[dependencies.llattice]
version = "0.1"
[dependencies.log]
version = "0.4"
[dependencies.lru]
version = "0.18"
optional = true
[dependencies.memmap2]
version = "0.9"
optional = true
[dependencies.parking_lot]
version = "0.12"
optional = true
[dependencies.pathmap]
version = "0.2"
optional = true
[dependencies.prost]
version = "0.13"
optional = true
[dependencies.rayon]
version = "1.10"
optional = true
[dependencies.rustc-hash]
version = "1.1"
[dependencies.serde]
version = "1.0"
features = [
"derive",
"rc",
]
optional = true
[dependencies.serde_json]
version = "1.0"
optional = true
[dependencies.smallvec]
version = "1.13"
features = ["serde"]
[dependencies.sysinfo]
version = "0.37"
optional = true
[dependencies.thiserror]
version = "2.0"
[dependencies.xxhash-rust]
version = "0.8"
features = ["xxh3"]
optional = true
[dev-dependencies.criterion]
version = "0.5"
[dev-dependencies.hdrhistogram]
version = "7.5"
[dev-dependencies.loom]
version = "0.7"
[dev-dependencies.paste]
version = "1.0"
[dev-dependencies.proptest]
version = "1.4"
[dev-dependencies.rand]
version = "0.8"
[dev-dependencies.tempfile]
version = "3.8"
[build-dependencies.prost-build]
version = "0.13"
optional = true
[profile.bench]
inherits = "release"
[profile.release]
opt-level = 3
lto = true
codegen-units = 1