Ich habe eine Klasse geschrieben, die, wenn man sie korrekt anspricht mit beliebigen gechunkten binären Dateiformaten umgehen kann.
Ich habe als "addressierungsmethode" eines Chunks eine baumartige verwendet, d.h.: Ein Chunk wird identifiziert durch:
ID,
IndexStage,
Index
Es gibt methoden zum laden von einzelnen Chunks, circa so:
|
C-/C++-Quelltext
|
1
2
3
4
5
|
sgSChunk sgCFileChunked::GetChunk(
const unsigned int uiID,
const int uiIndexStage,
const int uiIndex
);
|
Zum optimierten Laden gibt es die Möglichkeit Bäume von Chunks zu laden. Ungefähr so:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
|
sgCTreeChunk sgCFileChunked::GetTreeChunk(
const unsigned int uiIDHead,
const int uiIndexStage,
const int uiIndex,
const unsigned int uiCountStage
);
|
Das Problem: Das ganze funktioniert zwar, aber ich habe bis jetzt noch keine Idee, wie ich es schaffe, die Ladefunktionen sequentiell zu machen, d.h.: Die Funktionen sind viel zu lahm. Mein bisheriges Prinzip geht ungefähr so:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
ListeDerChunkPositionenDerAktuellenSchicht;
ListeDerChunkPositionenDerTieferenSchicht;
Schleife, die bis zur tiefsten schicht läuft
{
Schleife, die alle Chunks der aktuellen Schicht durchläuft
{
Lade den Header des aktuellen Chunks;
if(Aktueller Chunk hat bekannte Subchunks)
{
Positionen der Subchunks in ListeDerChunkPositionenDerTieferenSchicht einfügen;
}
}
Lösche ListeDerChunkPositionenDerAktuellenSchicht;
ListeDerChunkPositionenDerAktuellenSchicht=ListeDerChunkPositionenDerTieferenSchicht;
}
|
Das heißt noch mal anders gesagt:
Ich durchlaufe alle Chunks. Die Positionen der Subchunks merk ich mir in ner Liste.
Dann durchlaufe ich die Chunks deren Positionen in der Liste stehen und merke mir deren Subchunks in ner Liste.
...
Weiß jemand eine Idee wie ich eine sequentielle Ladefunk bauen könnte?
Die jetzige methode ist so lahm (weil der Lesekopf der Festplatte zickzack läuft), dass ich beim debuggen einschlafe.
Ich erhoffe Antwort
Samuel G.