diff options
author | Magnus Lundborg <lundborg.magnus@gmail.com> | 2014-07-21 13:56:54 (GMT) |
---|---|---|
committer | Magnus Lundborg <lundborg.magnus@gmail.com> | 2014-07-23 22:17:52 (GMT) |
commit | 1a09f345860834fb1c2005e65948fa296b201e8b (patch) | |
tree | fb25ea8a08d34fa2ca2298792ef8e559841932a7 /src/compression/coder.c | |
parent | 3e2c4306bba827d5b1d3444d5fb9a81e4b2a88bb (diff) |
Improved TNG compression speed.
Change-Id: I71c66c6b534cb402048dcd75e008d3db4bd3fb71
Diffstat (limited to 'src/compression/coder.c')
-rw-r--r-- | src/compression/coder.c | 25 |
1 files changed, 11 insertions, 14 deletions
diff --git a/src/compression/coder.c b/src/compression/coder.c index cf89140..d51e8cd 100644 --- a/src/compression/coder.c +++ b/src/compression/coder.c @@ -1,7 +1,7 @@ /* This code is part of the tng compression routines. * - * Written by Daniel Spangberg - * Copyright (c) 2010, 2013, The GROMACS development team. + * Written by Daniel Spangberg and Magnus Lundborg + * Copyright (c) 2010, 2013-2014 The GROMACS development team. * * * This program is free software; you can redistribute it and/or @@ -44,19 +44,17 @@ void DECLSPECDLLEXPORT Ptngc_coder_deinit(struct coder *coder_inst) TNG_INLINE void DECLSPECDLLEXPORT Ptngc_out8bits(struct coder *coder_inst, unsigned char **output) { - int pack_temporary_bits=coder_inst->pack_temporary_bits; - unsigned int pack_temporary=coder_inst->pack_temporary; - while (pack_temporary_bits>=8) + while (coder_inst->pack_temporary_bits>=8) { - unsigned int mask=~(0xFFU<<(pack_temporary_bits-8)); - unsigned char out=(unsigned char)(pack_temporary>>(pack_temporary_bits-8)); + unsigned int mask; + unsigned char out; + coder_inst->pack_temporary_bits-=8; + mask=~(0xFFU<<(coder_inst->pack_temporary_bits)); + out=(unsigned char)(coder_inst->pack_temporary>>(coder_inst->pack_temporary_bits)); **output=out; (*output)++; - pack_temporary_bits-=8; - pack_temporary&=mask; + coder_inst->pack_temporary&=mask; } - coder_inst->pack_temporary_bits=pack_temporary_bits; - coder_inst->pack_temporary=pack_temporary; } void DECLSPECDLLEXPORT Ptngc_write_pattern(struct coder *coder_inst, unsigned int pattern, @@ -102,11 +100,11 @@ void DECLSPECDLLEXPORT Ptngc_write32bits(struct coder *coder_inst,unsigned int v while (nbits>8) { /* Make room for the bits. */ + nbits-=8; coder_inst->pack_temporary<<=8; coder_inst->pack_temporary_bits+=8; - coder_inst->pack_temporary|=(value&mask)>>(nbits-8); + coder_inst->pack_temporary|=(value&mask)>>(nbits); Ptngc_out8bits(coder_inst,output_ptr); - nbits-=8; mask>>=8; } if (nbits) @@ -246,7 +244,6 @@ unsigned char DECLSPECDLLEXPORT *Ptngc_pack_array(struct coder *coder_inst, { int item=input[k*3*natoms+i*3+j]; pval[cnt++]=(unsigned int)(item+most_negative); - } if (speed>=5) bwlzh_compress(pval,n,output+4,length); |