PPL7-Icon Patrick's Programming Library Version 7.0.0 - Dokumentation
ppl7::Compression 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

 Compression ()
 Konstruktor der Klasse. Mehr ...
 
 Compression (Algorithm method, Level level=Level_Default)
 Konstruktor mit Initialisierung der Komprimierungsmethode. Mehr ...
 
 ~Compression ()
 Destruktor der Klasse. Mehr ...
 
void compress (void *dst, size_t *dstlen, const void *src, size_t size, Algorithm a=Unknown)
 Komprimierung eines Speicherbereiches in einen anderen. Mehr ...
 
void compress (ByteArray &out, const void *ptr, size_t size)
 Komprimierung eines Speicherbereiches in ein ByteArray Objekt. Mehr ...
 
void compress (ByteArray &out, const ByteArrayPtr &in)
 Komprimierung eines Speicherbereichs in ein CMemory-Objekt. Mehr ...
 
ByteArrayPtr compress (const void *ptr, size_t size)
 Komprimierung eines Speicherbereiches. Mehr ...
 
ByteArrayPtr compress (const ByteArrayPtr &in)
 Komprimierung eines Speicherbereiches. Mehr ...
 
void init (Algorithm method, Level level=Level_Default)
 Gewünschte Komprimierungsmethode einstellen. Mehr ...
 
void uncompress (void *dst, size_t *dstlen, const void *src, size_t srclen, Algorithm a=Unknown)
 Dekomprimierung eines Speicherbereiches in einen anderen. Mehr ...
 
void uncompress (ByteArray &out, const ByteArrayPtr &data)
 Dekomprimierung eines ByteArrayPtr Objektes. Mehr ...
 
void uncompress (ByteArray &out, const void *data, size_t size=0)
 Dekomprimierung eines Speicherbereichs in ein CBinary Objekt. Mehr ...
 
ByteArrayPtr uncompress (const void *ptr, size_t size)
 Dekomprimierung eines Speicherbereichs in ein CBinary Objekt. Mehr ...
 
ByteArrayPtr uncompress (const ByteArrayPtr &in)
 Dekomprimierung eines Speicherbereichs in ein CBinary Objekt. Mehr ...
 
void usePrefix (Prefix prefix)
 Verwendung eines Prefix beim Komprimieren. Mehr ...
 

Private Methoden

void doBzip2 (void *dst, size_t *dstlen, const void *src, size_t size)
 Bzip2-Komprimierung verwenden. Mehr ...
 
void doNone (void *dst, size_t *dstlen, const void *src, size_t size)
 Keine Komprimierung verwenden. Mehr ...
 
void doZlib (void *dst, size_t *dstlen, const void *src, size_t size)
 Zlib-Komprimierung verwenden. Mehr ...
 
void unBzip2 (void *dst, size_t *dstlen, const void *src, size_t srclen)
 Bzip2-Komprimierte Daten entpacken. Mehr ...
 
void unNone (void *dst, size_t *dstlen, const void *src, size_t srclen)
 Speicherbereich ohne Dekompression kopieren. Mehr ...
 
void 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.)

void CompressBZip2 (ByteArray &out, const ByteArrayPtr &in, Compression::Level level)
 Daten mit BZip2 komprimieren. Mehr ...
 
void CompressZlib (ByteArray &out, const ByteArrayPtr &in, Compression::Level level)
 Daten mit ZLib komprimieren. Mehr ...
 
void Uncompress (ByteArray &out, const ByteArrayPtr &in)
 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 Compression::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::Compression comp;
ppl6::CBinary uncompressed; // Wir verwenden einfach die Quelldatei des
if (!uncompressed.Load("main.cpp")) { // Beispiels zum Komprimieren
ppl6::PrintError();
return 0;
}
printf ("Größe der Datei unkomprimiert: %u Bytes\n",uncompressed.Size());
// Komprimierungsmethode und Level auswählen
if (!comp.Init(ppl6::Compression::Algo_ZLIB, ppl6::Compression::Level_High)) {
ppl6::PrintError();
return 0;
}
// Die komprimierten Daten speichern wir in einem CBinary Objekt
ppl6::CBinary compressed;
if (!comp.Compress(compressed,data,false)) {
ppl6::PrintError();
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)) {
ppl6::PrintError();
return 0;
}
printf ("Größe nach Dekomprimierung: %u Bytes, MD5: %s\n",recovered.Size(),(char*)chk2);
return 1;
}

