====== TIntArray — Feld fester Länge ====== Ein Feld von ''int64''-Werten auf dem Heap, dessen Länge zur Laufzeit feststeht und sich ändern lässt. Vega hält damit Zahlenreihen, die kein Objekt je Eintrag rechtfertigen: die Spaltenbreiten eines [[lyx_-_programmiersprache:vega:controls:tstringgrid|TStringGrid]], die Stilklassen eines [[lyx_-_programmiersprache:vega:controls:tcontrol|TControl]], die Auswahlmarken einer [[lyx_-_programmiersprache:vega:controls:tlistbox|TListBox]]. Unit: ''Vega.Lists'' → [[lyx_-_programmiersprache:vega:controls|Alle Steuerelemente]] · [[lyx_-_programmiersprache:vega:controls:tobjectlist|TObjectList]] · [[lyx_-_programmiersprache:sprache:datentypen#array_t_dynamisches_array_heap|array in der Sprachreferenz]] ---- ===== Einordnung ===== Warum kein ''%%[N]int64%%''? Weil dessen Länge zur Übersetzungszeit feststehen müsste. Warum kein ''array''? Weil Vega als Bibliothek ohne die dynamischen Container der Standardbibliothek auskommen soll — und weil der Speicher hier bewusst auf dem Heap liegt: Als Inline-Feld in einer ''TControl''-Ableitung würde er in dessen Kinderfeld ragen ([[https://github.com/SEOLizer/LyX-Compiler/issues/1630|#1630]]). ---- ===== Verwendung ===== unit Main; import std.io; import Vega.Types; import Vega.Strings; import Vega.Lists; fn main(): int64 { var a: TIntArray := NewIntArray(4); // Laenge steht beim Anlegen fest a.Put(0, 120); a.Put(1, 80); a.Put(2, 200); PrintLn(StrConcat("Laenge: ", IntToStr(a.Length))); PrintLn(StrConcat("a[2]: ", IntToStr(a.Get(2)))); // Ausserhalb der Laenge: Get liefert 0, Put tut nichts — kein Absturz PrintLn(StrConcat("a[99]: ", IntToStr(a.Get(99)))); a.Put(99, 1); a.Resize(6); // vorhandene Werte bleiben PrintLn(StrConcat("nach Resize a[2]: ", IntToStr(a.Get(2)))); PrintLn(StrConcat("neu angelegt a[5]: ", IntToStr(a.Get(5)))); a.Fill(7); PrintLn(StrConcat("nach Fill a[0]: ", IntToStr(a.Get(0)))); a.Destroy(); return 0; } Laenge: 4 a[2]: 200 a[99]: 0 nach Resize a[2]: 200 neu angelegt a[5]: 0 nach Fill a[0]: 7 Übersetzt und ausgeführt mit ''lyxc 1.1.3I''. ---- ===== Besonderheiten ===== * **Die Länge steht beim Anlegen**: ''NewIntArray(4)''. ''Resize'' ändert sie später; vorhandene Werte bleiben, neue Plätze sind ''0''. * **Außerhalb der Länge liefert ''Get'' eine ''0'', und ''Put'' tut nichts.** Dieselbe Nachsicht wie bei ''GetCell'' im Grid — ein Indexfehler artet nicht in einen Speicherzugriff aus, fällt aber auch nicht auf. * ''Fill(v)'' setzt alle Plätze auf denselben Wert — der übliche Weg, ein Feld zurückzusetzen. * ''Destroy()'' gibt den Speicher frei; danach ist ''Length'' ''0''. ---- ===== Eigenschaften ===== Alle Eigenschaften, auch die geerbten. ^ Name ^ Typ ^ Bedeutung ^ Herkunft ^ | ''Data'' | [[lyx_-_programmiersprache:sprache:datentypen#1_ganzzahl-typen_signiert|int64]] | Adresse des Speicherblocks | eigen | | ''Length'' | [[lyx_-_programmiersprache:sprache:datentypen#1_ganzzahl-typen_signiert|int64]] | Zahl der Plätze | eigen | ---- ===== Methoden ===== Alle Methoden, auch die geerbten. ^ Signatur ^ Zweck ^ Herkunft ^ | ''Create(n: int64): void'' | Anlegen; ''NewIntArray(n)'' | eigen | | ''Destroy(): void'' | Speicher freigeben | eigen | | ''Get(i: int64): int64'' | Wert lesen; ''0'' außerhalb der Länge | eigen | | ''Put(i: int64, v: int64): void'' | Wert setzen; außerhalb der Länge wirkungslos | eigen | | ''Fill(v: int64): void'' | Alle Plätze auf denselben Wert | eigen | | ''Resize(n: int64): void'' | Länge ändern; vorhandene Werte bleiben, neue sind ''0'' | eigen | Dazu die Hülle ''NewIntArray(n: int64): TIntArray''. ---- ===== Ereignisse ===== Keine. Letzte Aktualisierung: 2026-08-19 — API aus ''Vega/Lists.lyx'' erhoben, Beispiel mit ''lyxc 1.1.3I'' übersetzt und ausgeführt.