c / expert
Snippet
Kooperative Koroutinen-Ausgabe mittels Switch-Case-Fallthrough-Zustandsautomaten
Demonstriert asymmetrisches Yielding von Koroutinen in Standard-C unter Nutzung von Switch-Case-Mechanismen (ähnlich wie Duff's Device). Die Funktion behält ihren internen Zustand über Aufrufe hinweg bei und steigt direkt in die Schleifenstruktur wieder ein.
snippet.c
c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>typedef struct {int state;int index;} Coroutine;int process_stream(Coroutine* cr, const int* buffer, int size) {switch (cr->state) {case 0:for (cr->index = 0; cr->index < size; cr->index++) {cr->state = 1;return buffer[cr->index];case 1:;}}cr->state = -1;return -1;}
Erklärung
1
switch (cr->state)
Springt beim erneuten Aufruf direkt zum gespeicherten Ausführungs-Label innerhalb der Funktion.
2
cr->state = 1;
Aktualisiert die interne Zustandsmarkierung unmittelbar vor der Unterbrechung der Ausführung.
3
return buffer[cr->index];
Gibt den aktuellen Wert an den Aufrufer zurück und unterbricht die Funktionsausführung.
4
case 1:;
Dient als verschachteltes Sprungziel direkt innerhalb des Körpers der for-Schleife.