88 lines
2.2 KiB
C
88 lines
2.2 KiB
C
/*
|
|
Copyright (C) 2016 Francesc Alted
|
|
http://blosc.org
|
|
License: MIT (see LICENSE.txt)
|
|
|
|
Example program demonstrating that from 1.9.0 on, Blosc does not
|
|
need to be initialized (although it is recommended).
|
|
|
|
To compile this program:
|
|
|
|
$ gcc noinit.c -o noinit -lblosc
|
|
|
|
or, if you don't have the blosc library installed yet:
|
|
|
|
$ gcc -O3 -msse2 noinit.c -I../blosc -o noinit -L../build/blosc
|
|
$ export LD_LIBRARY_PATH=../build/blosc
|
|
|
|
Using MSVC on Windows:
|
|
|
|
$ cl /arch:SSE2 /Ox /Fenoinit.exe /Iblosc examples\noinit.c blosc\blosc.c blosc\blosclz.c blosc\shuffle.c blosc\shuffle-sse2.c blosc\shuffle-generic.c blosc\bitshuffle-generic.c blosc\bitshuffle-sse2.c
|
|
|
|
To run:
|
|
|
|
$ ./noinit
|
|
Blosc version info: 1.8.2.dev ($Date:: 2016-04-08 #$)
|
|
Compression: 4000000 -> 158788 (25.2x)
|
|
Decompression succesful!
|
|
Succesful roundtrip!
|
|
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <blosc.h>
|
|
|
|
#define SIZE 100*100*100
|
|
|
|
int main(){
|
|
static float data[SIZE];
|
|
static float data_out[SIZE];
|
|
static float data_dest[SIZE];
|
|
int isize = SIZE*sizeof(float), osize = SIZE*sizeof(float);
|
|
int dsize = SIZE*sizeof(float), csize;
|
|
int i;
|
|
|
|
for(i=0; i<SIZE; i++){
|
|
data[i] = i;
|
|
}
|
|
|
|
/* Register the filter with the library */
|
|
printf("Blosc version info: %s (%s)\n",
|
|
BLOSC_VERSION_STRING, BLOSC_VERSION_DATE);
|
|
|
|
/* From 1.9 on, we don't need to initialize the Blosc compressor anymore */
|
|
/* blosc_init(); */
|
|
|
|
/* Compress with clevel=5 and shuffle active */
|
|
csize = blosc_compress(5, 1, sizeof(float), isize, data, data_out, osize);
|
|
if (csize == 0) {
|
|
printf("Buffer is uncompressible. Giving up.\n");
|
|
return 1;
|
|
}
|
|
else if (csize < 0) {
|
|
printf("Compression error. Error code: %d\n", csize);
|
|
return csize;
|
|
}
|
|
|
|
printf("Compression: %d -> %d (%.1fx)\n", isize, csize, (1.*isize) / csize);
|
|
|
|
/* Decompress */
|
|
dsize = blosc_decompress(data_out, data_dest, dsize);
|
|
if (dsize < 0) {
|
|
printf("Decompression error. Error code: %d\n", dsize);
|
|
return dsize;
|
|
}
|
|
|
|
printf("Decompression succesful!\n");
|
|
|
|
for(i=0;i<SIZE;i++){
|
|
if(data[i] != data_dest[i]) {
|
|
printf("Decompressed data differs from original!\n");
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
printf("Succesful roundtrip!\n");
|
|
return 0;
|
|
}
|