summaryrefslogtreecommitdiff
path: root/src/compression/coder.c
diff options
context:
space:
mode:
authorMagnus Lundborg <lundborg.magnus@gmail.com>2013-10-08 10:21:02 (GMT)
committerMagnus Lundborg <lundborg.magnus@gmail.com>2013-10-08 10:24:24 (GMT)
commit0fad649af860bebdc3b4e422700b721c0f09007d (patch)
tree06d260b79f73108586dff39c68001793124862c7 /src/compression/coder.c
parent5b70fd5f6fd645a7f827c3eae9d0c5adf1b69bbf (diff)
Fixing bugs reading data.
Also make compression slightly faster.
Diffstat (limited to 'src/compression/coder.c')
-rw-r--r--src/compression/coder.c36
1 files changed, 27 insertions, 9 deletions
diff --git a/src/compression/coder.c b/src/compression/coder.c
index a64e741..a9a9117 100644
--- a/src/compression/coder.c
+++ b/src/compression/coder.c
@@ -18,6 +18,20 @@
#include "coder.h"
#include "warnmalloc.h"
+#ifndef USE_WINDOWS
+#if defined(WIN32) || defined(_WIN32) || defined(WIN64) || defined(_WIN64)
+#define USE_WINDOWS
+#endif /* win32... */
+#endif /* not defined USE_WINDOWS */
+
+#ifdef USE_WINDOWS
+#define TNG_INLINE __inline
+#define TNG_SNPRINTF _snprintf
+#else
+#define TNG_INLINE inline
+#define TNG_SNPRINTF snprintf
+#endif
+
struct coder *Ptngc_coder_init(void)
{
struct coder *coder=warnmalloc(sizeof *coder);
@@ -30,17 +44,21 @@ void Ptngc_coder_deinit(struct coder *coder)
free(coder);
}
-void Ptngc_out8bits(struct coder *coder, unsigned char **output)
+TNG_INLINE void Ptngc_out8bits(struct coder *coder, unsigned char **output)
{
- while (coder->pack_temporary_bits>=8)
+ int pack_temporary_bits=coder->pack_temporary_bits;
+ unsigned int pack_temporary=coder->pack_temporary;
+ while (pack_temporary_bits>=8)
{
- unsigned int mask=~(0xFFU<<(coder->pack_temporary_bits-8));
- unsigned char out=(unsigned char)(coder->pack_temporary>>(coder->pack_temporary_bits-8));
+ unsigned int mask=~(0xFFU<<(pack_temporary_bits-8));
+ unsigned char out=(unsigned char)(pack_temporary>>(pack_temporary_bits-8));
**output=out;
(*output)++;
- coder->pack_temporary_bits-=8;
- coder->pack_temporary&=mask;
- }
+ pack_temporary_bits-=8;
+ pack_temporary&=mask;
+ }
+ coder->pack_temporary_bits=pack_temporary_bits;
+ coder->pack_temporary=pack_temporary;
}
void Ptngc_write_pattern(struct coder *coder,unsigned int pattern, int nbits, unsigned char **output)
@@ -62,7 +80,7 @@ void Ptngc_write_pattern(struct coder *coder,unsigned int pattern, int nbits, un
}
/* Write up to 24 bits */
-void Ptngc_writebits(struct coder *coder,unsigned int value,int nbits, unsigned char **output_ptr)
+TNG_INLINE void Ptngc_writebits(struct coder *coder,unsigned int value,int nbits, unsigned char **output_ptr)
{
/* Make room for the bits. */
coder->pack_temporary<<=nbits;
@@ -360,7 +378,7 @@ static int unpack_array_stop_bits(struct coder *coder,unsigned char *packed,int
if ((pattern%2)==0)
s=-s;
output[i]=s;
- }
+ }
return 0;
}
contact: Jan Huwald // Impressum