PPL7-Icon Patrick's Programming Library Version 7.0.0 - Dokumentation
ppl7::PFPFile Klassenreferenz

Klasse zum Lesen und schreiben von PFP-Files Version 3. Mehr ...

Klassen

class  Iterator
 

Öffentliche Methoden

 PFPFile ()
 Konstruktor der Klasse. Mehr ...
 
virtual ~PFPFile ()
 Destruktor der Klasse. Mehr ...
 
void addChunk (PFPChunk *chunk)
 Chunk hinzufügen. Mehr ...
 
void clear ()
 Inhalt der Klasse löschen. Mehr ...
 
void deleteChunk (PFPChunk *chunk)
 Bestimmten Chunk löschen. Mehr ...
 
void deleteChunk (const String &chunkname)
 Chunk nach Namen löschen. Mehr ...
 
PFPChunkfindFirstChunk (Iterator &it, const String &chunkname) const
 Ersten Chunk mit einem bestimmten Namen finden. Mehr ...
 
PFPChunkfindNextChunk (Iterator &it, const String &chunkname) const
 Nächsten Chunk mit einem bestimmten Namen finden. Mehr ...
 
String getAuthor () const
 Pointer auf den Author holen. Mehr ...
 
Compression::Algorithm getCompression () const
 Kompressionsverfahren auslesen. Mehr ...
 
String getCopyright () const
 Pointer auf den Copyright-String holen. Mehr ...
 
String getDescription () const
 Pointer auf die Description holen. Mehr ...
 
PFPChunkgetFirst (Iterator &it) const
 Pointer auf ersten Chunk holen. Mehr ...
 
const StringgetID () const
 ID auslesen. Mehr ...
 
int getMainVersion () const
 Hauptversion auslesen. Mehr ...
 
String getName () const
 Namen holen. Mehr ...
 
PFPChunkgetNext (Iterator &it) const
 Pointer auf nächsten Chunk holen. Mehr ...
 
int getSubVersion () const
 Unterversion auslesen. Mehr ...
 
void getVersion (int *main, int *sub) const
 Version auslesen. Mehr ...
 
bool ident (FileObject &ff)
 Prüfen, ob es sich um ein PFP-File handelt. Mehr ...
 
bool ident (const String &file)
 Prüfen, ob es sich um ein PFP-File handelt. Mehr ...
 
virtual void list () const
 Chunks auf STDOUT auflisten. Mehr ...
 
void load (FileObject &ff)
 PFP-File laden. Mehr ...
 
void load (const String &file)
 PFP-File laden. Mehr ...
 
virtual int loadRequest (const String &id, int mainversion, int subversion)
 Ladevorgang bestätigen. Mehr ...
 
void reset (Iterator &it) const
 Zeiger zum Durchwandern der Chunks zurücksetzen. Mehr ...
 
void save (const String &filename)
 PFP-File speichern. Mehr ...
 
void setAuthor (const String &author)
 Author setzen. Mehr ...
 
void setCompression (Compression::Algorithm type)
 Kompression einstellen. Mehr ...
 
void setCopyright (const String &copy)
 Copyright setzen. Mehr ...
 
void setDescription (const String &descr)
 Description setzen. Mehr ...
 
void setId (const String &id)
 ID des PFP-Files setzen. Mehr ...
 
void setName (const String &name)
 Name setzen. Mehr ...
 
void setVersion (int main=0, int sub=0)
 Version setzen. Mehr ...
 

Öffentliche Attribute

Mutex myMutex
 

Private Methoden

void saveChunk (char *buffer, size_t &pp, PFPChunk *chunk)
 
void setParam (const String &chunkname, const String &data)
 Interne Funktion zum Speichern von vordefinierten Chunks. Mehr ...
 

Private Attribute

List< PFPChunk * > Chunks
 Verwaltung aller Chunks in einer Liste. Mehr ...
 
Compression::Algorithm comp
 Kompressions-Flag. Mehr ...
 
String id
 enthält die ID des Chunks. Die ID ist immer 4 Byte lang, gefolgt von einem 0-Byte Mehr ...
 
ppluint8 mainversion
 Hier wird die Hauptversion des Files gespeichert. Mehr ...
 
