AGB  ·  Datenschutz  ·  Impressum  







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

Aufzählungstypen vereinigen

Ein Thema von blablab · begonnen am 2. Apr 2012 · letzter Beitrag vom 5. Apr 2012
Antwort Antwort
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#1

AW: Aufzählungstypen vereinigen

  Alt 3. Apr 2012, 13:50
Interessant, konzeptionell unvereinbare Mengen (Enums) plötzlich über einen Kamm zu scheren und unter einen Hut packen zu wollen.

Ob da nicht ein Designfehler vorliegt?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Aufzählungstypen vereinigen

  Alt 3. Apr 2012, 14:49
Ach ja, warum das Zusammenfügen nicht geht, aber das Aufteilen schon, ist recht einfach erklärt.

Die Werte des Enums sind ja "nur" Namentliche Bezeichner für je einen bestimmten nummerischen Wert.
Ersetzt man mal die Namen durch ihre Werte, dann fällt das Dilemma auf.

Delphi-Quellcode:
type
   TTeilmengeA = (0, 1, 2);
   TTeilmengeB = (0, 1, 2);
   TAll = TTeilmengeA + TTeilmengeB; // würde nun doppeldeutige Werte enthalten ( ist die 0 nun A oder B? )

type
   TAll = (0, 1, 2, 3, 4, 5);
   TTeilmengeA = 0..2;
   TTeilmengeB = 3..5;
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
blablab

Registriert seit: 3. Jan 2006
509 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Aufzählungstypen vereinigen

  Alt 5. Apr 2012, 10:22
Vielen Dank für eure Antworten!

Statt
Delphi-Quellcode:
if typ in [Low(TTeilmengeA)..High(TTeilmengeA)] then begin
   ...
end;
hab ichs jetzt so gemacht:
Delphi-Quellcode:
case typ of
   Low(TTeilmengeA)..High(TTeilmengeA): ...;
end;
Kommt ja im Prinzip aufs selbe hinaus, allerdings muss bei letzterem nicht extra ein "set of TAll" erstellt werden und ich vermute mal dass es deshalb schneller ist.

Also vielen Dank für eure Hilfe!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Aufzählungstypen vereinigen

  Alt 5. Apr 2012, 10:29
Dieses Set [Low(TTeilmengeA)..High(TTeilmengeA)] wird schon im Compiler erstellt, als implizite Konstante und dann wird darauf nur noch eine einzige Abfrage darauf ausgeführt.
Gut, in den x86-CPUs soll dieser eine BTC-Befehl nicht unbedingt der aller Schnellste sein, aber egal. (vom Code her ist das doch übersichtlicher? )

Beim CASE sind das mehrere Assemblerbefehle für die beiden Vergleiche und Delphi optimiert ein CASE sogar zu mehreren mathematischen Opperationen (meist 'ne Subtraktion) und einfachen Vergleichen mit 0.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 5. Apr 2012 um 10:33 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:50 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