PPL6-Icon Patrick's Programming Library Version 6.4.21 - Dokumentation
ppl6::CCompression Klassenreferenz

Komprimierung und Dekomprimierung von Daten. Mehr ...

Öffentliche Typen

enum  Algorithm { Algo_NONE =0, Algo_ZLIB, Algo_BZIP2, Unknown =256 }
 Unterstütze Komprimierungsmethoden. Mehr ...
 
enum  Level { Level_Fast =0, Level_Normal, Level_Default, Level_High }
 Kompressionsrate. Mehr ...
 
enum  Prefix { Prefix_None =0, Prefix_V1, Prefix_V2 }
 Prefix voranstellen. Mehr ...
 

Öffentliche Methoden

 CCompression ()
 Konstruktor der Klasse. Mehr ...
 
 CCompression (Algorithm method, Level level)
 Konstruktor mit Initialisierung der Komprimierungsmethode. Mehr ...
 
 ~CCompression ()
 Destruktor der Klasse. Mehr ...
 
int Compress (CBinary &out, const void *ptr, size_t size, bool copy=true)
 Komprimierung eines Speicherbereiches in ein CBinary Objekt. Mehr ...
 
int Compress (CBinary &out, const CVar &object, bool copy=true)
 Komprimierung eines von CVar abgeleiteten Objektes in ein CBinary Objekt. Mehr ...
 
int Compress (CMemory &out, const CMemoryReference &in)
 Komprimierung eines Speicherbereichs in ein CMemory-Objekt. Mehr ...
 
int Compress (void *dst, size_t *dstlen, const void *src, size_t size)
 Komprimierung eines Speicherbereiches in einen anderen. Mehr ...
 
int Init (Algorithm method, Level level)
 Gewünschte Komprimierungsmethode einstellen. Mehr ...
 
int Uncompress (CBinary &out, const CBinary &data, bool copy=true)
 Dekomprimierung eines CBinary Objektes. Mehr ...
 
int Uncompress (CMemory &out, const CMemoryReference &in)
 Dekomprimierung eines Speicherbereichs in ein CMemory-Objekt. Mehr ...
 
int Uncompress (CBinary &out, const void *data, size_t size=0, bool copy=true)
 Dekomprimierung eines Speicherbereichs in ein CBinary Objekt. Mehr ...
 
int Uncompress (void *dst, size_t *dstlen, const void *src, size_t srclen, Algorithm method=Unknown)
 Dekomprimierung eines Speicherbereiches in einen anderen. Mehr ...
 
void UsePrefix (Prefix prefix)
 Verwendung eines Prefix beim Komprimieren. Mehr ...
 

Private Methoden

int DoBzip2 (void *dst, size_t *dstlen, const void *src, size_t size)
 Bzip2-Komprimierung verwenden. Mehr ...
 
int DoNone (void *dst, size_t *dstlen, const void *src, size_t size)
 Keine Komprimierung verwenden. Mehr ...
 
int DoZlib (void *dst, size_t *dstlen, const void *src, size_t size)
 Zlib-Komprimierung verwenden. Mehr ...
 
int UnBzip2 (void *dst, size_t *dstlen, const void *src, size_t srclen)
 Bzip2-Komprimierte Daten entpacken. Mehr ...
 
int UnNone (void *dst, size_t *dstlen, const void *src, size_t srclen)
 Speicherbereich ohne Dekompression kopieren. Mehr ...
 
int UnZlib (void *dst, size_t *dstlen, const void *src, size_t srclen)
 Zlib-Komprimierte Daten entpacken. Mehr ...
 

Private Attribute

Algorithm aaa
 Enthält die durch Init oder den Konstruktor eingestellten Kompressionsmethode. Mehr ...
 
void * buffer
 Interner Speicher, der nach Aufruf von Compress die komprimierten Daten enthält. Mehr ...
 
Level lll
 Enthält den durch Init oder den Konstruktor eingestellten Komprimierungslevel. Mehr ...
 