ppluint8 subversion
 Hier wird die Unterversion des Files gespeichert. Mehr ...
 

Ausführliche Beschreibung

Mit dieser Klasse können Dateien mit "PFP-File"-Header der Version 3 gelesen und geschrieben werden. Mit Version 3 wurde ein mehr generisches Format definiert, als in den beiden Vorgängerversionen. Jedes File, ganz gleich welchen Inhalt es hat, hat bis zum Ende den gleichen Aufbau. Wichtigste Neuerung dabei sind die sogenannten Chunks. Ein File kann aus bliebig vielen Chunks bestehen. Diese werden von der Klasse PFPChunk abgeleitet, bekommen einen Namen und einen beliebigen Inhalt. Diese können dann mit PFPFile::Add in das File hinzugefügt werden.

Ein PFP-File in der Version 3 ist in mehrere aufeinanderfolgende Abschnitte aufgeteilt:

  • 24 Byte langer Header
  • optionaler 8-Byte langer Komprimierungsheader
  • Chunks

Alle 4-Byte Größenangaben sind im LittleEndian-Format!

Header

Der Header einer Version 3 Datei sieht so aus:

Byte 0: String "PFP-File" 8 Bytes
Byte 8: PFP-File-Version (3) 1 Byte
Byte 9: Länge des PFP-Header (24) 1 Byte
Byte 10: File-ID, 4 Byte-String 4 Byte
Byte 14: Unterversion 1 Byte
Byte 15: Hauptversion 1 Byte
Byte 16: Komprimierung 1 Byte
0=unkomprimiert
1=Zlib
2=Bzip2
Byte 17: reserviert 3 Byte
Byte 20: Timestamp der Erstellung (UTC) 4 Byte

Im Anschluss an den Header folgen die Nutzdaten. Sofern keine Komprimierung verwendet wurde, geht es sofort mit dem ersten Chunk los. Ist die Datei komprimiert folgt erst der Komprimierungsheader:

Komprimierungsheader
Byte 0: Größe der Nutzdaten unkomprimiert in Byte 4 Byte
Byte 4: Größe der Nutzdaten komprimiert in Byte 4 Byte
Chunks

In einem PFP-File können beliebig viele Chunks vorkommen. Ein Chunk besteht immer aus einem 4-Byte langen Namen, gefolgt von einem 4-Byte Integer, der die Größe des Chunks einschließlich des Headers angibt, gefolgt von den Nutzdaten. Abgesehen von den unten aufgeführten vordefinierten Chunks, können beliebig viele Chunks mit gleichem Namen vorhanden sein.

Ein Chunk muss nicht zwingend Nutzdaten enthalten.

Byte 0: Chunkname, 4 Byte-String in Grossbuchstaben 4 Byte
Byte 4: Größe des Chunks einschließlich 8-Byte Header 4 Byte
Byte 8: Nutzdaten des Chunks
Vordefinierte Chunks

Die nachfolgenden Chunks sind vordefiniert, aber optional

  • Author

    Byte 0: AUTH
    Byte 4: Länge des nachfolgenden Strings
    Byte 8: Name des Authors mit schließendem 0-Byte

    Der Name des Authors kann mit der Funktion PFPFile::SetAuthor gesetzt werden.

  • Name

    Byte 0: NAME
    Byte 4: Länge des nachfolgenden Strings
    Byte 8: Name der Datei oder Beschreibung des Inhalts mit schließendem 0-Byte

    Der Name des Files kann mit der Funktion PFPFile::SetName gesetzt werden.

  • Description

    Byte 0: DESC
    Byte 4: Länge des nachfolgenden Strings
    Byte 8: Nähere Beschreibung mit schließendem 0-Byte

    Die Description kann mit der Funktion PFPFile::SetDescription gesetzt werden.

  • Copyright

    Byte 0: COPY
    Byte 4: Länge des nachfolgenden Strings
    Byte 8: Copyright-String mit schließendem 0-Byte

    Der Copyright-String kann mit der Funktion PFPFile::SetCopyright gesetzt werden.

End of File

Dieser Chunk ist immer der letzte in der Datei und kennzeichnet das Ende der Nutzdaten.

