12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- #include "raster3d_intern.h"
- /*---------------------------------------------------------------------------*/
- int Rast3d_long_encode(long *source, unsigned char *dst, int nofNums)
- {
- long *src, d;
- int eltLength, nBytes;
- unsigned char *dstStop, tmp;
- eltLength = RASTER3D_LONG_LENGTH;
- nBytes = 8;
- d = 1;
- while (eltLength--) {
- dstStop = dst + nofNums;
- src = source;
- while (dst != dstStop) {
- tmp = ((*src++ / d) % 256);
- if (tmp != 0)
- nBytes = RASTER3D_MIN(nBytes, eltLength);
- *dst++ = tmp;
- }
- d *= 256;
- }
- return RASTER3D_LONG_LENGTH - nBytes;
- }
- /*---------------------------------------------------------------------------*/
- void
- Rast3d_long_decode(unsigned char *source, long *dst, int nofNums, int longNbytes)
- {
- long *dest;
- int eltLength;
- unsigned char *srcStop;
- eltLength = longNbytes;
- source += nofNums * eltLength - 1;
- eltLength--;
- srcStop = source - nofNums;
- dest = dst;
- dest += nofNums - 1;
- while (source != srcStop) {
- *dest = *source--;
- if ((eltLength >= RASTER3D_LONG_LENGTH) && (*dest != 0))
- Rast3d_fatal_error("Rast3d_long_decode: decoded long too long");
- dest--;
- }
- while (eltLength--) {
- srcStop = source - nofNums;
- dest = dst;
- dest += nofNums - 1;
- while (source != srcStop) {
- *dest *= 256;
- *dest += *source--;
- if ((eltLength >= RASTER3D_LONG_LENGTH) && (*dest != 0))
- Rast3d_fatal_error("Rast3d_long_decode: decoded long too long");
- dest--;
- }
- }
- }
|