digitalmars.D.bugs - [Bug 26] New: inout foreach does not modify BitArrays
- d-bugmail puremagic.com (29/29) Mar 08 2006 http://d.puremagic.com/bugzilla/show_bug.cgi?id=26
- d-bugmail puremagic.com (12/12) Mar 18 2006 http://d.puremagic.com/bugzilla/show_bug.cgi?id=26
- d-bugmail puremagic.com (9/9) Mar 20 2006 http://d.puremagic.com/bugzilla/show_bug.cgi?id=26
http://d.puremagic.com/bugzilla/show_bug.cgi?id=26
Summary: inout foreach does not modify BitArrays
Product: D
Version: 0.149
Platform: PC
OS/Version: Windows
Status: NEW
Keywords: wrong-code
Severity: minor
Priority: P2
Component: Phobos
AssignedTo: walter digitalmars.com
ReportedBy: deewiant gmail.com
Using inout in a foreach loop through a BitArray has no effect: the bits in the
BitArray do not change when assigned to or otherwise modified.
Can be easily circumvented by using a for loop, but is still an annoyance.
--
import std.bitarray;
void main() {
BitArray a;
a.length = 5;
foreach (inout bit b; a) {
assert (b == 0);
b = 1;
}
foreach (bit b; a)
assert (b == 1); // FAILS, they're all 0
}
--
Mar 08 2006
http://d.puremagic.com/bugzilla/show_bug.cgi?id=26 Created an attachment (id=4) --> (http://d.puremagic.com/bugzilla/attachment.cgi?id=4&action=view) Naive, simple fix. This adds to the unittests in bitarray.d for this bug, and calls opIndexAssign() on each bit (before the break.) This would seem to make foreach over bit arrays slower, but then it's still not exceedingly fast anyway to call a function for every bit so I'd suggest the opIndexCall isn't going to hurt anyone much. -[Unknown] --
Mar 18 2006
http://d.puremagic.com/bugzilla/show_bug.cgi?id=26
bugzilla digitalmars.com changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |FIXED
Fixed 0.150
--
Mar 20 2006









d-bugmail puremagic.com 