-
Notifications
You must be signed in to change notification settings - Fork 7
Bahnensprache
#Eine Bahn ist die Summe ihrer Teile und Lücken
Wie bereits beschrieben haben wir uns gegen einen Datastore entschieden und für das Kodieren der Bahn in den URL-Hash. Die Zeichen, die wir für die Kodierung der Bahn verwenden, müssen folglich URL-sicher sein.
##Ein Würfel aus Zeichen
Vier Bytes kodieren einen Würfel. Diese vier Bytes sollen nun wiederum in URL-sichere Zeichen kodiert werden. Für diesen Zweck bietet sich die Base64 Kodierung (genauer gesagt Base64URL) an. Diese kodiert vier Zeichen mithilfe von drei Bytes, d.h. sechs Bits pro Zeichen. Sechs Bits können 64 Werte darstellen, weshalb die Kodierung den Namen Base64 trägt. Es kann passieren, dass ein oder zwei Bytes fehlen, um die drei Bytes voll zu machen, die notwendig sind, um daraus vier Zeichen zu kodieren. In diesem Fall werden entsprechend viele Bytes mit Nullen gefüllt angehängt und die Anzahl der hinzugefügten Bytes durch Anfügen von Gleichheitszeichen an das Ende des URL-Hashs angezeigt.
Unsere Würfel wissen zwar wie sie aussehen, jedoch wissen sie nicht an welcher Stelle sie sich auf der Arbeitsfläche befinden. Hier kommen die beiden unbenutzten Bits ins Spiel, die in der Würfelsprache immer null sind. Jede Arbeitsfläche wird in einer bestimmten Reihenfolge aufgebaut. Eine Arbeitsfläche hat an verschiedenen Stellen Würfel und zwischen diesen Würfeln eventuell Lücken, d.h. keine Würfel. Diese Lücken werden durch vier Bytes kodiert. Jede Lücke beginnt mit einem Byte, das mit Einsen gefüllt ist. Dadurch unterscheidet sich eine Lücke klar von einem Würfel. Lücken können nur am Anfang einer Arbeitsfläche oder zwischen zwei Würfeln auftreten. Die Lücke am Ende ergibt sich implizit.
Ein Wort der Würfelbahnensprache ist eine Abfolge von Vier-Bytesequenzen, wobei
eine Vier-Bytesequenz entweder ein Wort der Würfelsprache oder eine Lücke nach der
obigen Definition ist. Für die Würfelbahnensprache wird durch den folgenden regulären
Ausdruck beschrieben:
(Lücke?Würfel+)*
.