Byte 0: ENDF
Byte 4: 0
Nutzung
Um das Lesen und Schreiben solcher Dateien zu vereinfachen, kann die Klasse PFPFile in Kombination mit PFPChunk verwendet werden.
Seit
Version 6.1.0

Beschreibung der Konstruktoren und Destruktoren

ppl7::PFPFile::PFPFile ( )

Hier werden einige interne Variablen initialisert, die ID wird auf "UNKN" gesetzt, Version auf 0 und Kompression abgeschaltet

Seit
Version 6.1.0
ppl7::PFPFile::~PFPFile ( )
virtual

Der Destruktor sorgt dafür, dass sämtlicher von der Klasse allokierter Speicher einschließlich aller geladener Chunks freigegeben wird.

Seit
Version 6.1.0

Dokumentation der Elementfunktionen

void ppl7::PFPFile::addChunk ( PFPChunk chunk)

Mit dieser Funktion wird ein neuer Chunk in die Klasse hinzugefügt. Der Chunk muss von der Anwendung mit "new" erstellt worden sein, einen Namen haben. Ist dies nicht der Fall, gibt die Funktion eine Fehlermeldung zurück.

Sobald der Chunk mit AddChunk an die PFPFile-Klasse übergeben wurde, wird er von der Klasse verwaltet und gegebenenfalls auch gelöscht. Die Anwendung braucht kein "delete" darauf zu machen.

Parameter
chunkPointer auf den hinzuzufügenden Chunk
Rückgabe
Bei Erfolg gibt die Funktion true (1) zurück, sonst false (0). Ein passender Fehlercode wird gesetzt.
Bemerkungen
Es ist möglich mehrere Chunks mit gleichem Namen hinzuzufügen. Der Chunk wird nur in der Klasse hinzugefügt, nicht aber in die Datei geschrieben. Zum Speichern muss explizit die Funktion PFPFile::Save aufgerufen werden.
Beispiel:
void *ptr=xxxxx; // Pointer auf die Daten
int size=xxxx; // Größe der Daten in Byte
ppl6::PFPFile file;
ppl6::PFPChunk *chunk=new ppl6::PFPChunk;
chunk->SetName("DATA");
chunk->SetData(ptr,size);
file.AddChunk(chunk);
Seit
Version 6.1.0
void ppl7::PFPFile::clear ( )
Beschreibung:
Mit dieser Funktion werden alle Chunks im Speicher freigegeben und die Klasse auf den Ursprungszustand zurückgesetzt, das heisst sie ist anschließend leer
void ppl7::PFPFile::deleteChunk ( PFPChunk chunk)

Mit dieser Funktion wird ein bestimmter Chunk aus der Klasse gelöscht.

Parameter
chunkPointer auf den zu löschenden Chunk
Rückgabe
Die Funktion liefert bei Erfolg true (1) zurück, sonst false. Ein Fehler kann nur auftreten, wenn der Chunk garnicht im PFPFile vorhanden war.
Bemerkungen
Alternativ kann auch einfach ein "delete" auf den Chunk gemacht werden.
Siehe auch
PFPFile::DeleteChunk(const char *name)
Seit
Version 6.1.0
void ppl7::PFPFile::deleteChunk ( const String chunkname)

Mit dieser Funktion werden alle Chunks gelöscht, die den angegebenen Namen haben

Parameter
chunknamePointer auf den Namen des Chunks
Rückgabe
Die Funktion liefert true (1) zurück, wenn mindestens 1 Chunk gelöscht wurde, sonst false (0).
Bemerkungen
Siehe auch
PFPFile::DeleteChunk(PFPChunk *chunk)
Seit
Version 6.1.0
PFPChunk * ppl7::PFPFile::findFirstChunk ( Iterator it,
const String chunkname 
) const

Mit dieser und der Funktion PFPFile::FindNextChunk kann man sich durch alle Chunks mit einem bestimmten Namen durchhangeln.

Parameter
chunknamePointer auf den Namen des Chunks
Rückgabe
Bei Erfolg liefert die Funktion einen Pointer auf den ersten gefundenen Chunk zurück. Wurde kein passender Chunk gefunden, wird NULL zurückgegeben und ein entsprechender Fehlercode gesetzt.
Siehe auch
  • PFPFile::FindFirstChunk
  • PFPFile::FindNextChunk
  • PFPFile::Reset
  • PFPFile::GetFirst
  • PFPFile::GetNext