Komprimierungsprefix

Über die Funktion Compression::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

ppl7::Compression::Compression ( )
Beschreibung:
Der parameterlose Konstruktor initialisiert die Klasse mit dem Zlib-Algorithmus und dem Default-Level für die Komprimierungsrate.
ppl7::Compression::Compression ( Algorithm  method,
Level  level = Level_Default 
)
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 Compression::Algorithm)
levelKomprimierungslevel (siehe Compression::Level)
ppl7::Compression::~Compression ( )
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

void ppl7::Compression::compress ( void *  dst,
size_t *  dstlen,
const void *  src,
size_t  srclen,
Algorithm  a = Unknown 
)
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
Ausnahmebehandlung
NullPointerExceptionEiner der übergebenen Parameter (dst, dstlen oder src) zeigt auf NULL
UnsupportedFeatureExceptionDer eingestellte Komprimier-Algorithmus wird nicht unterstützt
OutOfMemoryExceptionNicht genug Speicher verfügbar
BufferTooSmallExceptionDer Puffer dst ist zu klein, um die komprimierten Daten aufzunehmen. Der Parameter dstlen enthält nach Auftreten der Exception die tatsächlich benötigten Bytes.
CompressionFailedExceptionEin unerwarteter Fehler ist aufgetreten, die Daten konnten nicht komprimiert werden
Zu beachten
Die Funktion prüft lediglich welche Komprimierungsmethode eingestellt wurde und ruft dann eine der privaten Funktionen Compression::doNone, Compression::doZlib oder Compression::doBzip2 auf.
void ppl7::Compression::compress ( ByteArray out,
const void *  ptr,
size_t  size 
)
Beschreibung:
Mit dieser Version der Compress-Funktion wird ein Speicherbereich ptr mit einer Länge von size Bytes komprimiert und das Ergebnis im ByteArray-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 Compression-Klasse.
Diese Funktion unterstützt das Prefix-Flag (siehe Compression::usePrefix).
Parameter
[out]outByteArray-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
Ausnahmebehandlung
UnsupportedFeatureExceptionDer eingestellte Komprimier-Algorithmus wird nicht unterstützt
OutOfMemoryExceptionNicht genug Speicher verfügbar
BufferTooSmallExceptionDer intern zum komprimieren verwendete Puffer ist zu klein. Sollte dieser Fall auftreten, handelt es sich um einen Bug oder die zu komprimierenden Daten lassen sich nicht komprimieren.
CompressionFailedExceptionEin unerwarteter Fehler ist aufgetreten, die Daten konnten nicht komprimiert werden
void ppl7::Compression::compress ( ByteArray out,
const ByteArrayPtr 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 Compression::UsePrefix).
Parameter
[out]outByteArray-Objekt, in dem die komprimierten Daten gespeichert werden sollen
[in]inEin von ByteArray oder ByteArrayPtr abgeleitetes Objekt, das den zu komprimierenden Speicherbereich repräsentiert.
Ausnahmebehandlung
UnsupportedFeatureExceptionDer eingestellte Komprimier-Algorithmus wird nicht unterstützt
OutOfMemoryExceptionNicht genug Speicher verfügbar
BufferTooSmallExceptionDer intern zum komprimieren verwendete Puffer ist zu klein. Sollte dieser Fall auftreten, handelt es sich um einen Bug oder die zu komprimierenden Daten lassen sich nicht komprimieren.
CompressionFailedExceptionEin unerwarteter Fehler ist aufgetreten, die Daten konnten nicht komprimiert werden
ByteArrayPtr ppl7::Compression::compress ( const void *  ptr,
size_t  size 
)
Beschreibung:
Mit dieser Version der Compress-Funktion wird ein Speicherbereich ptr mit einer Länge von size Bytes komprimiert und das Ergebnis als ByteArrayPtr-Objekt zurückgegeben. Dieses enthält eine Referenz auf Speicherbereich der Compression-Klasse, die nur solange gültig ist, wie die Compression-Klasse existiert und keine neue (De-)Komprimierung durchgeführt wurde.
Diese Funktion unterstützt das Prefix-Flag (siehe Compression::usePrefix).
Parameter
[in]ptrPointer auf den Speicherbereich, den komprimiert werden soll
[in]sizeLänge des zu komprimierenden Speicherbereichs
Rückgabe
Bei Erfolg wird ein ByteArrayPtr mit einer Referenz auf den komprimierten Speicher zurückgegeben. Im Fehlerfall wird eine Exception geworfen.
Ausnahmebehandlung
UnsupportedFeatureExceptionDer eingestellte Komprimier-Algorithmus wird nicht unterstützt
OutOfMemoryExceptionNicht genug Speicher verfügbar
BufferTooSmallExceptionDer intern zum komprimieren verwendete Puffer ist zu klein. Sollte dieser Fall auftreten, handelt es sich um einen Bug oder die zu komprimierenden Daten lassen sich nicht komprimieren.
CompressionFailedExceptionEin unerwarteter Fehler ist aufgetreten, die Daten konnten nicht komprimiert werden
ByteArrayPtr ppl7::Compression::compress ( const ByteArrayPtr in)
Beschreibung:
Mit dieser Version der Compress-Funktion wird der von in referenzierte Speicherbereich komprimiert und das Ergebnis als ByteArrayPtr-Objekt zurückgegeben. Dieses enthält eine Referenz auf Speicherbereich der Compression-Klasse, die nur solange gültig ist, wie die Compression-Klasse existiert und keine neue (De-)Komprimierung durchgeführt wurde.
Diese Funktion unterstützt das Prefix-Flag (siehe Compression::usePrefix).
Parameter
[in]ptrPointer auf den Speicherbereich, den komprimiert werden soll
[in]sizeLänge des zu komprimierenden Speicherbereichs
Rückgabe
Bei Erfolg wird ein ByteArrayPtr mit einer Referenz auf den komprimierten Speicher zurückgegeben. Im Fehlerfall wird eine Exception geworfen.
Ausnahmebehandlung
UnsupportedFeatureExceptionDer eingestellte Komprimier-Algorithmus wird nicht unterstützt
OutOfMemoryExceptionNicht genug Speicher verfügbar
BufferTooSmallExceptionDer intern zum komprimieren verwendete Puffer ist zu klein. Sollte dieser Fall auftreten, handelt es sich um einen Bug oder die zu komprimierenden Daten lassen sich nicht komprimieren.
CompressionFailedExceptionEin unerwarteter Fehler ist aufgetreten, die Daten konnten nicht komprimiert werden
void ppl7::Compression::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
Ausnahmebehandlung
UnsupportedFeatureExceptionBzip2 wird nicht unterstützt
OutOfMemoryExceptionNicht genug Speicher verfügbar
BufferTooSmallExceptionDer Puffer dst ist zu klein, um die komprimierten Daten aufzunehmen. Der Parameter dstlen enthält nach Auftreten der Exception die tatsächlich benötigten Bytes.
CompressionFailedExceptionEin unerwarteter Fehler ist aufgetreten, die Daten konnten nicht komprimiert werden
void ppl7::Compression::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
Ausnahmebehandlung
BufferTooSmallExceptionDer Puffer dst ist zu klein, um die komprimierten Daten aufzunehmen. Der Parameter dstlen enthält nach Auftreten der Exception die tatsächlich benötigten Bytes.
void ppl7::Compression::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
Ausnahmebehandlung
UnsupportedFeatureExceptionZlib wird nicht unterstützt
OutOfMemoryExceptionNicht genug Speicher verfügbar
BufferTooSmallExceptionDer Puffer dst ist zu klein, um die komprimierten Daten aufzunehmen. Der Parameter dstlen enthält nach Auftreten der Exception die tatsächlich benötigten Bytes.
CompressionFailedExceptionEin unerwarteter Fehler ist aufgetreten, die Daten konnten nicht komprimiert werden
void ppl7::Compression::init ( Algorithm  method,
Level  level = Level_Default 
)
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 Compression::Algorithm)
levelKomprimierungslevel (siehe Compression::Level)
Rückgabe
Bei Erfolg liefert die Funktion 1 zurück, im Fehlerfall 0
void ppl7::Compression::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
Ausnahmebehandlung
UnsupportedFeatureExceptionBzip2 wird nicht unterstützt
OutOfMemoryExceptionNicht genug Speicher verfügbar
BufferTooSmallExceptionDer Puffer dst ist zu klein, um die komprimierten Daten aufzunehmen. Der Parameter dstlen enthält nach Auftreten der Exception die tatsächlich benötigten Bytes.
CorruptedDataExceptionDie zu dekomprimierenden Daten sind korrupt, unvollständig oder nicht mit erwarteten Algorithmus komprimiert.
DecompressionFailedExceptionEin unerwarteter Fehler ist aufgetreten, die Daten konnten nicht dekomprimiert werden
void ppl7::Compression::uncompress ( void *  dst,
size_t *  dstlen,
const void *  src,
size_t  srclen,
Algorithm  a = 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
Ausnahmebehandlung
NullPointerExceptionEiner der übergebenen Parameter (dst, dstlen oder src) zeigt auf NULL
UnsupportedFeatureExceptionDer eingestellte Komprimier-Algorithmus wird nicht unterstützt
OutOfMemoryExceptionNicht genug Speicher verfügbar
BufferTooSmallExceptionDer Puffer dst ist zu klein, um die dekomprimierten Daten aufzunehmen. Der Parameter dstlen enthält nach Auftreten der Exception die tatsächlich benötigten Bytes.
DecompressionFailedExceptionEin unerwarteter Fehler ist aufgetreten, die Daten konnten nicht dekomprimiert werden
Zu beachten
Die Funktion prüft lediglich welche Komprimierungsmethode eingestellt wurde und ruft dann eine der privaten Funktionen Compression::unNone, Compression::unZlib oder Compression::unBzip2 auf.
void ppl7::Compression::uncompress ( ByteArray out,
const ByteArrayPtr object 
)
Beschreibung:
Mit dieser Version der Compress-Funktion wird Speicher des Objektes object entpackt und das Ergebnis im ByteArray-Objekt out gespeichert.
Diese Funktion unterstützt das Prefix-Flag (siehe Compression::usePrefix).
Parameter
[out]outByteArray-Objekt, in dem die entpackten Daten gespeichert werden sollen
[in]objectByteArrayPtr-Objekt, das auf die komprimierten Daten zeigt.
Ausnahmebehandlung
UnsupportedFeatureExceptionDer eingestellte Komprimier-Algorithmus wird nicht unterstützt
OutOfMemoryExceptionNicht genug Speicher verfügbar
BufferTooSmallExceptionDer intern zum komprimieren verwendete Puffer ist zu klein. Sollte dieser Fall auftreten, handelt es sich um einen Bug.
DecompressionFailedExceptionEin unerwarteter Fehler ist aufgetreten, die Daten konnten nicht dekomprimiert werden
void ppl7::Compression::uncompress ( ByteArray out,
const void *  ptr,
size_t  size = 0 
)
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.
Diese Funktion unterstützt das Prefix-Flag (siehe Compression::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
Ausnahmebehandlung
UnsupportedFeatureExceptionDer eingestellte Komprimier-Algorithmus wird nicht unterstützt
OutOfMemoryExceptionNicht genug Speicher verfügbar
BufferTooSmallExceptionDer intern zum komprimieren verwendete Puffer ist zu klein. Sollte dieser Fall auftreten, handelt es sich um einen Bug.
DecompressionFailedExceptionEin unerwarteter Fehler ist aufgetreten, die Daten konnten nicht dekomprimiert werden
ByteArrayPtr ppl7::Compression::uncompress ( const void *  ptr,
size_t  size 
)
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 als ByteArrayPtr zurückgegeben.
Diese Funktion unterstützt das Prefix-Flag (siehe Compression::UsePrefix).
Parameter
[in]ptrPointer auf den Beginn des zu entpackenden Speicherbereichs
[in]sizeGröße des komprimierten Speicherbereichs
Rückgabe
Bei Erfolg wird ein ByteArrayPtr mit einer Referenz auf den dekomprimierten Speicher zurückgegeben. Im Fehlerfall wird eine Exception geworfen.
Ausnahmebehandlung
UnsupportedFeatureExceptionDer eingestellte Komprimier-Algorithmus wird nicht unterstützt
OutOfMemoryExceptionNicht genug Speicher verfügbar
BufferTooSmallExceptionDer intern zum komprimieren verwendete Puffer ist zu klein. Sollte dieser Fall auftreten, handelt es sich um einen Bug.
DecompressionFailedExceptionEin unerwarteter Fehler ist aufgetreten, die Daten konnten nicht dekomprimiert werden
ByteArrayPtr ppl7::Compression::uncompress ( const ByteArrayPtr in)
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 als ByteArrayPtr zurückgegeben.
Diese Funktion unterstützt das Prefix-Flag (siehe Compression::UsePrefix).
Parameter
[in]inReferenz auf den zu dekomprimierenden Speicher
Rückgabe
Bei Erfolg wird ein ByteArrayPtr mit einer Referenz auf den dekomprimierten Speicher zurückgegeben. Im Fehlerfall wird eine Exception geworfen.
Ausnahmebehandlung
UnsupportedFeatureExceptionDer eingestellte Komprimier-Algorithmus wird nicht unterstützt
OutOfMemoryExceptionNicht genug Speicher verfügbar
BufferTooSmallExceptionDer intern zum komprimieren verwendete Puffer ist zu klein. Sollte dieser Fall auftreten, handelt es sich um einen Bug.
DecompressionFailedExceptionEin unerwarteter Fehler ist aufgetreten, die Daten konnten nicht dekomprimiert werden
void ppl7::Compression::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
Ausnahmebehandlung
BufferTooSmallExceptionDer Puffer dst ist zu klein, um die komprimierten Daten aufzunehmen. Der Parameter dstlen enthält nach Auftreten der Exception die tatsächlich benötigten Bytes.
void ppl7::Compression::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
Ausnahmebehandlung
UnsupportedFeatureExceptionZlib wird nicht unterstützt
OutOfMemoryExceptionNicht genug Speicher verfügbar
BufferTooSmallExceptionDer Puffer dst ist zu klein, um die komprimierten Daten aufzunehmen. Der Parameter dstlen enthält nach Auftreten der Exception die tatsächlich benötigten Bytes.
CorruptedDataExceptionDie zu dekomprimierenden Daten sind korrupt, unvollständig oder nicht mit erwarteten Algorithmus komprimiert.
DecompressionFailedExceptionEin unerwarteter Fehler ist aufgetreten, die Daten konnten nicht dekomprimiert werden
void ppl7::Compression::usePrefix ( Prefix  prefix)
Beschreibung:
Durch Aufruf dieser Funktion kann festgelegt werden, ob beim Komprimieren den komprimierten Daten ein Prefix vorangestellt wird.

Compression::Prefix

Parameter
prefixDer gewünschte Prefix
Siehe auch
Compression_Prefix

Dokumentation der Datenelemente

ppl7::Compression::aaa
private

Enthält die durch Init oder den Konstruktor eingestellten Kompressionsmethode

ppl7::Compression::buffer
private

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

ppl7::Compression::lll
private

Enthält den durch Init oder den Konstruktor eingestellten Komprimierungslevel

ppl7::Compression::prefix
private

Flag, ob und welcher Prefix beim Komprimieren vorangestellt wird

ppl7::Compression::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: