Inhaltsverzeichnis

TObjectList — Liste von Objektverweisen

Eine wachsende Liste, die Adressen hält, keine Objekte. Vega benutzt sie überall dort, wo eine Klasse beliebig viele andere Objekte verwaltet: die Kinder eines TControl, die Spalten und Einträge einer TListView, die Fenster einer TApplication.

Unit: Vega.Lists

Alle Steuerelemente · Speicher in der Praxis


Einordnung

Lyx kennt keine generischen Klassen. Eine Liste je Elementtyp von Hand zu schreiben wäre derselbe Code in vielen Fassungen — deshalb hält TObjectList rohe Adressen (int64), und der Aufrufer castet beim Herausholen zurück:

var e: TEintrag := liste.Get(1) as TEintrag;

Das ist der Preis dafür, dass es die Liste überhaupt nur einmal gibt. Wer Zeichenketten braucht, nimmt TStringList; wer Zahlen braucht, TIntArray — beide ebenfalls in Vega.Lists.


Verwendung

unit Main;
import std.io;
import Vega.Types;
import Vega.Strings;
import Vega.Lists;

pub type TEintrag = class {
  Nummer: int64;
  fn Create(n: int64): void { self.Nummer := n; }
}

fn main(): int64 {
  var liste: TObjectList := NewObjectList();

  // Objekte anlegen und ihre Adressen ablegen
  var i: int64 := 0;
  while (i < 3) {
    var e: TEintrag := new TEintrag(i * 10);
    liste.Add(e as int64);
    i := i + 1;
  }

  // Herausholen: die Liste liefert eine Adresse, der Aufrufer castet
  var zweiter: TEintrag := liste.Get(1) as TEintrag;
  PrintLn(StrConcat("zweiter: ", IntToStr(zweiter.Nummer)));

  // Einfuegen, tauschen, suchen
  var neu: TEintrag := new TEintrag(99);
  liste.Insert(0, neu as int64);
  liste.Exchange(0, 1);
  PrintLn(StrConcat("Index von neu: ", IntToStr(liste.IndexOf(neu as int64))));
  PrintLn(StrConcat("Anzahl: ", IntToStr(liste.Count)));

  // Entfernen entfernt nur den VERWEIS — das Objekt lebt weiter
  liste.Delete(0);
  PrintLn(StrConcat("nach Delete: ", IntToStr(liste.Count)));

  // Aufraeumen: erst die Eintraege, dann die Liste
  var k: int64 := 0;
  while (k < liste.Count) {
    var obj: TEintrag := liste.Get(k) as TEintrag;
    dispose obj;
    k := k + 1;
  }
  dispose neu;
  liste.Destroy();
  return 0;
}

zweiter: 10
Index von neu: 1
Anzahl: 4
nach Delete: 3

Übersetzt und ausgeführt mit lyxc 1.1.3I.


Besonderheiten


Eigenschaften

Alle Eigenschaften, auch die geerbten.

Name Typ Bedeutung Herkunft
Items int64 Die Einträge eigen
Count int64 Anzahl der Verweise eigen
Capacity int64 Platz, bevor die Liste wächst eigen

Methoden

Alle Methoden, auch die geerbten.

Signatur Zweck Herkunft
Create(): void Anlegen; NewObjectList() eigen
Destroy(): void Gibt den eigenen Speicher frei, nicht die Einträge eigen
Reserve(n: int64): bool Platz für n Einträge vorab belegen eigen
Get(i: int64): int64 Verweis lesen; 0 bei ungültigem Index eigen
Put(i: int64, obj: int64): void Verweis ersetzen eigen
Add(obj: int64): int64 Verweis anhängen, liefert den Index (-1 bei Speichermangel) eigen
Insert(index: int64, obj: int64): int64 Verweis einfügen; der Index wird auf 0..Count begrenzt eigen
Delete(index: int64): void Verweis entfernen, Folgende rücken auf eigen
IndexOf(obj: int64): int64 Index eines Verweises; -1, wenn nicht enthalten eigen
Clear(): void Alle Verweise vergessen (Count := 0) eigen
Exchange(a: int64, b: int64): void Zwei Einträge tauschen eigen

Ereignisse

Keine.

Letzte Aktualisierung: 2026-08-19 — API aus Vega/Lists.lyx erhoben, Beispiel mit lyxc 1.1.3I übersetzt und ausgeführt.