Einzelnen Beitrag anzeigen

DevilsCamp
(Gast)

n/a Beiträge
 
#15

Re: Anzahl Elemente in "set of"

  Alt 8. Apr 2009, 14:16
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?
  Mit Zitat antworten Zitat