The SWORD Project  1.9.0.svnversion
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Bzip2Compress Class Reference

#include <bz2comprs.h>

+ Inheritance diagram for Bzip2Compress:
+ Collaboration diagram for Bzip2Compress:

Public Member Functions

 Bzip2Compress ()
 
virtual void decode (void)
 
virtual void encode (void)
 
virtual unsigned long getChars (char *buf, unsigned long len)
 
virtual char * getCompressedBuf (unsigned long *len=0)
 
virtual int getLevel ()
 
virtual char * getUncompressedBuf (unsigned long *len=0)
 
virtual unsigned long sendChars (char *buf, unsigned long len)
 
virtual void setCompressedBuf (unsigned long *len, char *buf=0)
 
virtual void setLevel (int l)
 
virtual void setUncompressedBuf (const char *buf=0, unsigned long *len=0)
 
virtual ~Bzip2Compress ()
 

Protected Attributes

char * buf
 
char direct
 
int level
 
unsigned long pos
 
unsigned long slen
 
char * zbuf
 
unsigned long zlen
 
unsigned long zpos
 

Detailed Description

Definition at line 33 of file bz2comprs.h.

Constructor & Destructor Documentation

SWORD_NAMESPACE_START Bzip2Compress::Bzip2Compress ( )

Definition at line 38 of file bz2comprs.cpp.

38  : SWCompress() {
39  level = 9;
40 }
int level
Definition: swcomprs.h:40
Bzip2Compress::~Bzip2Compress ( )
virtual

Definition at line 47 of file bz2comprs.cpp.

47  {
48 }

Member Function Documentation

void Bzip2Compress::decode ( void  )
virtual

Reimplemented from SWCompress.

Definition at line 110 of file bz2comprs.cpp.

110  {
111  direct = 1; // set direction needed by parent [Get|Send]Chars()
112 
113  // get buffer
114  char chunk[1024];
115  char *zbuf = (char *)calloc(1, 1024);
116  char *chunkbuf = zbuf;
117  int chunklen;
118  unsigned long zlen = 0;
119  while((chunklen = (int)getChars(chunk, 1023))) {
120  memcpy(chunkbuf, chunk, chunklen);
121  zlen += chunklen;
122  if (chunklen < 1023)
123  break;
124  else zbuf = (char *)realloc(zbuf, zlen + 1024);
125  chunkbuf = zbuf + zlen;
126  }
127 
128  //printf("Decoding complength{%ld} uncomp{%ld}\n", zlen, blen);
129  if (zlen) {
130  unsigned int blen = (unsigned int)(zlen*20); // trust compression is less than 1000%
131  char *buf = new char[blen];
132  //printf("Doing decompress {%s}\n", zbuf);
133  slen = 0;
134  switch (BZ2_bzBuffToBuffDecompress(buf, &blen, zbuf, (unsigned int)zlen, 0, 0)){
135  case BZ_OK: sendChars(buf, blen); slen = blen; break;
136  case BZ_MEM_ERROR: fprintf(stderr, "ERROR: not enough memory during decompression.\n"); break;
137  case BZ_OUTBUFF_FULL: fprintf(stderr, "ERROR: not enough room in the out buffer during decompression.\n"); break;
138  case BZ_DATA_ERROR: fprintf(stderr, "ERROR: corrupt data during decompression.\n"); break;
139  default: fprintf(stderr, "ERROR: an unknown error occurred during decompression.\n"); break;
140  }
141  delete [] buf;
142  }
143  else {
144  fprintf(stderr, "ERROR: no buffer to decompress!\n");
145  }
146  //printf("Finished decoding\n");
147  free (zbuf);
148 }
unsigned long zlen
Definition: swcomprs.h:39
unsigned long slen
Definition: swcomprs.h:39
free(preg->fastmap)
char * realloc()
char * buf
Definition: swcomprs.h:38
virtual unsigned long getChars(char *buf, unsigned long len)
Definition: swcomprs.cpp:121
char direct
Definition: swcomprs.h:38
char * zbuf
Definition: swcomprs.h:38
virtual unsigned long sendChars(char *buf, unsigned long len)
Definition: swcomprs.cpp:141
void Bzip2Compress::encode ( void  )
virtual

