RSS Feed abonnieren

Ein einfacher FIFO-Cache in LSL

08. September 2009

FIFO geschreibt einen einfachen Algorithmus bei dem zuerst ankommende Daten auch als Erste verarbeitet werden (First In – First Out). Man kann es sich als einfache Warteschlange vorstellen.

Hier ein einfacher FIFO-Cache in LSL (Linden Scripting Language) mit dem es möglich ist ankommende Daten zwischenzuspeichern um sie später sequenziell abzuarbeiten. Sinnvoll ist soetwas überall dort wo es durch Ereignisse (z.B. Benutzereingaben oder Sensoren) recht schnell viele Daten entstehen können, die man jedoch (durch Beschränkungen in LSL) nur relativ langsam abarbeiten kann. Man schafft sich damit einen Buffer bei „Lastspitzen“.

Je nach Datentyp muss das Script entsprechend angepaßt werden, dieses Beispiel ist für Keys.

list LIST_KEYS;
 
addCache(key uuid) {
     integer found = llListFindList(LIST_KEYS, [uuid]);
     if (found < 0) {
         LIST_KEYS += [uuid];
     }
}
 
key getCache() {
    if (llGetListLength(LIST_KEYS)) {
        key result = llList2Key(LIST_KEYS,0); 
        LIST_KEYS = llDeleteSubList(LIST_KEYS, 0, 1);
        return result;
    } else {
        return NULL_KEY;
    }
}

Die Benutzung ist recht einfacht. Mit addCache(key) wird ein Key in den Cache geschrieben und mit getCache() der nächste Key aus dem Cache geholt (und dort gelöscht). Ist der Cache leer wird NULL_KEY zurückgegeben.

In addCache() befindet sich zudem eine Prüfung ob der Schlüssel schon im Cache vorhanden ist. Diese IF-Adfrage kann auch weggelassen werden, kann aber auch recht sinnvoll sein um z.B. nur Schlüssel in den Cache einzufügen die noch nicht dort vorhanden sind (z.B. um Doppelbestellungen durch falsches Klicken bei Vendoren zu verhindern)

Man sollte beachten, der Speicher bei einem LSL Script ist beschränkt. Die Anzahl der maximalen Einträge im Cache (bevor es zu einem Speicherüberlauf) kommt kann recht unterschiedlich sein. Daher sollte der Cache immer schnellstmöglich abgearbeitet werden.

Tags: , ,

Kommentar?

Hinweise zum Datenschutz siehe Impressum

*

tempo@deruwe.de jl@deruwe.de