Prefix prefix
 Flag, ob und welcher Prefix beim Komprimieren vorangestellt wird. Mehr ...
 
void * uncbuffer
 Interner Speicher, der nach Aufruf von Uncompress die entpackten Daten enthält. Mehr ...
 

Verwandte Funktionen

(Es handelt sich hierbei nicht um Elementfunktionen.)

int Compress (CBinary &out, const CVar &in, CCompression::Algorithm method, CCompression::Level level)
 Daten komprimieren. Mehr ...
 
int Compress (CBinary &out, const void *buffer, size_t size, CCompression::Algorithm method, CCompression::Level level)
 Daten komprimieren. Mehr ...
 
int CompressBZip2 (CBinary &out, const CVar &in, CCompression::Level level)
 Daten mit BZip2 komprimieren. Mehr ...
 
int CompressBZip2 (CBinary &out, const void *buffer, size_t size, CCompression::Level level)
 Daten mit BZip2 komprimieren. Mehr ...
 
int CompressBZip2 (CMemory &out, const CMemoryReference &in, CCompression::Level level)
 Daten mit BZip2 komprimieren. Mehr ...
 
int CompressZlib (CBinary &out, const CVar &in, CCompression::Level level)
 Daten mit ZLib komprimieren. Mehr ...
 
int CompressZlib (CMemory &out, const CMemoryReference &in, CCompression::Level level)
 Daten mit ZLib komprimieren. Mehr ...
 
int CompressZlib (CBinary &out, const void *buffer, size_t size, CCompression::Level level)
 Daten mit ZLib komprimieren. Mehr ...
 
int Uncompress (CBinary &out, const CBinary &in)
 Daten dekomprimieren. Mehr ...
 
int Uncompress (CMemory &out, const CMemoryReference &in)
 Daten dekomprimieren. Mehr ...
 
int Uncompress (CBinary &out, const void *buffer, size_t size)
 Daten dekomprimieren. Mehr ...
 

Ausführliche Beschreibung

Beschreibung:
Mit dieser Klasse können Daten komprimiert und dekomprimiert werden. Zur Zeit werden zwei verschiedene Komprimierungsmethoden unterstüzt:
Um die gewünschte Methode auszuwählen, muss diese entweder im Konstruktor übergeben werden, oder durch Aufruf von CCompression::Init, was den Vorteil hat, das man hier auch gleich einen Fehlercode gemeldet bekommt, wenn die gewünschte Methode nicht einkompiliert ist.
Anschließend können durch Aufrufe von Compress und Uncompress Daten komprimiert bzw. entpackt werden.
Beispiel:
int main (int argc, char **argv)
{
ppl6::CBinary uncompressed; // Wir verwenden einfach die Quelldatei des
if (!uncompressed.Load("main.cpp")) { // Beispiels zum Komprimieren
return 0;
}
printf ("Größe der Datei unkomprimiert: %u Bytes\n",uncompressed.Size());
// Komprimierungsmethode und Level auswählen
return 0;
}
// Die komprimierten Daten speichern wir in einem CBinary Objekt
ppl6::CBinary compressed;
if (!comp.Compress(compressed,data,false)) {
return 0;
}
printf ("Größe der Datei komprimiert ohne Prefix: %u Bytes\n",compressed.Size());
// Jetzt wieder dekomprimieren
ppl6::CBinary recovered;
if (!comp.Uncompress(recovered,compressed,false)) {
return 0;
}
printf ("Größe nach Dekomprimierung: %u Bytes, MD5: %s\n",recovered.Size(),(char*)chk2);
return 1;
}

Komprimierungsprefix

Über die Funktion CCompression::UsePrefix kann eingestellt werden, ob bei der Komprimierung noch ein Header vorangestellt werden soll oder nicht. Der Header hat den Vorteil, dass man ihm die Komprimierungs- Methode und die Länge der ursprünglichen unkomprimierten Daten entnehmen kann. Nicht alle Variationen von Compress und Uncompress unterstützen den Prefix, daher ist bei der jeweiligen Funktion vermerkt, ob der Prefix beachtet wird oder nicht.