Reimplemented from SWCompress.

Definition at line 61 of file bz2comprs.cpp.

61  {
62  direct = 0; // set direction needed by parent [Get|Send]Chars()
63 
64  // get buffer
65  char chunk[1024];
66  char *buf = (char *)calloc(1, 1024);
67  char *chunkbuf = buf;
68  unsigned long chunklen;
69  unsigned long len = 0;
70  while((chunklen = getChars(chunk, 1023))) {
71  memcpy(chunkbuf, chunk, chunklen);
72  len += chunklen;
73  if (chunklen < 1023)
74  break;
75  else buf = (char *)realloc(buf, len + 1024);
76  chunkbuf = buf+len;
77  }
78 
79 
80  zlen = (long) (len*1.01)+600;
81  char *zbuf = new char[zlen+1];
82  if (len)
83  {
84  //printf("Doing compress\n");
85  if (BZ2_bzBuffToBuffCompress(zbuf, (unsigned int*)&zlen, buf, (unsigned int)len, level, 0, 0) != BZ_OK)
86  {
87  printf("ERROR in compression\n");
88  }
89  else {
90  sendChars(zbuf, zlen);
91  }
92  }
93  else
94  {
95  fprintf(stderr, "ERROR: no buffer to compress\n");
96  }
97  delete [] zbuf;
98  free (buf);
99 }
unsigned long zlen
Definition: swcomprs.h:39
int level
Definition: swcomprs.h:40
free(preg->fastmap)
char * realloc()
char * buf
Definition: swcomprs.h:38
virtual unsigned long getChars(char *buf, unsigned long len)
Definition: swcomprs.cpp:121
char direct
Definition: swcomprs.h:38
char * zbuf
Definition: swcomprs.h:38
virtual unsigned long sendChars(char *buf, unsigned long len)
Definition: swcomprs.cpp:141
unsigned long SWCompress::getChars ( char *  buf,
unsigned long  len 
)
virtualinherited

Definition at line 121 of file swcomprs.cpp.

121  {
122  if (direct) {
123  len = (((zlen - zpos) > (unsigned)len) ? len : zlen - zpos);
124  if (len > 0) {
125  memmove(ibuf, &zbuf[zpos], len);
126  zpos += len;
127  }
128  }
129  else {
130 // slen = strlen(buf);
131  len = (((slen - pos) > (unsigned)len) ? len : slen - pos);
132  if (len > 0) {
133  memmove(ibuf, &buf[pos], len);
134  pos += len;
135  }
136  }
137  return len;
138 }
unsigned long zlen
Definition: swcomprs.h:39
unsigned long slen
Definition: swcomprs.h:39
char * buf
Definition: swcomprs.h:38
unsigned long zpos
Definition: swcomprs.h:39
char direct
Definition: swcomprs.h:38
unsigned long pos
Definition: swcomprs.h:39
char * zbuf
Definition: swcomprs.h:38
char * SWCompress::getCompressedBuf ( unsigned long *  len = 0)
virtualinherited

Definition at line 111 of file swcomprs.cpp.

111  {
112  if (!zbuf) {
113  direct = 0;
114  encode();
115  }
116  if (len) *len = zlen;
117  return zbuf;
118 }
unsigned long zlen
Definition: swcomprs.h:39
virtual void encode(void)
Definition: swcomprs.cpp:180
char direct
Definition: swcomprs.h:38
char * zbuf
Definition: swcomprs.h:38
virtual int SWCompress::getLevel ( )
inlinevirtualinherited

Definition at line 54 of file swcomprs.h.

54 {return level;};
int level
Definition: swcomprs.h:40
char * SWCompress::getUncompressedBuf ( unsigned long *  len = 0)
virtualinherited

Definition at line 90 of file swcomprs.cpp.

90  {
91  if (!buf) {
92  buf = (char *)calloc(1,1); // be sure we at least allocate an empty buf for return;
93  direct = 1;
94  decode();
95  }
96  if (len) *len = slen;
97  return buf;
98 }
virtual void decode(void)
Definition: swcomprs.cpp:193
unsigned long slen
Definition: swcomprs.h:39
char * buf
Definition: swcomprs.h:38
char direct
Definition: swcomprs.h:38
unsigned long SWCompress::sendChars ( char *  buf,
unsigned long  len 
)
virtualinherited

