AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Speicherung von Sets... ?!?

Ein Thema von Kedariodakon · begonnen am 28. Feb 2005 · letzter Beitrag vom 5. Mai 2009
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#11

Re: Speicherung von Sets... ?!?

  Alt 28. Feb 2005, 16:01
Zitat von maximov:
Bei den wochentagen ist es evtl nicht wichtig, weil keine mehr dazu kommen können, aber in einem anderen set könnte es passieren, das elemente eingefügt werden. Läd man die daten dann wieder binär, haben element ihren wert verloren, da alles verrutscht ist. Wenn allerdings jedes element eindeutig benannt ist, so ist dies kein problem. Deshalb auch RTTI, denn dort die namen der elemente
Da hättest du recht ^^
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


Zitat von maximov:
@DFM-Streaming: DFM dateien? schon mal gesehen ...da werdenn auch sets gespeichert, die du zB. im OI eingestellt hast.
jap schon gesehen, hatte dazu schon was geschrieben...
Zitat von Kedariodakon:
Edit: DFM-Streaming-system = Das speichern/laden von Published OBjectPropertys als String. Richtig?
Bye
Christian
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#12

Re: Speicherung von Sets... ?!?

  Alt 28. Feb 2005, 16:06
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:
 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
Ob ein Element in einem Set enthalten ist oder nicht, wird bitcodiert.
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.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#13

Re: Speicherung von Sets... ?!?

  Alt 28. Feb 2005, 16:10
Zitat von shmia:
...
Das Casten eines Set in einen Integer und zurück ist nur bis max. 32 Elemente möglich.
Das ist selbstredend. Nur was macht die VCL wenn es doch mal mehr sein sollten? Denn StringToSet ist ja wie folgst deklariert:
function SetToString(PropInfo: PPropInfo; Value: Integer; Brackets: Boolean = False): string; Heißt das, daß die VCL generell auf 32 bit sets beschränkt ist?
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.120 Beiträge
 
Delphi 12 Athens
 
#14

Re: Speicherung von Sets... ?!?

  Alt 28. Feb 2005, 16:27
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#15

Re: Speicherung von Sets... ?!?

  Alt 28. Feb 2005, 16:28
Zitat von shmia:
ein Set kann maximal 256 Elemente speichern
Wo du es erwähst, steht auch in der oh wie ich seh
Zitat von shmia:
Das Casten eines Set in einen Integer und zurück ist nur bis max. 32 Elemente möglich.
klingt logisch, da ja ein Integer nur 4 Byte Groß ist
Aber das hier Casten geht wusste ich noch nicht, gut zu wissen, dann hätte sich mein Wochentag speicherproblem gelöst

Dann erstmal danke für des Résumé


Aber eine Frage ist immer noch offen, ist die SetVariable von sich aus schon so groß wie das volle Set einnimmt?


Bye
Christian
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#16

Re: Speicherung von Sets... ?!?

  Alt 28. Feb 2005, 16:30
Zitat von maximov:
Nur was macht die VCL wenn es doch mal mehr sein sollten? Denn StringToSet ist ja wie folgst deklariert:
function SetToString(PropInfo: PPropInfo; Value: Integer; Brackets: Boolean = False): string; Heißt das, daß die VCL generell auf 32 bit sets beschränkt ist?
Ich denke, dass 32 Elemente für die VCL das Limit ist.
Delphi-Quellcode:
  // aus der Unit SysUtils kopiert:
  // Ein Set mit 32 Elementen (0..31)
  TIntegerSet = set of 0..SizeOf(Integer) * 8 - 1;
Und in der Unit TypInfo wird so damit gearbeitet:
Delphi-Quellcode:
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
Das gilt bei Delphi 5; ob bei höheren Version mehr als 32 Elemente möglich kann ich nicht sagen.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#17

Re: Speicherung von Sets... ?!?

  Alt 28. Feb 2005, 16:41
Zitat von Kedariodakon:
...
Aber eine Frage ist immer noch offen, ist die SetVariable von sich aus schon so groß wie das volle Set einnimmt?


Bye
JA. Ein bit nimmt ja auch nicht weniger platzt weg, wenn es false ist
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#18

Re: Speicherung von Sets... ?!?

  Alt 28. Feb 2005, 16:51
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 var Settest: TTests; .

nun mach ich folgendes: Settest := []; hat nun Settest eine größe von 4 Byte oder von 1 ?

Bye
Christian
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.120 Beiträge
 
Delphi 12 Athens
 
#19

Re: Speicherung von Sets... ?!?

  Alt 28. Feb 2005, 16:56
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
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#20

Re: Speicherung von Sets... ?!?

  Alt 28. Feb 2005, 17:52
Zitat von Kedariodakon:
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 var Settest: TTests; .

nun mach ich folgendes: Settest := []; hat nun Settest eine größe von 4 Byte oder von 1 ?

Bye
Anscheinend meintest du das doch! Es spielt keine rolle was in dem set steht. Es sind immer alle elemente (bits) enthalten, sie müssen aber nicht zwangsläufig gesetzt sein.
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:02 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz