Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Was bedeutet diese Codezeile? (https://www.delphipraxis.net/177804-bedeutet-diese-codezeile.html)

Codehunter 28. Nov 2013 10:11

Was bedeutet diese Codezeile?
 
Moin.

Sorry für den blöden Threadtitel aber was besseres ist mir nicht eingefallen :-D

Was bedeutet diese Codezeile:
Delphi-Quellcode:
if [ciMMX, ciSSE2] * CPUFeatures <> [] then
Ist das eine UND-Logik oder eine ODER-Logik für die beiden Bedingungen ciMMX und ciSSE2? "CPUFeatures" ist ein Set of-Typ.

DeddyH 28. Nov 2013 10:14

AW: Was bedeutet diese Codezeile?
 
Damit wird geprüft, ob die Schnittmenge der beiden Mengen leer ist.

Sharky 28. Nov 2013 10:15

AW: Was bedeutet diese Codezeile?
 
Sieht fast wie eine Matrixmultiplikation aus die für das Prüfen ob "Werte" gesetzt sind zweckentfremded wurde.

DeddyH 28. Nov 2013 10:18

AW: Was bedeutet diese Codezeile?
 
http://docwiki.embarcadero.com/RADSt...e_%28Delphi%29, siehe dort unter Mengenoperatoren.

Codehunter 28. Nov 2013 10:59

Memleak in Graphics32
 
Danke Deddy. Demnach wäre das in diesem Fall hier eine etwas kryptische NAND-Logik. Für alle die der Hintergrund der Frage interessiert: Ich bin in Graphics32 auf ein Memleak in GR32_Blend.pas gestoßen und habe es wie folgt behoben.

Originalcode:
Delphi-Quellcode:
initialization
  RegisterBindings;
  MakeMergeTables;

{$IFNDEF PUREPASCAL}
  MMX_ACTIVE := (ciMMX in CPUFeatures);
  if [ciMMX, ciSSE2] * CPUFeatures <> [] then
    GenAlphaTable;
{$ELSE}
  MMX_ACTIVE := False;
{$ENDIF}
Geändert:
Delphi-Quellcode:
initialization
  RegisterBindings;
  MakeMergeTables;

{$IFNDEF PUREPASCAL}
  MMX_ACTIVE := (ciMMX in CPUFeatures);
  {$IFNDEF OMIT_MMX} 
  if [ciMMX, ciSSE2] * CPUFeatures <> [] then
    GenAlphaTable;
  {$ENDIF}
{$ELSE}
  MMX_ACTIVE := False;
{$ENDIF}
Zuerst dachte ich nämlich, die Bedingung vor GenAlphaTable würde nicht passen. Dann lags aber am Compilerschalter für OMIT_MMX, der im finalization gesetzt war und im initialization nicht.

bernau 28. Nov 2013 11:02

AW: Was bedeutet diese Codezeile?
 
Zitat:

Zitat von DeddyH (Beitrag 1237771)
http://docwiki.embarcadero.com/RADSt...e_%28Delphi%29, siehe dort unter Mengenoperatoren.

Wieder was gelernt. Immer wieder toll hier mitzulesen.

himitsu 28. Nov 2013 11:12

AW: Was bedeutet diese Codezeile?
 
Wenn du dich mit binären Operationen auskennst:

Code:
a * b   =>   a and     b
a + b   =>   a or      b
a - b   =>   a and not b

hathor 28. Nov 2013 11:13

AW: Was bedeutet diese Codezeile?
 
Liste der Anhänge anzeigen (Anzahl: 1)
* intersection set: S * T

Beispiel:
http://delphi.about.com/od/beginners...i_set_type.htm

Chaotischen Text durch Grafik ersetzt:

Codehunter 28. Nov 2013 13:11

AW: Was bedeutet diese Codezeile?
 
Zitat:

Zitat von Emba
union set set Set1

Einfach herrlich :-D

himitsu 28. Nov 2013 13:31

AW: Was bedeutet diese Codezeile?
 
Zitat:

Zitat von Codehunter (Beitrag 1237813)
Einfach herrlich :-D

:gruebel:

Code:
Operator   Operation     Operand types  Result type  Example
+          union         set            set          Set1 + Set2
-          difference    set            set          S - T
*          intersection  set            set          S * T
<=         subset        set            Boolean      Q <= MySet
>=         superset      set            Boolean      S1 >= S2
=          equality      set            Boolean      S2 = MySet
<>         inequality    set            Boolean      MySet <> S1
in         membership    ordinal, set   Boolean      A in Set1


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:41 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