PFPChunk * ppl7::PFPFile::findNextChunk ( Iterator it,
const String chunkname 
) const

Mit dieser und der Funktion PFPFile::FindFirstChunk kann man sich durch alle Chunks mit einem bestimmten Namen durchhangeln.

Parameter
chunknameOptionaler Pointer auf den Namen des Chunks. Wurde zuvor bereits PFPFile::GetFirstChunk aufgerufen, muss kein Name angegeben werden.
Rückgabe
Bei Erfolg liefert die Funktion einen Pointer auf den nächsten gefundenen Chunk zurück. Wurde kein passender Chunk gefunden, wird NULL zurückgegeben und ein entsprechender Fehlercode gesetzt.
Siehe auch
  • PFPFile::FindFirstChunk
  • PFPFile::FindNextChunk
  • PFPFile::Reset
  • PFPFile::GetFirst
  • PFPFile::GetNext
Seit
Version 6.1.0
String ppl7::PFPFile::getAuthor ( ) const

Diese Funktion liefert einen Pointer auf den Author zurück

Rückgabe
Pointer auf den Author oder NULL, wenn es keinen "AUTH"-Chunk in der Datei gibt.
Siehe auch
  • PFPFile::GetAuthor
  • PFPFile::GetCopyright
  • PFPFile::GetDescription
  • PFPFile::GetName
Seit
Version 6.1.0
Compression::Algorithm ppl7::PFPFile::getCompression ( ) const

Mit dieser Funktion wird das eingestellte Kompressionsverfahren ausgelesen.

Rückgabe
ID des Kompressionsverfahrens
Siehe auch
PFPFile::SetCompression
Seit
Version 6.1.0
String ppl7::PFPFile::getCopyright ( ) const

Diese Funktion liefert einen Pointer auf den Copyright-Text des Files zurück.

Rückgabe
Pointer auf das Copyright oder NULL, wenn es keinen "COPY"-Chunk in der Datei gibt.
Siehe auch
  • PFPFile::GetAuthor
  • PFPFile::GetCopyright
  • PFPFile::GetDescription
  • PFPFile::GetName
Seit
Version 6.1.0
String ppl7::PFPFile::getDescription ( ) const

Diese Funktion liefert einen Pointer auf die Beschreibung zurück.

Rückgabe
Pointer auf die Beschreibung oder NULL, wenn es keinen "DESC"-Chunk in der Datei gibt.
Siehe auch
  • PFPFile::GetAuthor
  • PFPFile::GetCopyright
  • PFPFile::GetDescription
  • PFPFile::GetName
Seit
Version 6.1.0
PFPChunk * ppl7::PFPFile::getFirst ( Iterator it) const

Diese Funktion liefert einen Pointer auf den ersten Chunk in der Datei zurück.

Rückgabe
Pointer auf den ersten Chunk oder NULL, wenn es keine Chunks gibt.
Siehe auch
  • PFPFile::FindFirstChunk
  • PFPFile::FindNextChunk
  • PFPFile::Reset
  • PFPFile::GetFirst
  • PFPFile::GetNext
Seit
Version 6.1.0
const String & ppl7::PFPFile::getID ( ) const

Diese Funktion liefert einen Pointer auf die ID der Datei zurück

Rückgabe
Pointer auf die ID der Datei. Diese ist immer 4 Byte groß und mit einem 0-Byte terminiert
Seit
Version 6.1.0
int ppl7::PFPFile::getMainVersion ( ) const

Mit dieser Funktion wird die Hauptversion der Datei ausgelesen.

Rückgabe
Hauptversion als Interger
Seit
Version 6.1.0
String ppl7::PFPFile::getName ( ) const
Beschreibung:
Diese Funktion liefert einen Pointer auf den Namen des Files zurück.
Rückgabe
Pointer auf den Namen oder NULL, wenn es keinen "NAME"-Chunk in der Datei gibt.
Siehe auch
  • PFPFile::GetAuthor
  • PFPFile::GetCopyright
  • PFPFile::GetDescription
  • PFPFile::GetName
