aboutsummaryrefslogtreecommitdiff
path: root/mingling/src
diff options
context:
space:
mode:
author魏曹先生 <1992414357@qq.com>2026-08-20 03:38:10 +0800
committer魏曹先生 <1992414357@qq.com>2026-08-20 03:38:10 +0800
commit5678e0ba37ce2c5c8161f0d48505e7993967e30c (patch)
treee6035d2e8bf4139e634052fef8c0c48d4c97434a /mingling/src
parentec9edc294fd5e7e29977fc7b0e6fb953422bc0e2 (diff)
feat: add dispatch strategy features with auto-selection and benchmark
support Add `dispatch_linear`, `dispatch_tree`, and `dispatch_phf` as mutually exclusive features for selecting the command dispatch strategy. When no strategy feature is enabled, an auto-selection heuristic picks the optimal strategy based on command table characteristics (size, name length, nesting depth). Add the `bench_support` feature to compile all three generators for the benchmark harness, and introduce `bench_cell!` to generate benchmark cells comparing strategies. The PHF generator uses a CHD minimal perfect hash for O(1) lookup independent of table size, while the trie generator was refactored to use a shared fallback method, keeping code size linear in table size.
Diffstat (limited to 'mingling/src')
-rw-r--r--mingling/src/features.rs22
1 files changed, 22 insertions, 0 deletions
diff --git a/mingling/src/features.rs b/mingling/src/features.rs
index 8a3ce75..3d9a382 100644
--- a/mingling/src/features.rs
+++ b/mingling/src/features.rs
@@ -86,6 +86,28 @@ pub const MINGLING_DEFAULT: bool = false;
#[cfg(feature = "default")]
#[allow(unused)]
pub const MINGLING_DEFAULT: bool = true;
+/// Whether the `dispatch_linear` feature is enabled
+/// Current: `disabled`
+#[cfg(not(feature = "dispatch_linear"))]
+#[allow(unused)]
+pub const MINGLING_DISPATCH_LINEAR: bool = false;
+
+/// Whether the `dispatch_linear` feature is enabled
+/// Current: `enabled`
+#[cfg(feature = "dispatch_linear")]
+#[allow(unused)]
+pub const MINGLING_DISPATCH_LINEAR: bool = true;
+/// Whether the `dispatch_phf` feature is enabled
+/// Current: `disabled`
+#[cfg(not(feature = "dispatch_phf"))]
+#[allow(unused)]
+pub const MINGLING_DISPATCH_PHF: bool = false;
+
+/// Whether the `dispatch_phf` feature is enabled
+/// Current: `enabled`
+#[cfg(feature = "dispatch_phf")]
+#[allow(unused)]
+pub const MINGLING_DISPATCH_PHF: bool = true;
/// Whether the `dispatch_tree` feature is enabled
/// Current: `disabled`
#[cfg(not(feature = "dispatch_tree"))]