Zuerst sei darauf hingewiesen, wie eine Instanz von circuit_buffer angelegt werden kann:

circuit_buffer<mytype,mysize> cb;
Als Templateparameter sind also der Elementetyp und die Kapazität des Puffers anzugeben. Die Kapazität meint die Anzahl der Elemente, die der Puffer verwalten kann. Sie ist vom compilerabhängigen Typ size_t und zumeist unsigned int.

Der Kopf der Templatedeklaration:

template <typename T, size_t cap> class circuit_buffer

Bisher sind nicht implementiert:

Typdefinitionen:

typedef std::vector<T> container_type;
typedef size_t size_type;
typedef T& reference;
typedef const T& const_reference;
typedef T value_type;
Der im Folgenden verwendete Typ iterator ist der Typ des im Template circuit_buffer definierten Typs iterator, also iterator == circuit_butter<T,cap>::iterator.

Standardkonstruktor:

circuit_buffer();
Dieser initialisiert die Zugriffsindizes (first, next, current) und reserviert den erforderlichen Speicher. (keine Ausnahmebehandlung)

Statusmethoden: (teilweise selbsterklärend)

bool empty();
bool full();
size_type size(); // liefert die aktuelle Anzahl an gültigen Elementen.

Methoden zur Erzeugung von Iteratoren:

iterator begin(); // liefert einen Iterator auf das erste Element
iterator end(); // liefert einen Iterator hinter das letzte Element
Wenn der Puffer leer ist, sind beide Iteratoren gleich.

Schreibmethoden und -Operatoren:

void add(value_type val) // fügt ein Element am Pufferende dazu
circuit_buffer& operator<<(value_type val); // ruft add(val) auf
Der Operator liefert eine Referenz auf den Puffer zurück, damit die verkettete Notation des Schreiboperators möglich wird (cb << x << y;). Beim Schreiben wird das bisher erste Element ungültig, wenn der Puffer bereits voll ist.

Methoden für den sukzessiven Lesezugriff ohne Iteratoren

void reset(); // setzt Zugriffsindex auf das älteste Element
value_type get(); // liefert das Element an der Stelle des Zugriffsindex
circuit_buffer& operator>>(reference ref); // ruft ref=get() auf
get() setzt auch den Zugriffsindex auf das nächste Element. Wenn der Puffer leer ist, ist der gelieferte Wert undefiniert. Der Operator liefert eine Referenz auf den Puffer zurück, damit die verkettete Notation des Leseoperators möglich wird (cb >> x >> y;).

Die Headerdatei beinhaltet sowohl die Deklaration als auch die Implementationen (implizite inline-Makros).