Definition at line 141 of file swcomprs.cpp.

141  {
142  if (direct) {
143  if (buf) {
144 // slen = strlen(buf);
145  if ((pos + len) > (unsigned)slen) {
146  buf = (char *) realloc(buf, pos + len + 1024);
147  memset(&buf[pos], 0, len + 1024);
148  }
149  }
150  else buf = (char *)calloc(1, len + 1024);
151  memmove(&buf[pos], ibuf, len);
152  pos += len;
153  }
154  else {
155  if (zbuf) {
156  if ((zpos + len) > zlen) {
157  zbuf = (char *) realloc(zbuf, zpos + len + 1024);
158  zlen = zpos + len + 1024;
159  }
160  }
161  else {
162  zbuf = (char *)calloc(1, len + 1024);
163  zlen = len + 1024;
164  }
165  memmove(&zbuf[zpos], ibuf, len);
166  zpos += len;
167  }
168  return len;
169 }
unsigned long zlen
Definition: swcomprs.h:39
unsigned long slen
Definition: swcomprs.h:39
char * realloc()
char * buf
Definition: swcomprs.h:38
unsigned long zpos
Definition: swcomprs.h:39
char direct
Definition: swcomprs.h:38
unsigned long pos
Definition: swcomprs.h:39
char * zbuf
Definition: swcomprs.h:38
void SWCompress::setCompressedBuf ( unsigned long *  len,
char *  buf = 0 
)
virtualinherited

Definition at line 101 of file swcomprs.cpp.

101  {
102  if (ibuf) {
103  init();
104  zbuf = (char *) malloc(*len);
105  memcpy(zbuf, ibuf, *len);
106  zlen = *len;
107  }
108  *len = zlen;
109 }
unsigned long zlen
Definition: swcomprs.h:39
char * malloc()
void init()
Definition: swcomprs.cpp:57
char * zbuf
Definition: swcomprs.h:38
virtual void SWCompress::setLevel ( int  l)
inlinevirtualinherited

Reimplemented in XzCompress.

Definition at line 53 of file swcomprs.h.

53 {level = l;};
int level
Definition: swcomprs.h:40
void SWCompress::setUncompressedBuf ( const char *  buf = 0,
unsigned long *  len = 0 
)
virtualinherited

Definition at line 75 of file swcomprs.cpp.

75  {
76  if (ibuf) {
77  init();
78  slen = (len) ? *len : strlen(ibuf);
79  buf = (char *) calloc(slen + 1, 1);
80  memcpy(buf, ibuf, slen);
81  }
82  if (!buf) {
83  buf = (char *)calloc(1,1); // be sure we at least allocate an empty buf for return;
84  direct = 1;
85  decode();
86  if (len) *len = slen;
87  }
88 }
virtual void decode(void)
Definition: swcomprs.cpp:193
unsigned long slen
Definition: swcomprs.h:39
char * buf
Definition: swcomprs.h:38
void init()
Definition: swcomprs.cpp:57
char direct
Definition: swcomprs.h:38

Member Data Documentation

char* SWCompress::buf
mutableprotectedinherited

Definition at line 38 of file swcomprs.h.

char SWCompress::direct
mutableprotectedinherited

Definition at line 38 of file swcomprs.h.

int SWCompress::level
protectedinherited

Definition at line 40 of file swcomprs.h.

unsigned long SWCompress::pos
protectedinherited

Definition at line 39 of file swcomprs.h.

unsigned long SWCompress::slen
protectedinherited

Definition at line 39 of file swcomprs.h.

char * SWCompress::zbuf
mutableprotectedinherited

Definition at line 38 of file swcomprs.h.

unsigned long SWCompress::zlen
protectedinherited

Definition at line 39 of file swcomprs.h.

unsigned long SWCompress::zpos
protectedinherited

Definition at line 39 of file swcomprs.h.


The documentation for this class was generated from the following files: