incr2.c 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /*
  2. * Copyright (C) 1995. Bill Brown <brown@gis.uiuc.edu> & Michael Shapiro
  3. *
  4. * This program is free software under the GPL (>=v2)
  5. * Read the file GPL.TXT coming with GRASS for details.
  6. */
  7. #include <grass/datetime.h>
  8. /*!
  9. * \brief
  10. *
  11. * Returns:
  12. * <b>datetime_check_increment</b>(src, incr) == 0
  13. *
  14. * \param src
  15. * \param incr
  16. * \return int
  17. */
  18. int datetime_is_valid_increment(const DateTime * src, const DateTime * incr)
  19. {
  20. return datetime_check_increment(src, incr) == 0;
  21. }
  22. /*!
  23. * \brief
  24. *
  25. * This checks if the type of 'incr' is valid for incrementing/decrementing 'src'.
  26. * The type (mode/from/to) of the 'src' can be anything.
  27. * The incr.mode must be RELATIVE
  28. * A timezone in 'src' is allowed - it's presence is ignored.
  29. * To aid in setting the 'incr' type, see <b>datetime_get_increment_type()</b>.
  30. * Returns:
  31. * <ul>
  32. <li> 0 valid increment
  33. </li>
  34. <li> 1 src is not a legal DateTime, error code/msg are those set by
  35. * <b>datetime_is_valid_type()</b>
  36. </li>
  37. <li> 2 incr is not a legal DateTime, error code/msg are those set by
  38. * <b>datetime_is_valid_type()</b>
  39. </li>
  40. <li> -1 incr.mode not relative
  41. </li>
  42. <li> -2 incr more precise that src
  43. </li>
  44. <li> -3 illegal incr, must be YEAR-MONTH
  45. </li>
  46. <li> -4 illegal incr, must be DAY-SECOND
  47. </li></ul>
  48. *
  49. * \param src
  50. * \param incr
  51. * \return int
  52. */
  53. int datetime_check_increment(const DateTime * src, const DateTime * incr)
  54. {
  55. if (!datetime_is_valid_type(src))
  56. return 1;
  57. if (!datetime_is_valid_type(incr))
  58. return 2;
  59. if (!datetime_is_relative(incr))
  60. return datetime_error(-1, "datetime increment mode not relative");
  61. if (incr->to > src->to)
  62. return datetime_error(-2, "datetime increment too precise");
  63. if (datetime_in_interval_year_month(src->to) &&
  64. !datetime_in_interval_year_month(incr->to))
  65. return datetime_error(-3, "illegal datetime increment interval");
  66. if (datetime_in_interval_day_second(src->to) &&
  67. !datetime_in_interval_day_second(incr->to))
  68. return datetime_error(-4, "illegal datetime increment interval");
  69. return 0;
  70. }