Zitat von
Tyrael Y.:
Ich benutze folgende Funktion, die halt wie hier beschrieben itteriert.
Delphi-Quellcode:
// anzahl := GetCountOfSetElements(@mySet, sizeof(mySet));
function GetCountOfSetElements(APointerToSet: Pointer; SizeOfSet: Cardinal): Cardinal;
const C_LOOKUP :
packed array[0..15]
of Byte = (0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4);
var LByte: Byte;
begin
Result := 0;
while SizeOfSet > 0
do
begin
LByte := PByte(APointerToSet)^;
Inc(Result, C_LOOKUP[LByte
and $0F]);
Inc(Result, C_LOOKUP[LByte
shr 4]);
Dec(SizeOfSet);
Inc(PByte(APointerToSet));
end;
end;
Das funktioniert selbst bei Sets mit 256 Elementen
(zumindest unter Lazarus, Delphi kann ich grad nicht testen).
Wäre das nicht was für die Code-Library?