#include <stdlib.h>#include <stdio.h>#include <string.h>#include <limits.h>#include "cbf.h"#include "cbf_alloc.h"#include "cbf_file.h"#include "cbf_compress.h"#include "cbf_canonical.h"#include "cbf_packed.h"#include "cbf_byte_offset.h"#include "cbf_predictor.h"#include "cbf_uncompressed.h"
Go to the source code of this file.
Functions | |
| int | cbf_compress (void *source, size_t elsize, int elsign, size_t nelem, unsigned int compression, cbf_file *file, size_t *compressedsize, int *bits, char *digest) |
| int | cbf_decompress_parameters (int *eltype, size_t *elsize, int *elsigned, int *elunsigned, size_t *nelem, int *minelem, int *maxelem, unsigned int compression, cbf_file *file) |
| int | cbf_decompress (void *destination, size_t elsize, int elsign, size_t nelem, size_t *nelem_read, unsigned int compression, int bits, int sign, cbf_file *file) |
| int cbf_compress | ( | void * | source, |
| size_t | elsize, | ||
| int | elsign, | ||
| size_t | nelem, | ||
| unsigned int | compression, | ||
| cbf_file * | file, | ||
| size_t * | compressedsize, | ||
| int * | bits, | ||
| char * | digest | ||
| ) |
Definition at line 142 of file cbf_compress.c.
References CBF_ARGUMENT, CBF_BYTE_OFFSET, CBF_CANONICAL, cbf_compress_byte_offset(), cbf_compress_canonical(), cbf_compress_none(), cbf_compress_packed(), cbf_compress_predictor(), cbf_end_digest(), cbf_failnez, cbf_flush_bits(), CBF_NONE, CBF_PACKED, CBF_PREDICTOR, cbf_reset_bits(), and cbf_start_digest().
Referenced by cbf_set_binary().
{
int errorcode;
size_t size;
/* Discard any bits in the buffers */
cbf_failnez (cbf_reset_bits (file))
if (compressedsize)
*compressedsize = 0;
/* Start a digest? */
if (digest)
cbf_failnez (cbf_start_digest (file))
errorcode = 0;
size = 0;
switch (compression)
{
case CBF_CANONICAL:
errorcode = cbf_compress_canonical (source, elsize, elsign, nelem,
compression, file,
&size, bits);
break;
case CBF_PACKED:
case 0:
errorcode = cbf_compress_packed (source, elsize, elsign, nelem,
compression, file,
&size, bits);
break;
case CBF_BYTE_OFFSET:
errorcode = cbf_compress_byte_offset (source, elsize, elsign, nelem,
compression, file,
&size, bits);
break;
case CBF_PREDICTOR:
errorcode = cbf_compress_predictor (source, elsize, elsign, nelem,
compression, file,
&size, bits);
break;
case CBF_NONE:
errorcode = cbf_compress_none (source, elsize, elsign, nelem,
compression, file,
&size, bits);
break;
default:
errorcode = CBF_ARGUMENT;
}
/* Add the compressed size */
if (compressedsize)
*compressedsize += size;
/* Flush the buffers */
errorcode |= cbf_flush_bits (file);
/* Get the digest? */
if (digest)
errorcode |= cbf_end_digest (file, digest);
/* Done */
return errorcode;
}
| int cbf_decompress | ( | void * | destination, |
| size_t | elsize, | ||
| int | elsign, | ||
| size_t | nelem, | ||
| size_t * | nelem_read, | ||
| unsigned int | compression, | ||
| int | bits, | ||
| int | sign, | ||
| cbf_file * | file | ||
| ) |
Definition at line 389 of file cbf_compress.c.
References CBF_ARGUMENT, CBF_BYTE_OFFSET, CBF_CANONICAL, cbf_decompress_byte_offset(), cbf_decompress_canonical(), cbf_decompress_none(), cbf_decompress_packed(), cbf_decompress_predictor(), CBF_NONE, CBF_PACKED, and CBF_PREDICTOR.
Referenced by cbf_get_binary().
{
switch (compression)
{
case CBF_CANONICAL:
return cbf_decompress_canonical (destination, elsize, elsign, nelem,
nelem_read, compression,
file);
case CBF_PACKED:
case 0:
return cbf_decompress_packed (destination, elsize, elsign, nelem,
nelem_read, compression,
file);
case CBF_BYTE_OFFSET:
return cbf_decompress_byte_offset (destination, elsize, elsign, nelem,
nelem_read, compression,
file);
case CBF_PREDICTOR:
return cbf_decompress_predictor (destination, elsize, elsign, nelem,
nelem_read, compression,
file);
case CBF_NONE:
return cbf_decompress_none (destination, elsize, elsign, nelem,
nelem_read, compression,
bits, sign, file);
}
/* Fail */
return CBF_ARGUMENT;
}
| int cbf_decompress_parameters | ( | int * | eltype, |
| size_t * | elsize, | ||
| int * | elsigned, | ||
| int * | elunsigned, | ||
| size_t * | nelem, | ||
| int * | minelem, | ||
| int * | maxelem, | ||
| unsigned int | compression, | ||
| cbf_file * | file | ||
| ) |
Definition at line 248 of file cbf_compress.c.
References CBF_BYTE_OFFSET, CBF_CANONICAL, cbf_failnez, CBF_FORMAT, cbf_get_integer(), CBF_INTEGER, CBF_NONE, CBF_OVERFLOW, CBF_PACKED, CBF_PREDICTOR, and cbf_reset_bits().
Referenced by cbf_binary_parameters(), and cbf_get_binary().
{
unsigned int compression_file, nelem_file;
int errorcode, minelement_file, maxelement_file,
elsigned_file, elunsigned_file;
/* Discard any bits in the buffers */
cbf_failnez (cbf_reset_bits (file));
/* Check compression type */
if (compression != CBF_CANONICAL &&
compression != CBF_PACKED &&
compression != CBF_BYTE_OFFSET &&
compression != CBF_PREDICTOR &&
compression != CBF_NONE)
return CBF_FORMAT;
if (compression == CBF_NONE)
{
nelem_file = 0;
minelement_file = maxelement_file = 0;
}
else
{
/* Read the number of elements (64 bits) */
cbf_failnez (cbf_get_integer (file, (int *) &nelem_file, 0, 64))
/* Read the minimum element (64 bits) */
errorcode = cbf_get_integer (file, &minelement_file, 1, 64);
if (errorcode && errorcode != CBF_OVERFLOW)
return errorcode;
/* Read the maximum element (64 bits) */
errorcode = cbf_get_integer (file, &maxelement_file, 1, 64);
if (errorcode && errorcode != CBF_OVERFLOW)
return errorcode;
}
/* Update the element sign, type, minimum, maximum and number */
elsigned_file = !(((unsigned) minelement_file) <=
((unsigned) maxelement_file) &&
((signed) minelement_file) >
((signed) maxelement_file));
elunsigned_file = !(((signed) minelement_file) <=
((signed) maxelement_file) &&
((unsigned) minelement_file) >
((unsigned) maxelement_file));
if (elsigned)
*elsigned = elsigned_file;
if (elunsigned)
*elunsigned = elunsigned_file;
if (eltype)
*eltype = CBF_INTEGER;
if (elsize)
/* Calculate the minimum number of bytes needed to hold the elements */
if (minelement_file == 0 && maxelement_file == 0)
*elsize = 0;
else
if ((!elsigned_file ||
((signed) minelement_file == (signed short) minelement_file &&
(signed) maxelement_file == (signed short) maxelement_file)) ||
(!elunsigned_file ||
((unsigned) minelement_file == (unsigned short) minelement_file &&
(unsigned) maxelement_file == (unsigned short) maxelement_file)))
if ((!elsigned_file ||
((signed) minelement_file == (signed char) minelement_file &&
(signed) maxelement_file == (signed char) maxelement_file)) ||
(!elunsigned_file ||
((unsigned) minelement_file == (unsigned char) minelement_file &&
(unsigned) maxelement_file == (unsigned char) maxelement_file)))
*elsize = sizeof (char);
else
*elsize = sizeof (short);
else
*elsize = sizeof (int);
if (minelem)
*minelem = minelement_file;
if (maxelem)
*maxelem = maxelement_file;
if (nelem)
*nelem = nelem_file;
/* Success */
return 0;
}
1.7.3