Hallo Leute,
mal eine kurze Frage zu dem QBitArray: Ist dieses Konstrukt im Hintergrund so etwas wie ein bool Array (c++)? Wenn ich z.B. 20 Elemente habe benötige ist dann wirklich für jedes Element 1 Byte (hier also 20 Bytes) oder ist es in Qt so realisiert das wirklich jedes Bit genutzt wird und das letze byte dann z.B. nicht ganz genutzt wird (hier im letzten Byte 4 Bit)?
Gruss
Speicherbedarf QBitArray
-
Curtis Newton
- Beiträge: 122
- Registriert: 11. Juni 2008 18:39
hier der std Konstruktor
d ist vom Typ QByteArray c vom typ uchar also so richtig schlau werde daraus nicht mal weiter suchen
Code: Alles auswählen
QBitArray::QBitArray(int size, bool value)
{
if (!size) {
d.resize(0);
return;
}
d.resize(1 + (size+7)/8);
uchar* c = reinterpret_cast<uchar*>(d.data());
memset(c, value ? 0xff : 0, d.size());
*c = d.size()*8 - size;
if (value && size && size % 8)
*(c+1+size/8) &= (1 << (size%8)) - 1;
}
-
Curtis Newton
- Beiträge: 122
- Registriert: 11. Juni 2008 18:39
wenn ich jetzt mal nichts übersehe würde ich sagen das hier wirklich jedes einzelne Bit genutzt wird? Ich meine mit RücksetzanweisungCurtis Newton hat geschrieben:Schau Dir doch z.B. mal clearbit an:
inline void QBitArray::clearBit(int i)
{ Q_ASSERT(i >= 0 && i < size());
*(reinterpret_cast<uchar*>(d.data())+1+(i>>3)) &= ~(1 << (i & 7)); }
Hier siehts man schön.
C.
Code: Alles auswählen
&=~(1 << (i & 7))