Seit
Version 6.1.0
PFPChunk * ppl7::PFPFile::getNext ( Iterator it) const

Diese Funktion liefert einen Pointer auf den nächsten Chunk in der Datei zurück.

Rückgabe
Pointer auf den nächsten Chunk oder NULL, wenn es keine weiteren Chunks gibt.
Siehe auch
  • PFPFile::FindFirstChunk
  • PFPFile::FindNextChunk
  • PFPFile::Reset
  • PFPFile::GetFirst
  • PFPFile::GetNext
Seit
Version 6.1.0
int ppl7::PFPFile::getSubVersion ( ) const

Mit dieser Funktion wird die Unterversion der Datei ausgelesen.

Rückgabe
Unterversion als Interger
Seit
Version 6.1.0
void ppl7::PFPFile::getVersion ( int *  main,
int *  sub 
) const

Mit dieser Funktion wird die Version der Datei in die beiden Parameter kopiert

Parameter
[out]mainPointer auf eine Integer-Variable, in der die Hauptversion geschrieben werden soll
[out]subPointer auf eine Integer-Variable, in der die Unterversion geschrieben werden soll
Seit
Version 6.1.0
bool ppl7::PFPFile::ident ( FileObject ff)
Beschreibung:
Diese Funktion prüft, ob es sich bei der geöffneten Datei ff um eine Datei im Format PFP-Files Version 3 PFP-Format Version 3 handelt. Ist dies der Fall, wird deren ID und Version eingelesen.
Parameter
ffReferenz auf eine geöffnete Datei
Rückgabe
Gibt true zurück, wenn es sich um eine Datei im PFP-Format handelt. Deren ID kann anschließend mit PFPFile::getID ausgelesen werden, Version mit PFPFile::getVersion bzw. PFPFile::getMainVersion und PFPFile::getSubVersion. Handelt es sich nicht um eine Datei im PFP-Format, gibt die Funktion false zurück. Es wird keine Exception geworfen.
bool ppl7::PFPFile::ident ( const String file)
Beschreibung:
Diese Funktion prüft, ob es sich bei der Datei mit dem Namen file um eine Datei im Format PFP-Files Version 3 PFP-Format Version 3 handelt. Ist dies der Fall, wird deren ID und Version eingelesen.
Parameter
fileDateiname
Rückgabe
Gibt true zurück, wenn es sich um eine Datei im PFP-Format handelt. Deren ID kann anschließend mit PFPFile::getID ausgelesen werden, Version mit PFPFile::getVersion bzw. PFPFile::getMainVersion und PFPFile::getSubVersion. Handelt es sich nicht um eine Datei im PFP-Format, gibt die Funktion false zurück. Es wird keine Exception geworfen.
void ppl7::PFPFile::list ( ) const
virtual

Diese Funktion listet die Namen und Größen aller Chunks auf STDOUT aus.

Seit
Version 6.1.0
void ppl7::PFPFile::load ( FileObject ff)

Mit dieser Funktion wird ein PFP-File in die Klasse geladen. Dabei wird zuerst der Header geladen und überprüft, ob es sich um ein gültiges PFP-File handelt. Dann wird die virtuelle Funktion PFPFile::LoadRequest mit ID, Haupt- und Unterversion als Parameter aufgerufen. Liefert diese nicht true (1) zurück, wird der Ladevorgang abgebrochen. Andernfalls wird fortgeführt und geprüft, ob der Datenbereich komprimiert ist und gegebenenfalls dekomprimiert. Erst danach werden die einzelnen Chunks eingelesen. Kommt es dabei zu Fehlern durch ungültige Chunks, werden diese ignoriert und die Funktion gibt den Fehlercode 434 zurück.

Parameter
ffPointer auf eine CFile-Klasse, mit der die einzulesende Datei geöffnet wurde.
Rückgabe
Konnte die Datei fehlerfrei eingelesen werden, gibt die Funktion true (1) zurück, im Fehlerfall false (0). Ein entsprechender Fehlercode wird gesetzt.
Bemerkungen
Vor dem Laden der Datei wird die Funktion PFPFile::Clear aufgerufen, so dass eventuell vorher vorhandene Daten verloren gehen.
Seit
Version 6.1.0
void ppl7::PFPFile::load ( const String file)

