xdr.c 1.1 KB

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