This is an old revision of the document!
−Table of Contents
Die Zwiebel Datenstruktur
Um alle verschiedenen Typen von Datenflüssen in einem Programm zusammenzuführen, wurde ein generischer Datentyp definiert. Es ist in eine verschachtelte Feldstruktur, die sogenannte Zwiebel.
Diese Seite führt die verschiedenen Schlüssel und Ihre Bedeutungen zusammen.
Das Prinzip
Eine “Zwiebel” ist eine Ansammlung von Pfaden und deren Werten. Alle diese Pfade beginnen bei der “Zwiebelwurzel”, was bedeutet das relative Pfadbezeichnungen nicht erlaubt sind. Diese Pfade werden aus einer Liste von Namen der verschiedenen Ebenen zusammengestellt und durch ein “/” aufgeteilt. Dies bedeutet, es sieht dem Verzeichnispfad sehr ähnlich:
dies/ist/ein/möglicher/Pfad
Im Gegensatz zu einem gültigen Verzeichnispfad, darf die “Zwiebelstruktur” nicht mit einem führenden “/” beginnen.
Jeder Pfad beinhaltet einen Wert.
Dieser Wert kann entweder ein Basistyp wie eine Zeichenfolge, ein Integer, boolscher Wert oder eine Fließkommazahl, eine Ansammlung von “Zwiebeln” oder einer (Sub)-“Zwiebelstruktur” sein. Eine “Zwiebelklasse” unterstützt Methoden um die Werte zu erhalten, zu setzen und zu löschen.
Weil der Wert dieses Pfads eine “Zwiebel” sein kann, kann der Pfad aufgeteilt werden in einen nach links zeigenden Pfad, welcher eine (Sub)-“Zwiebelstruktur” als Wert zurückgibt, wobei diese (Sub)-“Zwiebelstruktur” dann den verbleibenden (rechten) Teil des Pfades enthält.
Das bedeutet wenn man z. Bsp. “Dies/ist” von dem Pfad “Dies/ist/ein/möglicher/Pfad” wegnimmt gibt dies eine “Zwiebelstruktur” zurück, welche selbst den Inhalt von “ein/Möglicher/Pfad” enthält. Dies wird benutzt um sehr einfach Unterteile in eine “zwiebelstruktur” einzubinden oder aus Ihr auszulagern.
Die Namenskonvention
Ein Teil eines solchen Pfades besteht aus den folgenden Zeichen [a-zA-Z0-9_-] und muss mit einem Buchstaben starten. Normale Teile werden in Kleinschreibweise geschrieben, Wurzelbereiche in Großschreibweise (siehe unten) geschrieben. Sammlungen die intern als Schlüssel/Wert eines Hasharrays dargestellt werden, sind indiziert mit einem führenden “_”, gefolgt von einem kontinuierlich erhöhten Integerwert welcher mit 0 startet. Die Anzahl der eingebundenen Elemente ist ein Integerwert, indiziert mit “_nr”
Die Wurzelnamen
Wie es ihre Absicht ist, vermögen “Zwiebeln” eine breite Palette von möglichen Datensätzen darzustellen. Diese Datensätze sind ziemlich gleich zu dem was in C einen Struktur ist oder ein Datensatz in Pascal: Eine Struktur von verschiedenen statischen Daten, welche auch andere Sub-Strukturen enthalten können.
Um nun die Handhabung einfacher zu machen, muss folgende Konvention beachtet werden:
Der Name dieser Struktur wird as Wurzelteil des Pfades benutzt, in Großbuchstaben geschrieben. Als ein Beispiel wie wir die Datenstruktur nutzen betrachten wir zunächst die Implementation in C:
struct date{ year : integer = 2010; month : integer = 1 ; day : integer = 11 ; dayofweek : string = "Monday "; }
Würde in der “Zwiebel” Syntax folgendermassen geschrieben werden
DATE/year = 2010 DATE/month = 1 DATE/day = 1 DATE/dayofweek = "Monday"
Die verschiedenen Wurzeln (Datentypen)
Um eine nahtlose Zusammenarbeit zwischen all den verschiedenen internen Programmmodulen zu garantieren, müssen folgende Datenstrukturdefinitionen gefolgt werden:
ID
Die ID Struktue umfasst alle Daten um ein Modul in einem System zu identifizieren.
Details die definiert werden müssen
Name | Typ | opt. | Bedeutung |
---|---|---|---|
name | Zeichenkette | Id des Moduls |
CONFIG
Die CONFIG Struktur wird benutzt den Kern in die Lage zu versetzen den Nutzer etwas konfigurieren zu lassen
Name | Typ | opt. | Bedeutung |
---|---|---|---|
Eigentümer | ID | Id des sendenden Moduls | |
Parameter | Kollektion von Parametern | setzen von Parametern |
PARAMSET
Die PARAMSET Struktur wird benutzt, um dem Modul mitzuteilen, ein Set von gegebenen Parametern zu nutzen. Dies kann zum einen das Ergebnis einer CONFIG Anfrage oder einer Startkonfiguration sein, welche durch den Kern aus den Einstellungen gelesen wird und zu den Modulen während der Hochlaufphase gesendet wird.
Name | Typ | opt. | Bedeutung |
---|---|---|---|
Eigentümer | ID | ||
Parameter | Kollektion von Parametern | setzen von Parametern |
PARAM
The PARAM struct is used to transfer configuration data. The optional data helps to define the user interface for the configuration window and is not needed when some configuration data is send to a module.
Name | Type | opt. | Meaning |
---|---|---|---|
name | string | Name of that parameter | |
type | string | x | f=float, i = integer , s = string , sf = filename , c = combobox , radiobutton = like a combobox, but with a different presentation, cm = combobox with multiple selection, b = boolean (checkbox), a = alert |
actValue | base type | representation of the actual value(s), seperated by ; in case of a multiselect element | |
loRange | base Type | x | lowest value of the allowed range. For comboboxes, this field contains the possible selections, seperated by |. For strings this field might include a RegEx, which describes the allowed result. For alerts, this may contain the answer button texts, seperated by |. |
upRange | base type | x | highest value of the allowed range |
tooltip | String | x | some additional text which might give the user some help for this parameter |
fileexist | Boolean | x | in case type=fn for FileSelectDialogs: The file must already exist for opening a File |
VALUE
The VALUE struct contains a value to show
Name | Type | opt. | Meaning |
---|---|---|---|
sender | ID | sender of this value | |
to | ID | receiver of this value | |
type | string | f=float, i = integer , s = string , c = combobox , radiobutton = like a combobox, but with a different presentation, cm = combobox with multiple selection, b = boolean (checkbox) | |
rawValue | base type | representation of the actual value(s), seperated by ; in case of a multiselect element | |
Unit | String | Unit of the value | |
ValueString | String | string representation of the value + unit | |
loRange | base Type | x | lowest value of the allowed range. For comboboxes, this field contains the possible selections, seperated by |. For strings this field might include a RegEx, which describes the allowed result |
upRange | base type | x | highest value of the allowed range |
step | base type | x | step rate in which the value can be changed (e.g. for slider boxes) |
PAGE
The PAGE struct is used to request the UI to create a “landing surface” to place some visualizers onto.
Name | Type | opt. | Meaning |
---|---|---|---|
owner | ID | Id of the sending Module | |
name | String | title of the requested page |
PAGEDONE
The PAGEDONE struct is used to tell the UI that the placement of the visualizers is done.
Name | Type | opt. | Meaning |
---|---|---|---|
owner | ID | Id of the sending Module |
UPDATE
The UPDATE struct tells the owner of a visualizer that the user has requested an update by e.g. pressing a button or do a double click on an value
Name | Type | opt. | Meaning |
---|---|---|---|
vis | ID | Id of the sending visualizer | |
to | ID | name of the owner of the visualizer | |
actValue | String | actual shown value | |
updType | int | type of the update (like request came from user or it is a periodic update) | |
optid | String | X | optional ID as add. identification, if needed |
UPDEVENT
The UPDEVENT tells the visualizer which events are allowed to send an update request. If not set, the visualizer sends only an update request on manual user request. UPDEVENT is a set of events, which are seperated by |
Event | Meaning |
---|---|
UPDATE | the update request is send when the user request a global list update |
TIMER | the update request is send in an interval if the global timer is active |
VISUALIZE
The VISUALIZE struct is used to request the UI to create a visualizer. It then up to the implementation of this visualizer to add that visualization to an already existing visualizer (in a listview for example) or to create a new object (as for a button)
Name | Type | opt. | Meaning |
---|---|---|---|
owner | ID | Id of the sending Module | |
name | String | name of the requested visualizer | |
type | String | type of the requested visualizer | |
theme | String | x | name of the theme to be used, if different from default theme |
canvas | String | name of the canvas, on which that visualizer should appear | |
value | VALUE | initial value | |
tooltip | String | some additional text which might gives some information about this value | |
updevent | UPDEVENT | x | allowed update events of this visualizer |
optid | String | x | optional ID as add. identification, if needed |