![]() |
Re: Speicherung von Sets... ?!?
Zitat:
Aber wie du schon sagtest, bei wochentagen ist die chance nicht sehr hoch, dass da einer dazukommt, bzw gestrichen wird. Und falls doch muß das Programm eh wieder neu kompiliert werden, weil wenn nicht es bei einer BÜcherverbre...*hüsst* Programmverbrennung vernichtet würde :zwinker: Zitat:
Zitat:
|
Re: Speicherung von Sets... ?!?
Kleiner Chrash-Kurs über Mengen (Sets):
* ein Set kann maximal 256 Elemente speichern deshalb ist z.B. ein Set of Integer nicht möglich. Ein Set benötigt folgenden Speicherplatz
Code:
Ob ein Element in einem Set enthalten ist oder nicht, wird bitcodiert.
1 bis 8 Elemente => 1 Byte
9 bis 16 Elemente => 2 Byte 17 bis 32 Elemente => 4 Byte 33 bis 39 Elemente => 5 Byte 40 bis 48 Elemente => 6 Byte 49 bis 56 Elemente => 7 Byte 57 bis 64 Elemente => 8 Byte 65 bis 72 Elemente => 9 Byte ... bis 256 Elemente => 16 Byte Das 1. Element entspricht dem niederwertigsten Bit (LSB). Das Casten eines Set in einen Integer und zurück ist nur bis max. 32 Elemente möglich. |
Re: Speicherung von Sets... ?!?
Zitat:
Delphi-Quellcode:
Heißt das, daß die VCL generell auf 32 bit sets beschränkt ist?
function SetToString(PropInfo: PPropInfo; Value: Integer; Brackets: Boolean = False): string;
|
Re: Speicherung von Sets... ?!?
Also mann kann auch locker ein Set nach Array[0..7] of Byte / Array[0..3] of Word ... casten, dann hat man die vollen 256 Werte zur Verfügung
Derzeit aber ich ja an ein paar kleinen Units, wo es auch schon fertige Typen gibt, welche das umwandeln/casten solcher typen in andere und zurück vereinfacht... ich weiß aber noch nicht wann ich genau fertig bin |
Re: Speicherung von Sets... ?!?
Zitat:
Zitat:
Aber das hier Casten geht wusste ich noch nicht, gut zu wissen, dann hätte sich mein Wochentag speicherproblem gelöst :wink: Dann erstmal danke für des Résumé :thumb: Aber eine Frage ist immer noch offen, ist die SetVariable von sich aus schon so groß wie das volle Set einnimmt? :duck: Bye |
Re: Speicherung von Sets... ?!?
Zitat:
Delphi-Quellcode:
Und in der Unit TypInfo wird so damit gearbeitet:
// aus der Unit SysUtils kopiert:
// Ein Set mit 32 Elementen (0..31) TIntegerSet = set of 0..SizeOf(Integer) * 8 - 1;
Delphi-Quellcode:
Das gilt bei Delphi 5; ob bei höheren Version mehr als 32 Elemente möglich kann ich nicht sagen.
function GetSetProp(Instance: TObject; PropInfo: PPropInfo;
Brackets: Boolean): string; var S: TIntegerSet; // 4 Bytes ... begin Integer(S) := GetOrdProp(Instance, PropInfo); ... for I := 0 to SizeOf(Integer) * 8 - 1 do // <= Schleife von 0 bis 31 |
Re: Speicherung von Sets... ?!?
Zitat:
|
Re: Speicherung von Sets... ?!?
Das mein ich jetzt nicht ^^
Angenommen ich habe ein typ TTest mit 32 Elementen, und bau daraus ein set namens TTests, nun erstelle ich eine Variable
Delphi-Quellcode:
.
var Settest: TTests;
nun mach ich folgendes:
Delphi-Quellcode:
hat nun Settest eine größe von 4 Byte oder von 1 ?
Settest := [];
Bye |
Re: Speicherung von Sets... ?!?
Das set ist immer nur so groß, wie nötig
Größe in Byte = Aufrunden(Elemente / 8) Aber es gibt auch eine Möglichkeit dem Set eine gewisse größe aufzuzwingen, entweder per Compilerschalter {$X-} / {$X+} oder {$X1}, {$X2}, {$X4} aber was für das X hinkomm , fällt mir gerade nicht ein (aber dafür ist ja die OH da ^^) oder man gibt einfach dem letzten element eine Position ... = Set of (aaa, bbb, ccc, ddd=31); // hier ist dann das Set 32 Bit/4 Byte groß PS: auf diese Weise kann man auch allen elementen selber nummern verzeilen :zwinker: |
Re: Speicherung von Sets... ?!?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz