diff options
| author | Huon Wilson <dbau.pp+github@gmail.com> | 2014-01-07 01:45:10 +1100 |
|---|---|---|
| committer | Huon Wilson <dbau.pp+github@gmail.com> | 2014-01-08 00:31:24 +1100 |
| commit | 7e446af759e86e77a5f4a8e9bc6d6c22072b25ae (patch) | |
| tree | 5dbc7014b5635fb8576bf69e49fd7c45075363be /src/libstd | |
| parent | 3395f9d6a10aa912ab88de2e8d5b4f7de407413a (diff) | |
| download | rust-7e446af759e86e77a5f4a8e9bc6d6c22072b25ae.tar.gz rust-7e446af759e86e77a5f4a8e9bc6d6c22072b25ae.zip | |
std::trie: make lower_bound and upper_bound about 15% faster.
I believe this is mainly due to code-size reduction.
Before:
test [...]::bench_lower_bound ... bench: 818 ns/iter (+/- 100)
test [...]::bench_upper_bound ... bench: 939 ns/iter (+/- 34)
After:
test [...]::bench_lower_bound ... bench: 698 ns/iter (+/- 60)
test [...]::bench_upper_bound ... bench: 817 ns/iter (+/- 20)
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/trie.rs | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/libstd/trie.rs b/src/libstd/trie.rs index 94b7b881ea0..d864cde2953 100644 --- a/src/libstd/trie.rs +++ b/src/libstd/trie.rs @@ -198,24 +198,24 @@ macro_rules! bound { addr!(loop { let children = unsafe {addr!(& $($mut_)* (*node).children)}; let child_id = chunk(key, idx); - match children[child_id] { + let (slice_idx, ret) = match children[child_id] { Internal(ref $($mut_)* n) => { node = addr!(& $($mut_)* **n as * $($mut_)* TrieNode<T>); + (child_id + 1, false) } External(stored, _) => { - if stored < key || ($upper && stored == key) { - it.stack.push(children.$slice_from(child_id + 1).$iter()); + (if stored < key || ($upper && stored == key) { + child_id + 1 } else { - it.stack.push(children.$slice_from(child_id).$iter()); - } - return it; + child_id + }, true) } Nothing => { - it.stack.push(children.$slice_from(child_id + 1).$iter()); - return it + (child_id + 1, true) } - } - it.stack.push(children.$slice_from(child_id + 1).$iter()); + }; + it.stack.push(children.$slice_from(slice_idx).$iter()); + if ret { return it } idx += 1; }) } |
