Methode die array sortiert - Aber mit verschiedenen Datentypen je Aufruf

Master1991

Level-1
Beiträge
4
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi,

ich habe mehrere Ringbuffer die verschiedenen Struktures zwischenspeichern. Beispielsweise:

RingBuffer 1 speichert Daten vom Typ ST_Example1 (8 Byte groß) - 1.000.000 Werte.

RingBuffer 2 speichert Daten vom Typ ST_Example2 (16 Byte groß) - 100.000 Werte.

So jedes Strukture hat auf jedenfall als erstes Element einem 64bit timestamp nach dem sortiert werden soll.

Sortieren ist auch falsch ausgedrückt. Eigendlich will ich nur die Reihenfolge ändern sodass der Ringbuffer quasi geordnet wird.
Das ganze passiert weil ich es danach geordnet in CSV Dateien schreiben will.

So das ordnen könnte ich jetzt machen indem ich einfach den ringbuffer leer "poppe". Wie genau ist eig egal.

Wichtig bzw meine Frage ist muss ich jetzt quasi die selbe Funktion 2x schreiben weill ich zwei verschiedenen Struktures habe?

Ich will eigendlich eine Funktion die den Pointer zum Array bekommt und die länge und wo ich dann in der Funktion sagen kann was genau für Daten im Array sind...

Wenn ich also ADR(buffer1) übergebe möchte ich es in der Funktion wieder ARRAY OF ST_Example1 zuweisen. und bei ADR(buffer2) wieder ARRAY OF ST_Example2. Die unterscheiden wäre dann ja mit der Länge des arrays möglich. Die frage ist - geht das?
 
Du könntest der Funktion die sizeof der Struktur mitgeben, oder die sizeof eines Buffereintrags in einer Struktur speichern zusammen mit dem Ringpuffer und den Verwaltungszeigern. Dann kann die Sortierfunktion die Anfangsadressen der Einträge berechnen.

Bist Du sicher daß die Ringpuffer-Einträge nicht schon nach Zeitstempel sortiert sind? Suchst Du vielleicht nur den ältesten Eintrag im Ringpuffer? Auf den sollte ein Verwaltungszeiger zeigen.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ja, die sind sortiert. Das eigendliche Problem ist das Schreiben in CSV Dateien. Ich hab den FB der das schreiben erledigt, der bekommt den Ring Buffer, das ist ein Array

[7,8,9,3,4,5,6] -> Will ich also nicht den ganzen Buffer übergeben weil er in einem anderen Programm läuft war die Idee nur das Buffer Array zu übergeben, das ist FAST geordnet - ich würd es vorher gerne umordnen und danach durch iterieren. Das Problem ist halt das der andere Ring Buffer zB [G,H,I, C,D,E,F] speichert. Also unterschiedliche Daten.

Wenn ich nun im CSV Write mein Array habe und natürlich auch die Größe der Werte weiß könnte ich mittels Pointer Arithmetik auf die Werte zugreifen und genau hier kommt jetzt die eigendliche Frage: Ich weiß zB an pBuffer[768] liegen Daten der länge x und des Typs ST_Example. Kann ich mir eine neue Variable ST_Example erstellen und sowas machen wie varStExample := pBuffer[768].

Sodass ich danach wieder über die Punktnotation (varStExample .Wert1) auf die Variable zugreifen kann? Oder geht es nur noch Byteweise?

Verstehst du was ich meine?
 
Zurück
Oben