Einzelnen Beitrag anzeigen

Whookie

Registriert seit: 3. Mai 2006
Ort: Graz
445 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Mehrdimensionale Variable variabler Dimension

  Alt 11. Okt 2014, 13:00
Die Klasse sieht nun wie folgt aus:

Delphi-Quellcode:
TVariable<T> = Class
  private type
    PVariable = ^T;
  private
    fVarSize: Integer;
    fDimensions: TDimArray;
    fPData: PByte;
    fMemSize: Integer;
  public
    constructor Create(AName: AnsiString; const ADimensions: TDimArray); virtual;

    property Value_: T read GetValue write SetValue;
    property Value[x: Integer]: T read GetValue1D write SetValue1D; default;
    property Value[x,y: Integer]: T read GetValue2D write SetValue2D; default;
    property Value[x, y, z: Integer]: T read GetValue3D write SetValue3D; default;
  End;
Bis auf die Value_ property sieht das schon recht gut aus.

Zeitmessungen habe ich auch gemacht jeweils 800000 Zugriffe auf ein 10*3 Integer Array

Version mit Value[[x,y]] : ~2400ms
Version mit Value[x,y] : ~180ms

Zusätzlich habe ich auch das mit einem TDictionary ausprobiert:
Mit IntToStr(x)+'-'+IntToStr(y): ~9200ms
Mit (x Shl 16 + y) als Index: ~3400ms


Ein Problem bleibt noch mit der Unterscheidung zwischen:
Delphi-Quellcode:
Type
  TEnumEntry = AnsiString;
und "normalen" AnsiStrings. Beides soll als Array angelegt werden können, intern aber anders gehandhabt werden. AnsiStrings sind in Wirklichkeit Strings mit fixer Länge und können direkt abgelegt werden während TEnumEntry Strings mit varibler Länge sind und im Speicher einfach als Offsets auf ihre Position dahinter abgelegt werden sollen.

Leider ist aber TypeOf(T) = TypeOf(TEnumEntry) = TypeOf(AnsiString). Daher suche ich nun eine Möglichkeiten die beiden Varianten zu unterscheiden?
Whookie

Software isn't released ... it is allowed to escape!
  Mit Zitat antworten Zitat