Es gibt zwei Versionen des Headers:

Version 1 Prefix
Bei Version 1 gibt es einen 9-Byte großen Header mit folgendem Aufbau:
Byte 0: Kompressions-Flag (siehe oben)
        Bits 0-2: Kompressionsart
                  0=keine
                  1=Zlib
                  2=Bzip2
        Bits 3-7: unbenutzt, müssen 0 sein
Byte 1: Bytes Unkomprimiert (4 Byte)
Byte 5: Bytes Komprimiert (4 Byte)

Der erste Wert gibt an, wieviele Bytes der Datenblock unkomprimiert benötigt, der zweite gibt an, wie gross er komprimiert ist. Nach dem Header folgen dann soviele Bytes, wie in "Bytes Komprimiert" angegeben ist.

Version 2 Prefix
Die Länge des Version 2 Headers ist variabel. Er beginnt wieder mit dem Kompressionsflag, diesmal ist jedoch Bit 3 gesetzt und die Bits 4-7 werden ebenfalls verwendet:
Byte 0: Kompression-Flag
        Bits 0-2: Kompressionsart
                  0=keine
                  1=Zlib
                  2=Bzip2
        Bit 3:    Headerversion
        Bits 4-5: Bytezahl Uncompressed Value
                  0=1 Byte, 1=2 Byte, 2=3 Byte, 3=4 Byte
        Bits 6-7: Bytezahl Compressed Value
                  0=1 Byte, 1=2 Byte, 2=3 Byte, 3=4 Byte
Byte 1: Bytes Unkomprimiert (1-4 Byte)
Byte n: Bytes Komprimiert (1-4 Byte)

Bei Version 2 folgen eine variable Anzahl von Bytes für die beiden Werte "Bytes Unkomprimiert" und "Bytes Komprimiert". Wieviele Bytes das sind, ist jeweils den Bits 4-5 und 6-7 des Kompressions-Flags zu entnehmen. Bei kleinen Datenblöcken, die unkomprimiert weniger als 255 Bytes benötigen, schrumpft der Prefix somit von 9 auf 3 Byte im Vergleich zum Version 1 Prefix.

Dokumentation der Aufzählungstypen

Die Klasse unterstützt folgende Komprimierungsmethoden:

Aufzählungswerte
Algo_NONE 

Keine Komprimierung. Bei Verwendung dieser Methode werden die Daten einfach nur unverändert kopiert.

Algo_ZLIB 

