xdr.c 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. /*!
  2. * \file lib/gis/xdr.c
  3. *
  4. * \brief GIS Library - XDR related functions.
  5. *
  6. * (C) 2012-2014 by the GRASS Development Team
  7. *
  8. * This program is free software under the GNU General Public License
  9. * (>=v2). Read the file COPYING that comes with GRASS for details.
  10. *
  11. * \author Glynn Clements
  12. */
  13. #include <stdlib.h>
  14. #include <string.h>
  15. #include <grass/gis.h>
  16. #include "G.h"
  17. static void swap_int(void *dstp, const void *srcp) {
  18. unsigned char *dst = (unsigned char *) dstp;
  19. const unsigned char *src = (const unsigned char *) srcp;
  20. if (G__.little_endian) {
  21. dst[0] = src[3];
  22. dst[1] = src[2];
  23. dst[2] = src[1];
  24. dst[3] = src[0];
  25. }
  26. else
  27. memcpy(dst, src, 4);
  28. }
  29. static void swap_float(void *dstp, const void *srcp) {
  30. unsigned char *dst = (unsigned char *) dstp;
  31. const unsigned char *src = (const unsigned char *) srcp;
  32. if (G__.little_endian) {
  33. dst[0] = src[3];
  34. dst[1] = src[2];
  35. dst[2] = src[1];
  36. dst[3] = src[0];
  37. }
  38. else
  39. memcpy(dst, src, 4);
  40. }
  41. static void swap_double(void *dstp, const void *srcp) {
  42. unsigned char *dst = (unsigned char *) dstp;
  43. const unsigned char *src = (const unsigned char *) srcp;
  44. if (G__.little_endian) {
  45. dst[0] = src[7];
  46. dst[1] = src[6];
  47. dst[2] = src[5];
  48. dst[3] = src[4];
  49. dst[4] = src[3];
  50. dst[5] = src[2];
  51. dst[6] = src[1];
  52. dst[7] = src[0];
  53. }
  54. else
  55. memcpy(dst, src, 8);
  56. }
  57. void G_xdr_get_int(int *dst, const void *src)
  58. {
  59. swap_int(dst, src);
  60. }
  61. void G_xdr_put_int(void *dst, const int *src)
  62. {
  63. swap_int(dst, src);
  64. }
  65. void G_xdr_get_float(float *dst, const void *src)
  66. {
  67. swap_float(dst, src);
  68. }
  69. void G_xdr_put_float(void *dst, const float *src)
  70. {
  71. swap_float(dst, src);
  72. }
  73. void G_xdr_get_double(double *dst, const void *src)
  74. {
  75. swap_double(dst, src);
  76. }
  77. void G_xdr_put_double(void *dst, const double *src)
  78. {
  79. swap_double(dst, src);
  80. }