Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Samuel G.

Treue Seele

  • »Samuel G.« ist der Autor dieses Themas

Beiträge: 110

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

1

24.05.2005, 17:41

LadeKlasse für gechunkte Formate

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.
Quak

Dave

Alter Hase

Beiträge: 757

Wohnort: Berlin

  • Private Nachricht senden

2

25.05.2005, 18:42

daran, dass der lesekopf "zickzack läuft" dürfte es nicht liegen, da du die datei vermutlich vorher in den heap lädst, sie also im arbeitsspeicher ist.

Samuel G.

Treue Seele

  • »Samuel G.« ist der Autor dieses Themas

Beiträge: 110

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

3

04.06.2005, 13:35

Nee

Nee tu ich nicht. Der user entscheidet, was er laden will!
Quak

Dave

Alter Hase

Beiträge: 757

Wohnort: Berlin

  • Private Nachricht senden

4

04.06.2005, 16:02

trotzdem musst du die datei vorher laden. der user gibt dir ja nicht eine liste von chunks ein , die auf der ganzen festplatte verteilt sind...

Samuel G.

Treue Seele

  • »Samuel G.« ist der Autor dieses Themas

Beiträge: 110

Wohnort: Stuttgart

Beruf: Schüler

  • Private Nachricht senden

5

20.06.2005, 19:21

Beitrag

Chunks sind nicht auf der Festplatte, sondern in einer Datei verteilt.
(Kapierst du eigentlich, worum es hier geht?)


Samuel G.
Quak

Werbeanzeige