xdr.c 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. #include <stdlib.h>
  2. #include <grass/raster.h>
  3. #include "R.h"
  4. static void swap_float(void *dstp, const void *srcp) {
  5. unsigned char *dst = (unsigned char *) dstp;
  6. const unsigned char *src = (const unsigned char *) srcp;
  7. if (R__.little_endian) {
  8. dst[0] = src[3];
  9. dst[1] = src[2];
  10. dst[2] = src[1];
  11. dst[3] = src[0];
  12. }
  13. else
  14. memcpy(dst, src, 4);
  15. }
  16. static void swap_double(void *dstp, const void *srcp) {
  17. unsigned char *dst = (unsigned char *) dstp;
  18. const unsigned char *src = (const unsigned char *) srcp;
  19. if (R__.little_endian) {
  20. dst[0] = src[7];
  21. dst[1] = src[6];
  22. dst[2] = src[5];
  23. dst[3] = src[4];
  24. dst[4] = src[3];
  25. dst[5] = src[2];
  26. dst[6] = src[1];
  27. dst[7] = src[0];
  28. }
  29. else
  30. memcpy(dst, src, 8);
  31. }
  32. void Rast_xdr_get_float(float *dst, const void *src)
  33. {
  34. swap_float(dst, src);
  35. }
  36. void Rast_xdr_put_float(void *dst, const float *src)
  37. {
  38. swap_float(dst, src);
  39. }
  40. void Rast_xdr_get_double(double *dst, const void *src)
  41. {
  42. swap_double(dst, src);
  43. }
  44. void Rast_xdr_put_double(void *dst, const double *src)
  45. {
  46. swap_double(dst, src);
  47. }