Zlib ist eine freie Programmbibliothek von Jean-Loup Gailly und Mark Adler (http://www.zlib.net/). Sie verwendet wie gzip den Deflate-Algorithmus um den Datenstrom blockweise zu komprimieren. Die ausgegebenen Blöcke werden durch Adler-32-Prüfsummen geschützt. Das Format ist in den RFC 1950, RFC 1951 und RFC 1952 definiert und gilt quasi als defakto Standard im Unix- und Netzwerkbereich.

Algo_BZIP2 

bzip2 ist ein frei verfügbares Komprimierungsprogramm zur verlustfreien Kompression von Dateien, entwickelt von Julian Seward. Es ist frei von jeglichen patentierten Algorithmen und wird unter einer BSD-ähnlichen Lizenz vertrieben. Die Kompression mit bzip2 ist oft effizienter, aber meist erheblich langsamer als die Kompression mit Zlib.

Unknown 

Wird als Defaulteinstellung beim Dekomprimieren verwendet und hat keine eigentliche Funktion.

Es werden verschiedene Einstellungen unterstützt, die Einfluß auf die Kompressionsrate aber auch Speicherverbrauch und Geschwindigkeit haben:

Aufzählungswerte
Level_Fast 

Niedrige Kompressionsrate, dafür aber in der Regel sehr schnell

Level_Normal 

Ausgewogene Kompressionsrate und Geschwidigkeit.

Level_Default 

Ausgewogene Kompressionsrate und Geschwidigkeit.

Level_High 

Hohe Kompressionsrate, dafür aber auch langsamer als die anderen Einstellungen

Verwendung eines Prefix, der den komprimierten Daten vorangestellt wird. Siehe dazu auch Komprimierungsprefix

Aufzählungswerte
Prefix_None 

Es wird kein Prefix vorangestellt. Die Anwendung muß sich selbst darum kümmern, dass die Information über Größe der komprimierten und unkomprimierten Daten erhalten bleibt.

Prefix_V1 

Es wird ein 9-Byte langer Version 1 Prefix vorangestellt.

Prefix_V2 

Es wird ein Version 2 Prefix mit variabler Länge vorangestellt.

Beschreibung der Konstruktoren und Destruktoren

ppl6::CCompression::CCompression ( )
Beschreibung:
Der parameterlose Konstruktor initialisiert die Klasse mit dem Zlib-Algorithmus und dem Default-Level für die Komprimierungsrate.
ppl6::CCompression::CCompression ( Algorithm  method,
Level  level 
)
Beschreibung:
Mit diesem Konstruktor kann gleichzeitig bestimmt werden, welche Komprimierungsmethode verwendet werden soll, und wie stark die Komprimierung sein soll. Hier gilt: je höher die Komprimierung, desto langsamer.
Parameter
methodKomprimierungsmethode (siehe CCompression::Algorithm)
levelKomprimierungslevel (siehe CCompression::Level)
ppl6::CCompression::~CCompression ( )
Beschreibung:
Der Destruktor sorgt dafür, dass intern allokierter Speicher freigegeben wird. Falls Ergebnisse aus Compress oder Uncompress Aufrufen in einem CBinary-Objekt gespeichert wurden, ohne "copy"-Flag, so ist der darin enthaltene Speicher ebenfalls ungültig und darf nicht mehr verwendet werden.

Dokumentation der Elementfunktionen

int ppl6::CCompression::Compress ( CBinary out,
const void *  ptr,
size_t  size,
bool  copy = true 
)
Beschreibung:
Mit dieser Version der Compress-Funktion wird ein Speicherbereich ptr mit einer Länge von size Bytes komprimiert und das Ergebnis im CBinary-Objekt out gespeichert. Der optionale Parameter copy bestimmt, ob in CBinary eine Kopie der komprimierten Daten abgelegt wird oder nur ein Pointer auf den internen Buffer der CCompression-Klasse.
Diese Funktion unterstützt das Prefix-Flag (siehe CCompression::UsePrefix).
Parameter
[out]outCBinary-Objekt, in dem die komprimierten Daten gespeichert werden sollen
[in]ptrPointer auf den Speicherbereich, den komprimiert werden soll
[in]sizeLänge des zu komprimierenden Speicherbereichs
[in]copyZeigt an, ob die komprimierten Daten in das CBinary-Objekt out kopiert (=true) werden sollen oder darin nur eine Referenz auf den Buffer der CCompression-Klasse abgelegt wird (=false). Letzters ist schneller und spart Speicher, es muss jedoch darauf geachtet werden, dass mit der Instanz von CCompression keine weiteren Aktionen ausgeführt werden und sich auch nicht gelöscht wird, solange das out noch verwendet wird!
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück, im Fehlerfall 0. Die Länge der komprimierten Daten kann out entnommen werden.
int ppl6::CCompression::Compress ( CBinary out,
const CVar object,
bool  copy = true 
)
Beschreibung:
Mit dieser Version der Compress-Funktion wird Speicher des Objektes object komprimiert und das Ergebnis im CBinary-Objekt out gespeichert. Der optionale Parameter copy bestimmt, ob in CBinary eine Kopie der komprimierten Daten abgelegt wird oder nur ein Pointer auf den internen Buffer der CCompression-Klasse. object kann ein CString, CWString oder CBinary sein.
Diese Funktion unterstützt das Prefix-Flag (siehe CCompression::UsePrefix).
Parameter
[out]outCBinary-Objekt, in dem die komprimierten Daten gespeichert werden sollen
[in]objectEin von CVar abgeleitetes Objekt mit den zu komprimierenden Daten. Zur Zeit werden folgende Datentypen unterstützt: CString, CWString, CBinary
[in]copyZeigt an, ob die komprimierten Daten in das CBinary-Objekt out kopiert (=true) werden sollen oder darin nur eine Referenz auf den Buffer der CCompression-Klasse abgelegt wird (=false). Letzters ist schneller und spart Speicher, es muss jedoch darauf geachtet werden, dass mit der Instanz von CCompression keine weiteren Aktionen ausgeführt werden und sich auch nicht gelöscht wird, solange das out noch verwendet wird!
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück, im Fehlerfall 0. Die Länge der komprimierten Daten kann out entnommen werden.
int ppl6::CCompression::Compress ( CMemory out,
const CMemoryReference in 
)
Beschreibung:
Mit dieser Version der Compress-Funktion wird der durch in referenzierte Speicher komprimiert und das Ergebnis in out gespeichert.
Diese Funktion unterstützt das Prefix-Flag (siehe CCompression::UsePrefix).
Parameter
[out]outCMemory-Objekt, in dem die komprimierten Daten gespeichert werden sollen
[in]inEin von CMemoryReferemce abgeleitetes Objekt, das den zu komprimierenden Speicherbereich repräsentiert.
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück, im Fehlerfall 0. Die Länge der komprimierten Daten kann out entnommen werden.
int ppl6::CCompression::Compress ( void *  dst,
size_t *  dstlen,
const void *  src,
size_t  srclen 
)
Beschreibung:
Mit dieser Version der Compress-Funktion wird ein Speicherbereich src mit einer Länge von srclen Bytes komprimiert und das Ergebnis mit einer maximalen Länge von dstlen Bytes ab der Speicherposition dst gespeichert. Der Zielspeicher dst muss vorab allokiert worden sein und groß genug sein, um die komprimierten Daten aufzunehmen. Wieviel Bytes tatsächlich verbraucht wurden, ist nach erfolgreichem Aufruf der Variablen dstlen zu entnehmen.
Diese Funktion führt nur die reine Komprimierung durch und unterstützt keinen Prefix.
Parameter
[in,out]dstPointer auf den Speicherbereich, in dem die komprimierten Daten abgelegt werden sollen
[in,out]dstlenPointer auf eine Variable, die bei Aufruf die Größe des Zielspeicherbereichs dst enthält und nach erfolgreichem Aufruf Anzahl tatsächlich benötigter Bytes
[in]srcPointer auf den Speicherbereich, den komprimiert werden soll
[in]srclenLänge des zu komprimierenden Speicherbereichs
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück und die tatsächlich benötigten Bytes können der Variablen dstlen entnommen werden. Im Fehlerfall gibt die Funktion 0 zurück.
Zu beachten
Die Funktion prüft lediglich welche Komprimierungsmethode eingestellt wurde und ruft dann eine der privaten Funktionen CCompression::DoNone, CCompression::DoZlib oder CCompression::DoBzip2 auf.
int ppl6::CCompression::DoBzip2 ( void *  dst,
size_t *  dstlen,
const void *  src,
size_t  size 
)
private
Beschreibung:
Mit dieser internen Funktion werden die Quelldaten aus src mit BZip2 komprimiert und in dst abgelegt.
Parameter
[in,out]dstPointer auf den Speicherbereich, in dem die komprimierten Daten abgelegt werden sollen
[in,out]dstlenPointer auf eine Variable, die bei Aufruf die Größe des Zielspeicherbereichs dst enthält und nach erfolgreichem Aufruf Anzahl tatsächlich benötigter Bytes
[in]srcPointer auf den Speicherbereich, den komprimiert werden soll
[in]sizeLänge des zu komprimierenden Speicherbereichs
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück und die tatsächlich benötigten Bytes können der Variablen dstlen entnommen werden. Im Fehlerfall gibt die Funktion 0 zurück.
int ppl6::CCompression::DoNone ( void *  dst,
size_t *  dstlen,
const void *  src,
size_t  size 
)
private
Beschreibung:
Diese interne Funktion wird aufgerufen, wenn die Daten garnicht komprimiert werden sollen. Sie ruft daher nun memcpy auf, um die Quelldaten von src nach dst zu kopieren.
Parameter
[in,out]dstPointer auf den Speicherbereich, in dem die komprimierten Daten abgelegt werden sollen
[in,out]dstlenPointer auf eine Variable, die bei Aufruf die Größe des Zielspeicherbereichs dst enthält und nach erfolgreichem Aufruf Anzahl tatsächlich benötigter Bytes
[in]srcPointer auf den Speicherbereich, den komprimiert werden soll
[in]sizeLänge des zu komprimierenden Speicherbereichs
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück und die tatsächlich benötigten Bytes können der Variablen dstlen entnommen werden. Im Fehlerfall gibt die Funktion 0 zurück.
int ppl6::CCompression::DoZlib ( void *  dst,
size_t *  dstlen,
const void *  src,
size_t  size 
)
private
Beschreibung:
Mit dieser internen Funktion werden die Quelldaten aus src mit Zlib komprimiert und in dst abgelegt.
Parameter
[in,out]dstPointer auf den Speicherbereich, in dem die komprimierten Daten abgelegt werden sollen
[in,out]dstlenPointer auf eine Variable, die bei Aufruf die Größe des Zielspeicherbereichs dst enthält und nach erfolgreichem Aufruf Anzahl tatsächlich benötigter Bytes
[in]srcPointer auf den Speicherbereich, den komprimiert werden soll
[in]sizeLänge des zu komprimierenden Speicherbereichs
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück und die tatsächlich benötigten Bytes können der Variablen dstlen entnommen werden. Im Fehlerfall gibt die Funktion 0 zurück.
int ppl6::CCompression::Init ( Algorithm  method,
Level  level 
)
Beschreibung:
Mit dieser Funktion wird eingestellt, welche Komprimierungsmethode verwendet werden soll, und wie stark die Komprimierung sein soll. Hier gilt: je höher die Komprimierung, desto langsamer.
Parameter
methodKomprimierungsmethode (siehe CCompression::Algorithm)
levelKomprimierungslevel (siehe CCompression::Level)
Rückgabe
Bei Erfolg liefert die Funktion 1 zurück, im Fehlerfall 0
int ppl6::CCompression::UnBzip2 ( void *  dst,
size_t *  dstlen,
const void *  src,
size_t  srclen 
)
private
Beschreibung:
Diese interne Funktion wird aufgerufen, wenn die zu dekomprimierenden Daten mit Bzip2 komprimiert sind.
Parameter
[in,out]dstPointer auf den Speicherbereich, in dem die dekomprimierten Daten abgelegt werden sollen
[in,out]dstlenPointer auf eine Variable, die bei Aufruf die Größe des Zielspeicherbereichs dst enthält und nach erfolgreichem Aufruf Anzahl tatsächlich benötigter Bytes
[in]srcPointer auf den Anfang des Speicherbereichs, der die komprimierten Daten enthält
[in]srclenLänge der komprimierten Daten
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück und die tatsächlich benötigten Bytes können der Variablen dstlen entnommen werden. Im Fehlerfall gibt die Funktion 0 zurück.
int ppl6::CCompression::Uncompress ( CBinary out,
const CBinary object,
bool  copy = true 
)
Beschreibung:
Mit dieser Version der Compress-Funktion wird Speicher des Objektes object entpackt und das Ergebnis im CBinary-Objekt out gespeichert. Der optionale Parameter copy bestimmt, ob in CBinary eine Kopie der komprimierten Daten abgelegt wird oder nur ein Pointer auf den internen Buffer der CCompression-Klasse.
Diese Funktion unterstützt das Prefix-Flag (siehe CCompression::UsePrefix).
Parameter
[out]outCBinary-Objekt, in dem die entpackten Daten gespeichert werden sollen
[in]objectCBinary-Objekt, das die komprimierten Daten enthält.
[in]copyZeigt an, ob die komprimierten Daten in das CBinary-Objekt out kopiert (=true) werden sollen oder darin nur eine Referenz auf den Buffer der CCompression-Klasse abgelegt wird (=false). Letzters ist schneller und spart Speicher, es muss jedoch darauf geachtet werden, dass mit der Instanz von CCompression keine weiteren Aktionen ausgeführt werden und sich auch nicht gelöscht wird, solange das out noch verwendet wird!
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück, im Fehlerfall 0. Die Länge der unkomprimierten Daten kann out entnommen werden.
int ppl6::CCompression::Uncompress ( CMemory out,
const CMemoryReference in 
)
Beschreibung:
Mit dieser Version der Compress-Funktion wird der durch in referenzierte Speicherbereich dekomprimiert und das Ergebnis im CMemory-Objekt out gespeichert.
Diese Funktion unterstützt das Prefix-Flag (siehe CCompression::UsePrefix).
Parameter
[out]outCMemory-Objekt, in dem die entpackten Daten gespeichert werden sollen
[in]inCMemoryReferemce-Objekt, das die komprimierten Daten enthält.
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück, im Fehlerfall 0. Die Länge der unkomprimierten Daten kann out entnommen werden.
int ppl6::CCompression::Uncompress ( CBinary out,
const void *  ptr,
size_t  size = 0,
bool  copy = true 
)
Beschreibung:
Mit dieser Version der Compress-Funktion wird der durch ptr angegebene Speicherbereich mit einer Länge von size Bytes dekomprimiert und die entpackten Daten im CBinary-Objekt out gespeichert. Der optionale Parameter copy bestimmt, ob in CBinary eine Kopie der komprimierten Daten abgelegt wird oder nur ein Pointer auf den internen Buffer der CCompression-Klasse.
Diese Funktion unterstützt das Prefix-Flag (siehe CCompression::UsePrefix).
Parameter
[out]outCBinary-Objekt, in dem die entpackten Daten gespeichert werden sollen
[in]ptrPointer auf den Beginn des zu entpackenden Speicherbereichs
[in]sizeGröße des komprimierten Speicherbereichs
[in]copyZeigt an, ob die komprimierten Daten in das CBinary-Objekt out kopiert (=true) werden sollen oder darin nur eine Referenz auf den Buffer der CCompression-Klasse abgelegt wird (=false). Letzters ist schneller und spart Speicher, es muss jedoch darauf geachtet werden, dass mit der Instanz von CCompression keine weiteren Aktionen ausgeführt werden und sich auch nicht gelöscht wird, solange das out noch verwendet wird!
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück, im Fehlerfall 0. Die Länge der unkomprimierten Daten kann out entnommen werden.
int ppl6::CCompression::Uncompress ( void *  dst,
size_t *  dstlen,
const void *  src,
size_t  srclen,
Algorithm  method = Unknown 
)
Beschreibung:
Mit dieser Version der Compress-Funktion wird ein komprimierter Speicherbereich src mit einer Länge von srclen Bytes dekomprimiert und das entpackte Ergebnis mit einer maximalen Länge von dstlen Bytes ab der Speicherposition dst gespeichert. Der Zielspeicher dst muss vorab allokiert worden sein und groß genug sein, um die unkomprimierten Daten aufzunehmen. Wieviel Bytes tatsächlich verbraucht wurden, ist nach erfolgreichem Aufruf der Variablen dstlen zu entnehmen.
Diese Funktion führt nur die reine Dekomprimierung durch und unterstützt keinen Prefix.
Parameter
[in,out]dstPointer auf den Speicherbereich, in dem die dekomprimierten Daten abgelegt werden sollen
[in,out]dstlenPointer auf eine Variable, die bei Aufruf die Größe des Zielspeicherbereichs dst enthält und nach erfolgreichem Aufruf Anzahl tatsächlich benötigter Bytes
[in]srcPointer auf den Anfang des Speicherbereichs, der die komprimierten Daten enthält
[in]srclenLänge der komprimierten Daten
[in]methodOptionaler Parameter, der die Kompressionsmethode angibt. Wird er nicht angegeben, werden die Einstellung verwendet, die beim Aufruf von CCompression::Init bzw. über den Konstruktor CCompression::CCompression(Algorithm method, Level level) angegeben wurde.
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück und die tatsächlich benötigten Bytes können der Variablen dstlen entnommen werden. Im Fehlerfall gibt die Funktion 0 zurück.
Zu beachten
Die Funktion prüft lediglich welche Komprimierungsmethode eingestellt wurde und ruft dann eine der privaten Funktionen CCompression::UnNone, CCompression::UnZlib oder CCompression::UnBzip2 auf.
int ppl6::CCompression::UnNone ( void *  dst,
size_t *  dstlen,
const void *  src,
size_t  srclen 
)
private
Beschreibung:
Diese interne Funktion wird aufgerufen, wenn die zu dekomprimierenden Daten garnicht komprimiert sind. Sie führt daher lediglich ein memcpy aus.
Parameter
[in,out]dstPointer auf den Speicherbereich, in dem die dekomprimierten Daten abgelegt werden sollen
[in,out]dstlenPointer auf eine Variable, die bei Aufruf die Größe des Zielspeicherbereichs dst enthält und nach erfolgreichem Aufruf Anzahl tatsächlich benötigter Bytes
[in]srcPointer auf den Anfang des Speicherbereichs, der die komprimierten Daten enthält
[in]srclenLänge der komprimierten Daten
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück und die tatsächlich benötigten Bytes können der Variablen dstlen entnommen werden. Im Fehlerfall gibt die Funktion 0 zurück.
int ppl6::CCompression::UnZlib ( void *  dst,
size_t *  dstlen,
const void *  src,
size_t  srclen 
)
private
Beschreibung:
Diese interne Funktion wird aufgerufen, wenn die zu dekomprimierenden Daten mit Zlib komprimiert sind.
Parameter
[in,out]dstPointer auf den Speicherbereich, in dem die dekomprimierten Daten abgelegt werden sollen
[in,out]dstlenPointer auf eine Variable, die bei Aufruf die Größe des Zielspeicherbereichs dst enthält und nach erfolgreichem Aufruf Anzahl tatsächlich benötigter Bytes
[in]srcPointer auf den Anfang des Speicherbereichs, der die komprimierten Daten enthält
[in]srclenLänge der komprimierten Daten
Rückgabe
Bei Erfolg gibt die Funktion 1 zurück und die tatsächlich benötigten Bytes können der Variablen dstlen entnommen werden. Im Fehlerfall gibt die Funktion 0 zurück.
void ppl6::CCompression::UsePrefix ( Prefix  prefix)
Beschreibung:
Durch Aufruf dieser Funktion kann festgelegt werden, ob beim Komprimieren den komprimierten Daten ein Prefix vorangestellt wird.

CCompression::Prefix

Parameter
prefixDer gewünschte Prefix
Siehe auch
CCompression_Prefix

Dokumentation der Datenelemente

ppl6::CCompression::aaa
private

Enthält die durch Init oder den Konstruktor eingestellten Kompressionsmethode

ppl6::CCompression::buffer
private

Interner Speicher, der nach Aufruf von Compress die komprimierten Daten enthält

ppl6::CCompression::lll
private

Enthält den durch Init oder den Konstruktor eingestellten Komprimierungslevel

ppl6::CCompression::prefix
private

Flag, ob und welcher Prefix beim Komprimieren vorangestellt wird

ppl6::CCompression::uncbuffer
private

Interner Speicher, der nach Aufruf von Uncompress die entpackten Daten enthält


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