misc.c 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <sys/types.h>
  5. #include <unistd.h>
  6. #include <rpc/types.h>
  7. #include <rpc/xdr.h>
  8. #include <grass/raster.h>
  9. #include "G3d_intern.h"
  10. /*---------------------------------------------------------------------------*/
  11. int G3d_g3dType2cellType(int g3dType)
  12. {
  13. if (g3dType == FCELL_TYPE)
  14. return FCELL_TYPE;
  15. return DCELL_TYPE;
  16. }
  17. /*---------------------------------------------------------------------------*/
  18. void
  19. G3d_copyFloat2Double(const float *src, int offsSrc, double *dst, int offsDst,
  20. int nElts)
  21. {
  22. int i;
  23. src += offsSrc;
  24. dst += offsDst;
  25. for (i = 0; i < nElts; i++)
  26. dst[i] = (double)src[i];
  27. }
  28. /*---------------------------------------------------------------------------*/
  29. void
  30. G3d_copyDouble2Float(const double *src, int offsSrc, float *dst, int offsDst,
  31. int nElts)
  32. {
  33. int i;
  34. src += offsSrc;
  35. dst += offsDst;
  36. for (i = 0; i < nElts; i++)
  37. dst[i] = (float)src[i];
  38. }
  39. /*---------------------------------------------------------------------------*/
  40. void
  41. G3d_copyValues(const void *src, int offsSrc, int typeSrc, void *dst,
  42. int offsDst, int typeDst, int nElts)
  43. {
  44. int eltLength;
  45. if ((typeSrc == FCELL_TYPE) && (typeDst == DCELL_TYPE)) {
  46. G3d_copyFloat2Double(src, offsSrc, dst, offsDst, nElts);
  47. return;
  48. }
  49. if ((typeSrc == DCELL_TYPE) && (typeDst == FCELL_TYPE)) {
  50. G3d_copyDouble2Float(src, offsSrc, dst, offsDst, nElts);
  51. return;
  52. }
  53. eltLength = G3d_length(typeSrc);
  54. src = G_incr_void_ptr(src, eltLength * offsSrc);
  55. dst = G_incr_void_ptr(dst, eltLength * offsDst);
  56. memcpy(dst, src, nElts * eltLength);
  57. }
  58. /*---------------------------------------------------------------------------*/
  59. int G3d_length(int t)
  60. {
  61. if (!G3D_IS_CORRECT_TYPE(t))
  62. G3d_fatalError("G3d_length: invalid type");
  63. if (t == FCELL_TYPE)
  64. return sizeof(FCELL);
  65. if (t == DCELL_TYPE)
  66. return sizeof(DCELL);
  67. return 0;
  68. }
  69. int G3d_externLength(int t)
  70. {
  71. if (!G3D_IS_CORRECT_TYPE(t))
  72. G3d_fatalError("G3d_externLength: invalid type");
  73. if (t == FCELL_TYPE)
  74. return G3D_XDR_FLOAT_LENGTH;
  75. if (t == DCELL_TYPE)
  76. return G3D_XDR_DOUBLE_LENGTH;
  77. return 0;
  78. }