AGB  ·  Datenschutz  ·  Impressum  







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

Dynamisches Array als Klasse

Ein Thema von delphifan2004 · begonnen am 22. Jan 2014 · letzter Beitrag vom 23. Jan 2014
Antwort Antwort
lowmax_5

Registriert seit: 9. Mai 2003
Ort: Münster, NRW
258 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Dynamisches Array als Klasse

  Alt 22. Jan 2014, 08:00
Hallo,

der Aufwand dafür ist ja recht gross. Wäre es nicht einfacher TObjectList (unit Contnrs) dafür zu verwenden?
  Mit Zitat antworten Zitat
delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
279 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Dynamisches Array als Klasse

  Alt 22. Jan 2014, 11:08
Hallo,

der Aufwand dafür ist ja recht gross. Wäre es nicht einfacher TObjectList (unit Contnrs) dafür zu verwenden?
Nein, die gab es unter Delphi 3 noch nicht. Und wenn, wie hätte man das dann mit dieser Objectlist einfacher realisieren können? Das interessiert mich jetzt wirklich.

Die Tlist erhält ja auch keine Objektzeiger, sondern Zeiger auf Variablen des mit ElType vereinbarten Datentyps. Ich hätte höchstens gleich nur Longint oder Pointer zulassen können, da intern der Zeiger in der Liste immer mit 4 Byte Länge gespeichert wird, auch dann, wenn ich nur Byte Werte speichern will. Diese Bytes passen auch in eine Longint Speicherstelle. Ich hätte höchstens statt der TList ein
Array[0..0] of Byte verwenden können, wie in der ersten Version, siehe Link im ersten Beitrag. Dann hätte ich mit Setlength immer die aktuell benötigte Bytezahl festgelegt. Deshalb hatte ich ja in der ersten Version (siehe Link) auch für jeden unterstützten Datentyp eine eigene Klasse.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Dynamisches Array als Klasse

  Alt 22. Jan 2014, 11:15
Wäre es aber nicht etwas "einfacher", das alte Programm von D3 wenigstens auf D7 upzudaten und dann die nativen dynamischen Arrrays zu verwenden,
also jetzt nochmal mit dem Ersatz für diese Arrays rumzuspielen?
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Dynamisches Array als Klasse

  Alt 22. Jan 2014, 13:22
Konnte man unter D3 noch nicht einen Integer auf Pointer casten und umgekehrt? Falls ja kannst du die das ganze New/ Disposezeugs schenken?
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#5

AW: Dynamisches Array als Klasse

  Alt 22. Jan 2014, 19:57
Die Unit scheint sich noch weiter vereinfachen zu lassen: Die case-Unterscheidungen zu den verschiedenen Integertypen ließ ich weg und benutze in jedem Falle nur das für die Pointer, also das, was hinter

etPointer:

steht, lasse ich ausführen. Das funktioniert auch, und zwar für alle Integer-Typen.

Abgeleitete Klassen funktionieren auch für Arrays anderen Typs (auch records), sofern der Speicherbedarf konstant ist. Bei Strings funktioniert es bisher leider nur bei solchen mit konstanter Länge (string[x]).

Geändert von Delphi-Laie (22. Jan 2014 um 20:00 Uhr)
  Mit Zitat antworten Zitat
delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
279 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Dynamisches Array als Klasse

  Alt 23. Jan 2014, 09:28
@himitsu: Wäre es nicht, denn ich der alten Version mußte ich Anpassungen vornehmen, um mehrdimensionale Arrays unterstützen zu können, danach funktionierten zwar die 2- und 3 dimensionalen Arrays, die eindimensionalen aber aus mir unerklärlichen Gründen nicht mehr. Außerdem glaube ich nicht, das per Suchen und Ersetzen einfach die Array Zugriffe geändert werden müssen und gut is, dann ließe sich das tatsächlich updaten. Aber dann mmuss ja auf jeden Fall auch die SetLength Methode in allen Klassen angepasst werden.

@Bjoerk: Das konnte man. Ja. Ok, so ließe sich das TGenericDynArray sicher noch vereinfachen.

@Delphi Laie: Ja das sollte klappen. Meine Intention aber war auch, mit der direkten Zuweisung von Integer Werten arbeiten zu können. Du aber hast Bjoerk's Vorschlag aufgegriffen und nun nur noch die Zuweisung an den Pointer drin. Habe es noch nicht getestet, aber es kann sein, das @Bjoerk Recht hat. Dann könnte ein Longint auch da zugewiesen werden, mit:

Delphi-Quellcode:
var
  myArray: TGenericDynArray;
  I: Longint;

begin
  myArray := TGenericDynArray.CreateArray(5{,ElType würde nicht mehr gebraucht});
  I := 100;
  myArray.ItemsP[2] := Pointer(I);
end.
Habe ich jetzt noch nicht getestet, aber wenn das geht, dann hat Bjoerk Recht.
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#7

AW: Dynamisches Array als Klasse

  Alt 23. Jan 2014, 11:13
Die Aufspaltung in mehrere Integertypen halte ich insofern für entbehlich, als daß die Größenbeschränkung der Integervariablen, wie überhaupt alle Beschränkungen des Computers i.d.R. eher restriktiv und hinderlich sind. Der Pointer agiert wie der größte Integertyp (Integer, der bis 2^31-1 ohne Vorzeichenumschaltung funktioniert) und umfaßt damit gewissermaßen alle Integertypen.

Solang man bei Arrayelementen mit gleichem bzw. konstantem Speicherbedarf bleibt, funktioniert die Unit bestens. Auch ein Record of Integer (benötige ich in meinem Sortierkino) und der Datentyp string[255] funktionieren einwandfrei. Nicht hinbekommen habe ich bisher die Implementierung der dynamischen Datenstruktur "string", aber daran werde ich mich nicht festbeißen.

Erstellt man typabhängig eigene Klassen (dabei kann man sich die Klassenableitung zunutze machen) und man definiert nur die eine typabhängige "property" als "default", entfällt die Adressierung ".Items" der einzelnen Arrayelemente, außerdem entfällt der ^-Operator. Diese Datenstruktur, auch wenn sie auf TList basiert, ist tatsächlich wie ein (dynamisches!) Array benutzbar.

Was Delphi 3 recht ist, ist Delphi 2 billig. Im Anhang ist mein Delphi-2-Projekt, das die Verwendung der verschiedenen Datentypen demonstrieren soll.

Es wundert mich, daß bisher noch keine Mosereinwände á la "Was soll das, Delphi kann das ab Version 4.0 von Hause aus" kamen (Edit: Doch, himitsu äußerte sich). Mich interessierte das, und delphi2004 beschäftigte sich auf meine vorsichtige Anfrage noch einmal damit. Nunmehr funktioniert es für eindimensionale Arrays (mit der genannten Einschränkung) perfekt, und dafür danke ich ihm auch an dieser Stelle noch einmal herzlich! Nicht zuletzt lernt man ja auch bei solchen Experimentalprojekten hinzu.
Angehängte Dateien
Dateityp: zip DynArrays.zip (96,4 KB, 9x aufgerufen)

Geändert von Delphi-Laie (23. Jan 2014 um 20:00 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 09:04 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