Fifo Template Klassen

Die Header Datei Fifo.h stellt unterschiedliche Fifo Template Klassen bereit. Alle Klassen erkennen, wenn ihr Speicher gefüllt ist und werden dann keine neuen Elemente aufnehmen, bis ein Element entfernt wurde. Die Element-Typen können primitive Datentypen („Plain Old Datatypes“, PODs) sein. Es ist nicht möglich Element Typen mit virtuellen Tabellen in einem Fifo abzulegen. Pointer sind (unabhängig vom Typ) erlaubt.

CFiFoListBase

Die Klasse CFifoListBase ist die Basisimplementierung eines Fifos. Diese Template-Klasse hat eine StorageType-Instanz, die dafür zuständig ist Elemente von einem Typen zu speichern. Sie nutzt eine SyncType-Instanz um synchronisierten Zugriff auf den Speicher und enthaltenen Daten zu erhalten.

Es gibt dabei unterschiedliche Möglichkeiten des Schutzes:

Die Methoden Add(), Remove() und Clear() haben auch entsprechende _Unprotected Variationen, welche mit den Methoden Lock() und Unlock() genutzt werden können um eine synchronisierte Abfolge von Add() und Delete() Operationen zu implementieren.

Methoden:

CFiFoList

Die Klasse CFiFoList basiert auf CFiFoListBase und nutzt als Storage-Type CFiFoListStorageStatic zusammen mit der Synchronisierung-Type CSyncDefault.
Diese Implementierung fügt keine Methoden hinzu und benötigt Element-Typen sowie Größe des Speichers als Template Parameter.

CFiFoListDyn

Die Klasse CFiFoListDyn nutzt den dynamischen StorageType CFifoListStorageDynamic zusammen mit der Synchronisierung-Type CSyncDefault.
Diese Implementierung fügt keine Methoden hinzu und benötigt Element-Typen sowie Größe des Speichers als Template Parameter.

Handover3Buffer

Die Klasse CHandover3Buffer wird genutzt um Elemente von einem Task zu einem anderen weiterzureichen. Der Speicher umfasst 3 Elemente von einem gegebenen Typen. Der schreibende Task kann das Element immer schreiben. Der lesende Task kann das Element immer lesen, wenn ein Element geschrieben wurde. Es liest das Element, welches komplett geschrieben wurde. Elemente werden nicht entfernt nachdem sie gelesen werden. Zugriff via Indices für Lesen und Schreiben auf dem Speicher werden über die Funktion InterlockedExchangeR0 synchronisiert, sodass dieses vom Windows- und RT-Kontext zugreifbar sind.

Methoden:

CHandoverFifo

Die Klasse CHandoverFifo wird ebenso genutzt um Elemente zwischen Tasks auszutauschen. Die Größe des Speichers ist immer eine zweier Potenz und kann durch den Template Parameter DEPTH_EXP gesetzt werden. Dieser ist per Default 3, sodass sich eine Größe von 8 Elementen ergibt.

Methoden:

Beispiel:
TcHandoverSample.tszip