Skip to content

Bahnensprache

Simikolon edited this page Jan 16, 2011 · 9 revisions

#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+)* .

Zurück | Weiter

Clone this wiki locally