mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
Cache bitset locations to speed up _calc_states. (kabi)
This commit is contained in:
parent
92f67fed0a
commit
e07803f976
@ -1,5 +1,6 @@
|
|||||||
Version 1.02.47 -
|
Version 1.02.47 -
|
||||||
=================================
|
=================================
|
||||||
|
Cache bitset locations to speed up _calc_states.
|
||||||
Add a regex optimisation pass for shared character prefixes.
|
Add a regex optimisation pass for shared character prefixes.
|
||||||
Add dm_bit_and and dm_bitset_equal to libdevmapper.
|
Add dm_bit_and and dm_bitset_equal to libdevmapper.
|
||||||
Simplify dm_bitset_create.
|
Simplify dm_bitset_create.
|
||||||
|
@ -212,6 +212,8 @@ static int _calc_states(struct dm_regex *m, struct rx_node *rx)
|
|||||||
/* prime the queue */
|
/* prime the queue */
|
||||||
h = t = _create_state_queue(m->scratch, dfa, rx->firstpos);
|
h = t = _create_state_queue(m->scratch, dfa, rx->firstpos);
|
||||||
while (h) {
|
while (h) {
|
||||||
|
int elems, j, idx[h->bits[0]];
|
||||||
|
|
||||||
/* pop state off front of the queue */
|
/* pop state off front of the queue */
|
||||||
dfa = h->s;
|
dfa = h->s;
|
||||||
dfa_bits = h->bits;
|
dfa_bits = h->bits;
|
||||||
@ -219,10 +221,17 @@ static int _calc_states(struct dm_regex *m, struct rx_node *rx)
|
|||||||
|
|
||||||
/* iterate through all the inputs for this state */
|
/* iterate through all the inputs for this state */
|
||||||
dm_bit_clear_all(bs);
|
dm_bit_clear_all(bs);
|
||||||
|
|
||||||
|
/* Cache list of locations of bits */
|
||||||
|
elems = 0;
|
||||||
|
for (i = dm_bit_get_first(dfa_bits);
|
||||||
|
i >= 0; i = dm_bit_get_next(dfa_bits, i))
|
||||||
|
idx[elems++] = i;
|
||||||
|
|
||||||
for (a = 0; a < 256; a++) {
|
for (a = 0; a < 256; a++) {
|
||||||
/* iterate through all the states in firstpos */
|
/* iterate through all the states in firstpos */
|
||||||
for (i = dm_bit_get_first(dfa_bits);
|
for (j = 0; j < elems; j++) {
|
||||||
i >= 0; i = dm_bit_get_next(dfa_bits, i)) {
|
i = idx[j];
|
||||||
if (dm_bit(m->nodes[i]->charset, a)) {
|
if (dm_bit(m->nodes[i]->charset, a)) {
|
||||||
if (a == TARGET_TRANS)
|
if (a == TARGET_TRANS)
|
||||||
dfa->final = m->nodes[i]->final;
|
dfa->final = m->nodes[i]->final;
|
||||||
|
Loading…
Reference in New Issue
Block a user