[GO] Implementierung von c / c ++> RingBuffer (N Ränder)

Funktionsprüfung


C++ Builder XE4

Beim Zeichnen von Grafiken passen alte Daten nicht in den Zeichenbereich und sind nicht erforderlich. Daher wollte ich einen Prozess zum Löschen der alten Daten.

Es ist einfach, TList usw. zu verwenden, aber ich habe den gleichen Prozess selbst implementiert, damit er in C-Projekten verwendet werden kann.

Als Prozess

--keepnum: Mindestanzahl von Daten, die Sie behalten möchten --margin: Anzahl der Daten, um die Margin zuzulassen

Wenn die Anzahl der Daten erreicht ist (Keepnum + Rand), wird der Rand entfernt. Auf diese Weise soll der Prozess des Entfernens von Daten in bestimmten Intervallen ausgeführt werden, ohne sie jedes Mal auszuführen, wenn Daten hinzugefügt werden.

Verarbeitungskörper


int TimeGraph_KeepLatestNsets(int keepnum, int margin, TG_graphData_t *graphDataPtr, int *dataCount)
{
	if (*dataCount < (keepnum + margin) ) {
		return *dataCount;
	}

	for(int idx = 0; idx < keepnum; idx++) {
		TG_graphData_t *src = &graphDataPtr[idx + margin];
		TG_graphData_t *dst = &graphDataPtr[idx];
		TimeGraph_SetEachData(dst, src->sampleDt, src->val, src->errStatus);
		// set 0 to moved one
		TimeGraph_SetEachData(src, src->sampleDt, 0.0, src->errStatus);
	}
	*dataCount = keepnum;

	return *dataCount;
}

Testfunktion


void Test_TimeGraph_KeepLatestNsets()
{
	TG_graphData_t data[10];
	int dataCnt = 0;

	const int keepnum= 5;
	const int margin = 3;

	for(int idx = 0; idx < (keepnum + margin); idx++) {
		if (idx < keepnum) {
			TimeGraph_SetEachData(&data[idx], Now(), 3.141592, TG_DATA_OK); 
		} else {
			TimeGraph_SetEachData(&data[idx], Now(), 2.7182, TG_DATA_OK); 		
		}
		dataCnt++;
	}

	int preCnt = dataCnt;
	int nowCnt = TimeGraph_KeepLatestNsets(keepnum, margin, &data[0], &dataCnt);
	if (preCnt != nowCnt) {
		// after removal of old data
		int nop551 = 1;
		(void) nop551; //Vermeidung von Warnungen "Der xxx zugewiesene Wert wird nicht verwendet"
	} else {
		int nop554 = 1;
		(void) nop554; //Vermeidung von Warnungen "Der xxx zugewiesene Wert wird nicht verwendet"
	}
}

TG_graphData_t ist eine Struktur für Daten. Es wird eine Mitgliedsvariable namens TDateTime verwendet. Wenn sie jedoch in C verwendet wird, wird sie entsprechend in den integrierten Datentyp geändert.

TimeGraph_SetEachData(dst, src->sampleDt, src->val, src->errStatus); Legt die Daten nach sampleDt in der Struktur des dst-Zeigers fest. Dies geschieht, um zu verhindern, dass vergessen wird, einige Mitgliedsvariablen zuzuweisen.

Es ist möglicherweise besser, den Namen der Variablen etwas genauer zu überdenken.

Recommended Posts

Implementierung von c / c ++> RingBuffer (N Ränder)
C> Trennung von durch Kommas getrennten Zeichenfolgen> Implementierung von extractCsvRow ()
Implementierung der Fibonacci-Sequenz
Quantum Computer Implementierung von Quantum Walk 2
Implementierung von TF-IDF mit Gensim
Implementierung von MathJax auf Sphinx
Fortschritt der 5/6 ~ C-Anordnung usw. ~
Erklärung und Implementierung von SocialFoceModel
Implementierung der Spieltheorie - Gefangenendilemma -
ARC067 C - Faktoren von Factorial
Implementierung einer unabhängigen Komponentenanalyse
Quantum Computer Implementierung von Quantum Walk 3
Python-Implementierung des Partikelfilters
Deklaration globaler Variablen der C-Sprache
Implementierung der schnellen Sortierung in Python
Quantum Computer Implementierung von Quantum Walk 1
Tiefes Lernen der Verstärkung 2 Implementierung des Lernens der Verstärkung
Implementierung von Scale-Space für SIFT
Durch die C ++ - Implementierung von Protobuf wird das Caffe-Modell von Chainer zehnmal schneller geladen
Geometrie> Winkelberechnung zweier Vektoren im Uhrzeigersinn> Link: Python-Implementierung / C-Implementierung