rustc: Simplify tritv::copy; shaves a couple of seconds off typestate.
This commit is contained in:
parent
4b23ea51bc
commit
0be1a0b500
1 changed files with 4 additions and 17 deletions
|
@ -186,24 +186,11 @@ fn tritv_set(uint i, &t v, trit t) -> bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn tritv_copy(&t target, &t source) -> bool {
|
fn tritv_copy(&t target, &t source) -> bool {
|
||||||
let uint i = 0u;
|
|
||||||
assert (target.nbits == source.nbits);
|
assert (target.nbits == source.nbits);
|
||||||
auto changed = false;
|
auto changed = !bitv::equal(target.uncertain, source.uncertain) ||
|
||||||
auto oldunc;
|
!bitv::equal(target.val, source.val);
|
||||||
auto newunc;
|
bitv::copy(target.uncertain, source.uncertain);
|
||||||
auto oldval;
|
bitv::copy(target.val, source.val);
|
||||||
auto newval;
|
|
||||||
while (i < target.nbits) {
|
|
||||||
oldunc = bitv::get(target.uncertain, i);
|
|
||||||
newunc = bitv::get(source.uncertain, i);
|
|
||||||
oldval = bitv::get(target.val, i);
|
|
||||||
newval = bitv::get(source.val, i);
|
|
||||||
bitv::set(target.uncertain, i, newunc);
|
|
||||||
changed = changed || (oldunc && !newunc);
|
|
||||||
bitv::set(target.val, i, newval);
|
|
||||||
changed = changed || (oldval && !newval);
|
|
||||||
i += 1u;
|
|
||||||
}
|
|
||||||
ret changed;
|
ret changed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue