====== std.lfd_parser ======
LFD-Binärformat-Parser (Lyx File Data): Lyx-natives Binärformat für strukturierte Daten lesen. LFD ist ein typisiertes, kompaktes Binärformat — ähnlich MessagePack, aber speziell für Lyx-Datentypen optimiert.
→ [[lyx_-_programmiersprache:units:lfd_factory|std.lfd_factory]] · [[lyx_-_programmiersprache:units|Standard Library]]
----
===== LFD-Dateistruktur =====
Header: "LFD\x01" (4 Bytes, Magic + Version)
Body: Sequenz typisierter Felder (Tag + Länge + Daten)
Footer: Checksumme (4 Bytes, CRC32)
----
===== Verwendung =====
import std.lfd_parser;
// LFD-Datei öffnen
var p: LfdParser := LfdParserOpen("daten.lfd");
if (p = nil) {
log_error("LFD-Datei nicht gefunden");
return;
}
// Felder sequenziell lesen
while (LfdParserHasNext(p)) {
var tag: int64 := LfdParserNextTag(p);
if (tag = LFD_TAG_INT64) {
var n: int64 := LfdParserReadInt64(p);
ProcessInt(n);
}
if (tag = LFD_TAG_STRING) {
var s: pchar := LfdParserReadString(p);
ProcessString(s);
}
if (tag = LFD_TAG_FLOAT) {
var f: f64 := LfdParserReadFloat(p);
ProcessFloat(f);
}
}
LfdParserClose(p);
----
===== Tag-Konstanten =====
^ Konstante ^ Typ ^
| ''LFD_TAG_INT64'' | 64-Bit-Integer |
| ''LFD_TAG_FLOAT'' | 64-Bit-Float |
| ''LFD_TAG_STRING'' | UTF-8-String |
| ''LFD_TAG_BOOL'' | Boolean |
| ''LFD_TAG_BYTES'' | Rohe Bytes |
| ''LFD_TAG_LIST_BEGIN'' | Listen-Start |
| ''LFD_TAG_LIST_END'' | Listen-Ende |
| ''LFD_TAG_MAP_BEGIN'' | Map-Start |
| ''LFD_TAG_MAP_END'' | Map-Ende |
----
===== Funktionen =====
^ Signatur ^ Sichtbarkeit ^ Beschreibung ^
| ''LfdParserOpen(path: pchar): LfdParser'' | pub | Öffnet LFD-Datei; gibt nil bei Fehler zurück |
| ''LfdParserFromBuffer(data: pchar, len: int64): LfdParser'' | pub | Parst LFD aus Speicherpuffer |
| ''LfdParserHasNext(p: LfdParser): bool'' | pub | Gibt true zurück wenn weitere Felder folgen |
| ''LfdParserNextTag(p: LfdParser): int64'' | pub | Liest nächsten Tag-Wert |
| ''LfdParserReadInt64(p: LfdParser): int64'' | pub | Liest Int64-Wert (nach LFD_TAG_INT64) |
| ''LfdParserReadFloat(p: LfdParser): f64'' | pub | Liest Float-Wert (nach LFD_TAG_FLOAT) |
| ''LfdParserReadString(p: LfdParser): pchar'' | pub | Liest String-Wert (nach LFD_TAG_STRING) |
| ''LfdParserReadBool(p: LfdParser): bool'' | pub | Liest Bool-Wert (nach LFD_TAG_BOOL) |
| ''LfdParserReadBytes(p: LfdParser, outLen: *int64): pchar'' | pub | Liest Byte-Array (nach LFD_TAG_BYTES) |
| ''LfdParserSkip(p: LfdParser): void'' | pub | Überspringt aktuelles Feld |
| ''LfdParserClose(p: LfdParser): void'' | pub | Schließt Parser und gibt Ressourcen frei |
Letzte Aktualisierung: 2026-05-22