Mit dieser Funktion wird ein PFP-File in die Klasse geladen. Dabei wird zuerst der Header geladen und überprüft, ob es sich um ein gültiges PFP-File handelt. Anschließend wird geprüft, ob der Datenbereich komprimiert ist und gegebenenfalls dekomprimiert. Erst danach werden die einzelnen Chunks eingelesen. Kommt es dabei zu Fehlern durch ungültige Chunks, werden diese ignoriert und die Funktion gibt den Fehlercode 434 zurück.

Parameter
filePointer auf den Namen der Datei, die geladen werden soll.
Rückgabe
Konnte die Datei fehlerfrei eingelesen werden, gibt die Funktion true (1) zurück, im Fehlerfall false (0). Ein entsprechender Fehlercode wird gesetzt.
Bemerkungen
Vor dem Laden der Datei wird die Funktion PFPFile::Clear aufgerufen, so dass eventuell vorher vorhandene Daten verloren gehen.
Seit
Version 6.1.0
int ppl7::PFPFile::loadRequest ( const String id,
int  mainversion,
int  subversion 
)
virtual

Diese Funktion wird bei jedem Ladevorgang aufgerufen. Falls die Anwendung eine Klasse definiert hat, die von PFPFile abgeleitet ist, kann sie an dieser Stelle den Ladevorgang abbrechen, wenn die Datei nicht dem unterstützten Format entspricht.

Parameter
idPointer auf die 4-Byte-ID des PFP-Files
mainversionDie Hauptversion der Datei
subversionDie Unterversion der Datei
Rückgabe
Die Funktion muss true (1) zurückliefern, wenn der Ladevorgang fortgesetzt werden darf, oder false (0), wenn er abgebrochen werden soll. Optional kann auch ein Fehlercode gesetzt werden. Wird dies nicht gemacht, setzt die Ladefunktion den Fehlercode 435.
void ppl7::PFPFile::reset ( Iterator it) const

Mit dieser Funktion wird der Zeiger, der beim Durchwandern der Chunks mit den Funktionen FindNextChunk und GetNext verwendet wird, wieder auf den Anfang gesetzt.

Siehe auch
  • PFPFile::FindFirstChunk
  • PFPFile::FindNextChunk
  • PFPFile::Reset
  • PFPFile::GetFirst
  • PFPFile::GetNext
Seit
Version 6.1.0
void ppl7::PFPFile::save ( const String filename)

Mit dieser Funktion wird der Inhalt der PFPFile-Klasse in eine Datei geschrieben. Dabei wird der Header und sämtliche Chunks zusammengefasst, gegebenenfalls komprimiert (siehe PFPFile::SetCompression) und im Filesystem gespeichert. Der genaue Aufbau der Datei wird weiter unten beschrieben.

Parameter
filenameDie Funktion bekommt als einzigen Parameter einen Pointer auf den Dateinamen. Es ist zu beachten, dass eine eventuell vorhandene gleichnamige Datei überschrieben wird.
Ausnahmebehandlung
EmptyFileExceptionDas File enthält keine Chunks, es gibt nichts zu speichern
Bemerkungen
Die Funktion stellt sicher, dass die Chunks in einer bestimmten Reihenfolge geschrieben werden. Die vordefinierten Chunks mit Name, Author, Copyright und Beschreibung werden in jedem Fall zuerst gespeichert, dann die restlichen Chunks.
Aufbau der PFP-Datei

Ein PFP-File in der Version 3 ist in mehrere aufeinanderfolgende Abschnitte aufgeteilt:

  • 24 Byte langer Header
  • optionaler 8-Byte langer Komprimierungsheader
  • Chunks

Alle 4-Byte Größenangaben sind im LittleEndian-Format!

Header

Der Header einer Version 3 Datei sieht so aus:

