![]() | Patrick's Programming Library Version 6.4.21 - Dokumentation |
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 ... | |
Ü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:
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.
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.
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:
Verwendung eines Prefix, der den komprimierten Daten vorangestellt wird. Siehe dazu auch Komprimierungsprefix
ppl6::CCompression::CCompression | ( | ) |
method | Komprimierungsmethode (siehe CCompression::Algorithm) |
level | Komprimierungslevel (siehe CCompression::Level) |
ppl6::CCompression::~CCompression | ( | ) |
int ppl6::CCompression::Compress | ( | CBinary & | out, |
const void * | ptr, | ||
size_t | size, | ||
bool | copy = true |
||
) |
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. [out] | out | CBinary-Objekt, in dem die komprimierten Daten gespeichert werden sollen |
[in] | ptr | Pointer auf den Speicherbereich, den komprimiert werden soll |
[in] | size | Länge des zu komprimierenden Speicherbereichs |
[in] | copy | Zeigt 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! |
out
entnommen werden. 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. [out] | out | CBinary-Objekt, in dem die komprimierten Daten gespeichert werden sollen |
[in] | object | Ein von CVar abgeleitetes Objekt mit den zu komprimierenden Daten. Zur Zeit werden folgende Datentypen unterstützt: CString, CWString, CBinary |
[in] | copy | Zeigt 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! |
out
entnommen werden. int ppl6::CCompression::Compress | ( | CMemory & | out, |
const CMemoryReference & | in | ||
) |
in
referenzierte Speicher komprimiert und das Ergebnis in out
gespeichert. [out] | out | CMemory-Objekt, in dem die komprimierten Daten gespeichert werden sollen |
[in] | in | Ein von CMemoryReferemce abgeleitetes Objekt, das den zu komprimierenden Speicherbereich repräsentiert. |
out
entnommen werden. int ppl6::CCompression::Compress | ( | void * | dst, |
size_t * | dstlen, | ||
const void * | src, | ||
size_t | srclen | ||
) |
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. [in,out] | dst | Pointer auf den Speicherbereich, in dem die komprimierten Daten abgelegt werden sollen |
[in,out] | dstlen | Pointer 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] | src | Pointer auf den Speicherbereich, den komprimiert werden soll |
[in] | srclen | Länge des zu komprimierenden Speicherbereichs |
dstlen
entnommen werden. Im Fehlerfall gibt die Funktion 0 zurück.
|
private |
src
mit BZip2 komprimiert und in dst
abgelegt.[in,out] | dst | Pointer auf den Speicherbereich, in dem die komprimierten Daten abgelegt werden sollen |
[in,out] | dstlen | Pointer 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] | src | Pointer auf den Speicherbereich, den komprimiert werden soll |
[in] | size | Länge des zu komprimierenden Speicherbereichs |
dstlen
entnommen werden. Im Fehlerfall gibt die Funktion 0 zurück.
|
private |
src
nach dst
zu kopieren.[in,out] | dst | Pointer auf den Speicherbereich, in dem die komprimierten Daten abgelegt werden sollen |
[in,out] | dstlen | Pointer 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] | src | Pointer auf den Speicherbereich, den komprimiert werden soll |
[in] | size | Länge des zu komprimierenden Speicherbereichs |
dstlen
entnommen werden. Im Fehlerfall gibt die Funktion 0 zurück.
|
private |
src
mit Zlib komprimiert und in dst
abgelegt.[in,out] | dst | Pointer auf den Speicherbereich, in dem die komprimierten Daten abgelegt werden sollen |
[in,out] | dstlen | Pointer 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] | src | Pointer auf den Speicherbereich, den komprimiert werden soll |
[in] | size | Länge des zu komprimierenden Speicherbereichs |
dstlen
entnommen werden. Im Fehlerfall gibt die Funktion 0 zurück. method | Komprimierungsmethode (siehe CCompression::Algorithm) |
level | Komprimierungslevel (siehe CCompression::Level) |
|
private |
[in,out] | dst | Pointer auf den Speicherbereich, in dem die dekomprimierten Daten abgelegt werden sollen |
[in,out] | dstlen | Pointer 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] | src | Pointer auf den Anfang des Speicherbereichs, der die komprimierten Daten enthält |
[in] | srclen | Länge der komprimierten Daten |
dstlen
entnommen werden. Im Fehlerfall gibt die Funktion 0 zurück. 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. [out] | out | CBinary-Objekt, in dem die entpackten Daten gespeichert werden sollen |
[in] | object | CBinary-Objekt, das die komprimierten Daten enthält. |
[in] | copy | Zeigt 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! |
out
entnommen werden. int ppl6::CCompression::Uncompress | ( | CMemory & | out, |
const CMemoryReference & | in | ||
) |
in
referenzierte Speicherbereich dekomprimiert und das Ergebnis im CMemory-Objekt out
gespeichert. [out] | out | CMemory-Objekt, in dem die entpackten Daten gespeichert werden sollen |
[in] | in | CMemoryReferemce-Objekt, das die komprimierten Daten enthält. |
out
entnommen werden. int ppl6::CCompression::Uncompress | ( | CBinary & | out, |
const void * | ptr, | ||
size_t | size = 0 , |
||
bool | copy = true |
||
) |
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. [out] | out | CBinary-Objekt, in dem die entpackten Daten gespeichert werden sollen |
[in] | ptr | Pointer auf den Beginn des zu entpackenden Speicherbereichs |
[in] | size | Größe des komprimierten Speicherbereichs |
[in] | copy | Zeigt 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! |
out
entnommen werden. int ppl6::CCompression::Uncompress | ( | void * | dst, |
size_t * | dstlen, | ||
const void * | src, | ||
size_t | srclen, | ||
Algorithm | method = Unknown |
||
) |
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. [in,out] | dst | Pointer auf den Speicherbereich, in dem die dekomprimierten Daten abgelegt werden sollen |
[in,out] | dstlen | Pointer 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] | src | Pointer auf den Anfang des Speicherbereichs, der die komprimierten Daten enthält |
[in] | srclen | Länge der komprimierten Daten |
[in] | method | Optionaler 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. |
dstlen
entnommen werden. Im Fehlerfall gibt die Funktion 0 zurück.
|
private |
[in,out] | dst | Pointer auf den Speicherbereich, in dem die dekomprimierten Daten abgelegt werden sollen |
[in,out] | dstlen | Pointer 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] | src | Pointer auf den Anfang des Speicherbereichs, der die komprimierten Daten enthält |
[in] | srclen | Länge der komprimierten Daten |
dstlen
entnommen werden. Im Fehlerfall gibt die Funktion 0 zurück.
|
private |
[in,out] | dst | Pointer auf den Speicherbereich, in dem die dekomprimierten Daten abgelegt werden sollen |
[in,out] | dstlen | Pointer 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] | src | Pointer auf den Anfang des Speicherbereichs, der die komprimierten Daten enthält |
[in] | srclen | Länge der komprimierten Daten |
dstlen
entnommen werden. Im Fehlerfall gibt die Funktion 0 zurück. void ppl6::CCompression::UsePrefix | ( | Prefix | prefix | ) |
prefix | Der gewünschte Prefix |
|
private |
Enthält die durch Init oder den Konstruktor eingestellten Kompressionsmethode
|
private |
Interner Speicher, der nach Aufruf von Compress die komprimierten Daten enthält
|
private |
Enthält den durch Init oder den Konstruktor eingestellten Komprimierungslevel
|
private |
Flag, ob und welcher Prefix beim Komprimieren vorangestellt wird
|
private |
Interner Speicher, der nach Aufruf von Uncompress die entpackten Daten enthält