Byte 0: String "PFP-File" 8 Bytes
Byte 8: PFP-File-Version (3) 1 Byte
Byte 9: Länge des PFP-Header (24) 1 Byte
Byte 10: File-ID, 4 Byte-String 4 Byte
Byte 14: Unterversion 1 Byte
Byte 15: Hauptversion 1 Byte
Byte 16: Komprimierung 1 Byte
0=unkomprimiert
1=Zlib
2=Bzip2
Byte 17: reserviert 3 Byte
Byte 20: Timestamp der Erstellung (UTC) 4 Byte

Im Anschluss an den Header folgen die Nutzdaten. Sofern keine Komprimierung verwendet wurde, geht es sofort mit dem ersten Chunk los. Ist die Datei komprimiert folgt erst der Komprimierungsheader:

Komprimierungsheader
Byte 0: Größe der Nutzdaten unkomprimiert in Byte 4 Byte
Byte 4: Größe der Nutzdaten komprimiert in Byte 4 Byte
Chunks

In einem PFP-File können beliebig viele Chunks vorkommen. Ein Chunk besteht immer aus einem 4-Byte langen Namen, gefolgt von einem 4-Byte Integer, der die Größe des Chunks einschließlich des Headers angibt, gefolgt von den Nutzdaten. Abgesehen von den unten aufgeführten vordefinierten Chunks, können beliebig viele Chunks mit gleichem Namen vorhanden sein.

Ein Chunk muss nicht zwingend Nutzdaten enthalten.

Byte 0: Chunkname, 4 Byte-String in Grossbuchstaben 4 Byte
Byte 4: Größe des Chunks einschließlich 8-Byte Header 4 Byte
Byte 8: Nutzdaten des Chunks
Vordefinierte Chunks

Die nachfolgenden Chunks sind vordefiniert, aber optional

  • Author

    Byte 0: AUTH
    Byte 4: Länge des nachfolgenden Strings
    Byte 8: Name des Authors mit schließendem 0-Byte

    Der Name des Authors kann mit der Funktion PFPFile::SetAuthor gesetzt werden.

  • Name

    Byte 0: NAME
    Byte 4: Länge des nachfolgenden Strings
    Byte 8: Name der Datei oder Beschreibung des Inhalts mit schließendem 0-Byte

    Der Name des Files kann mit der Funktion PFPFile::SetName gesetzt werden.

  • Description

    Byte 0: DESC
    Byte 4: Länge des nachfolgenden Strings
    Byte 8: Nähere Beschreibung mit schließendem 0-Byte

    Die Description kann mit der Funktion PFPFile::SetDescription gesetzt werden.

  • Copyright

    Byte 0: COPY
    Byte 4: Länge des nachfolgenden Strings
    Byte 8: Copyright-String mit schließendem 0-Byte

    Der Copyright-String kann mit der Funktion PFPFile::SetCopyright gesetzt werden.

End of File

Dieser Chunk ist immer der letzte in der Datei und kennzeichnet das Ende der Nutzdaten.

Byte 0: ENDF
Byte 4: 0
Nutzung
Um das Lesen und Schreiben solcher Dateien zu vereinfachen, kann die Klasse PFPFile in Kombination mit PFPChunk verwendet werden.
Seit
Version 6.1.0
void ppl7::PFPFile::saveChunk ( char *  buffer,
size_t &  pp,
PFPChunk chunk 
)
private
void ppl7::PFPFile::setAuthor ( const String author)

Mit dieser Funktion wird automatisch ein Author-Chunk ("AUTH") angelegt. Dabei ist sichergestellt, dass der Chunk nur ein einziges mal in der Datei vorkommt.

Parameter
authorPointer auf einen Null-terminierten String mit dem Namen des Authors
Siehe auch
  • PFPFile::SetAuthor
  • PFPFile::SetCopyright
  • PFPFile::SetDescription
  • PFPFile::SetName
void ppl7::PFPFile::setCompression ( Compression::Algorithm  type)
Beschreibung:
Mit dieser Funktion wird festgelegt ob und welche Kompression beim Speichern verwendet werden soll.
Parameter
typeEin Wert, der die Art der Kompression angibt. Mögliche Werte sind:
  • CCompression::Algo_NONE - Keine Komprimierung
  • CCompression::Algo_ZLIB - Komprimierung mit Zlib
  • CCompression::Algo_BZIP2 - Komprimierung mit Bzip2
Ausnahmebehandlung
UnknownCompressionMethodExceptionWird geworfen, wenn type einen ungültigen Wert enthält.
void ppl7::PFPFile::setCopyright ( const String copy)

Mit dieser Funktion wird automatisch ein Copyright-Chunk ("COPY") angelegt. Dabei ist sichergestellt, dass der Chunk nur ein einziges mal in der Datei vorkommt.

Parameter
copyPointer auf einen Null-terminierten String mit dem Copyright-Text
Siehe auch
  • PFPFile::SetAuthor
  • PFPFile::SetCopyright
  • PFPFile::SetDescription
  • PFPFile::SetName
void ppl7::PFPFile::setDescription ( const String descr)

Mit dieser Funktion wird automatisch ein Description-Chunk ("DESC") angelegt. Dabei ist sichergestellt, dass der Chunk nur ein einziges mal in der Datei vorkommt.

Parameter
descrPointer auf einen Null-terminierten String mit der Beschreibung
Siehe auch
  • PFPFile::SetAuthor
  • PFPFile::SetCopyright
  • PFPFile::SetDescription
  • PFPFile::SetName
void ppl7::PFPFile::setId ( const String id)

Mit dieser Version wird die ID des PFP-Files festgelegt. Eine ID muss zwingend 4 Byte lang sein und darf nur US-ASCII-Zeichen enthalten.

Parameter
idPointer auf einen 4-Byte langen String, der mit 0 terminiert ist.
Ausnahmebehandlung
IllegalArgumentExceptionWird geworfen, wenn die id einen ungültigen Wert enthält
Seit
Version 6.1.0
void ppl7::PFPFile::setName ( const String name)
Beschreibung:
Mit dieser Funktion wird automatisch ein Namens-Chunk ("NAME") angelegt. Dabei ist sichergestellt, dass der Chunk nur ein einziges mal in der Datei vorkommt.
Parameter
namePointer auf einen Null-terminierten String mit dem Namen des Files
Siehe auch
  • PFPFile::SetAuthor
  • PFPFile::SetCopyright
  • PFPFile::SetDescription
  • PFPFile::SetName
void ppl7::PFPFile::setParam ( const String chunkname,
const String data 
)
private
Beschreibung:
Diese Funktion wird intern verwendet, um die vordefinierten Text-Chunks zu speichern. Sie stellt sicher, dass jeder Chunk nur einmal vorkommt.
Parameter
chunknamePointer auf den Namen des Chunks.
dataPointer auf den zu setzenden Text-String
Rückgabe
Bei Erfolg gibt die Funktion true (1) zurück, sonst false (0).
Siehe auch
Die Funktion wird intern von folgenden Funktionen aufgerufen:
  • PFPFile::SetName
  • PFPFile::SetAuthor
  • PFPFile::SetDescription
  • PFPFile::SetCopyright
Seit
Version 6.1.0
void ppl7::PFPFile::setVersion ( int  main = 0,
int  sub = 0 
)
Beschreibung:
Mit dieser Funktion wird die Version des PFP-Files gesetzt.
Parameter
mainHauptversion, Wert zwischen 0 und 255
subUnterversion, Wert zwischen 0 und 255
Ausnahmebehandlung
IllegalArgumentExceptionWird geworfen, wenn main oder sub ausserhalb des gültigen Bereichs liegen.
Bemerkungen
Haupt- und Unterversion werden jeweils in einem einzelnen Byte gespeichert. Daher darf die Version nicht größer als 255 werden.

Dokumentation der Datenelemente

ppl7::PFPFile::Chunks
private
Seit
Version 6.1.0
ppl7::PFPFile::comp
private

In dieser Variable wird die Art der Komprimierung gespeichert:

  • 0 = keine Komprimierung
  • 1 = Zlib
  • 2 = Bzip2
Seit
Version 6.1.0
ppl7::PFPFile::id
private
Seit
Version 6.1.0
ppl7::PFPFile::mainversion
private
Seit
Version 6.1.0
Mutex ppl7::PFPFile::myMutex
ppl7::PFPFile::subversion
private
Seit
Version 6.1.0

Die Dokumentation für diese Klasse wurde erzeugt aufgrund der Dateien: