+2001-06-01 Jon Trowbridge <trow@gnu.org>
+
+ * gdate.c (g_date_update_julian): Changed to take a const
+ argument, and then to cast out const.
+ (g_date_update_dmy): Changed to take a const argument, and then
+ cast out const.
+ (g_date_get_weekday): Changed argument to be const.
+ (g_date_get_month): Changed argument to be const.
+ (g_date_get_year): Changed argument to be const.
+ (g_date_get_day): Changed argument to be const.
+ (g_date_get_julian): Changed argument to be const.
+ (g_date_get_day_of_year): Changed argument to be const.
+ (g_date_get_monday_week_of_year): Changed argument to be const.
+ (g_date_get_sunday_week_of_year): Changed argument to be const.
+ (g_date_compare): Changed arguments to be const.
+ (g_date_to_struct_tm): Changed GDate argument to be const.
+ (g_date_strftime): Changed GDate argument to be const.
+ (g_date_clamp): Added. The equivalent of the CLAMP macro for
+ GDates.
+ (g_date_order): Added. Ensure that the first GDate argument
+ preceeds the second, swapping them if necessary.
+ (g_date_days_between): Added. Computes the (signed) number of days
+ between two dates.
+
Mon Jun 4 16:02:57 2001 Owen Taylor <otaylor@redhat.com>
* gstrfuncs.c (g_strup/strdown): to match g_strcasecmp,
+2001-06-01 Jon Trowbridge <trow@gnu.org>
+
+ * gdate.c (g_date_update_julian): Changed to take a const
+ argument, and then to cast out const.
+ (g_date_update_dmy): Changed to take a const argument, and then
+ cast out const.
+ (g_date_get_weekday): Changed argument to be const.
+ (g_date_get_month): Changed argument to be const.
+ (g_date_get_year): Changed argument to be const.
+ (g_date_get_day): Changed argument to be const.
+ (g_date_get_julian): Changed argument to be const.
+ (g_date_get_day_of_year): Changed argument to be const.
+ (g_date_get_monday_week_of_year): Changed argument to be const.
+ (g_date_get_sunday_week_of_year): Changed argument to be const.
+ (g_date_compare): Changed arguments to be const.
+ (g_date_to_struct_tm): Changed GDate argument to be const.
+ (g_date_strftime): Changed GDate argument to be const.
+ (g_date_clamp): Added. The equivalent of the CLAMP macro for
+ GDates.
+ (g_date_order): Added. Ensure that the first GDate argument
+ preceeds the second, swapping them if necessary.
+ (g_date_days_between): Added. Computes the (signed) number of days
+ between two dates.
+
Mon Jun 4 16:02:57 2001 Owen Taylor <otaylor@redhat.com>
* gstrfuncs.c (g_strup/strdown): to match g_strcasecmp,
+2001-06-01 Jon Trowbridge <trow@gnu.org>
+
+ * gdate.c (g_date_update_julian): Changed to take a const
+ argument, and then to cast out const.
+ (g_date_update_dmy): Changed to take a const argument, and then
+ cast out const.
+ (g_date_get_weekday): Changed argument to be const.
+ (g_date_get_month): Changed argument to be const.
+ (g_date_get_year): Changed argument to be const.
+ (g_date_get_day): Changed argument to be const.
+ (g_date_get_julian): Changed argument to be const.
+ (g_date_get_day_of_year): Changed argument to be const.
+ (g_date_get_monday_week_of_year): Changed argument to be const.
+ (g_date_get_sunday_week_of_year): Changed argument to be const.
+ (g_date_compare): Changed arguments to be const.
+ (g_date_to_struct_tm): Changed GDate argument to be const.
+ (g_date_strftime): Changed GDate argument to be const.
+ (g_date_clamp): Added. The equivalent of the CLAMP macro for
+ GDates.
+ (g_date_order): Added. Ensure that the first GDate argument
+ preceeds the second, swapping them if necessary.
+ (g_date_days_between): Added. Computes the (signed) number of days
+ between two dates.
+
Mon Jun 4 16:02:57 2001 Owen Taylor <otaylor@redhat.com>
* gstrfuncs.c (g_strup/strdown): to match g_strcasecmp,
+2001-06-01 Jon Trowbridge <trow@gnu.org>
+
+ * gdate.c (g_date_update_julian): Changed to take a const
+ argument, and then to cast out const.
+ (g_date_update_dmy): Changed to take a const argument, and then
+ cast out const.
+ (g_date_get_weekday): Changed argument to be const.
+ (g_date_get_month): Changed argument to be const.
+ (g_date_get_year): Changed argument to be const.
+ (g_date_get_day): Changed argument to be const.
+ (g_date_get_julian): Changed argument to be const.
+ (g_date_get_day_of_year): Changed argument to be const.
+ (g_date_get_monday_week_of_year): Changed argument to be const.
+ (g_date_get_sunday_week_of_year): Changed argument to be const.
+ (g_date_compare): Changed arguments to be const.
+ (g_date_to_struct_tm): Changed GDate argument to be const.
+ (g_date_strftime): Changed GDate argument to be const.
+ (g_date_clamp): Added. The equivalent of the CLAMP macro for
+ GDates.
+ (g_date_order): Added. Ensure that the first GDate argument
+ preceeds the second, swapping them if necessary.
+ (g_date_days_between): Added. Computes the (signed) number of days
+ between two dates.
+
Mon Jun 4 16:02:57 2001 Owen Taylor <otaylor@redhat.com>
* gstrfuncs.c (g_strup/strdown): to match g_strcasecmp,
+2001-06-01 Jon Trowbridge <trow@gnu.org>
+
+ * gdate.c (g_date_update_julian): Changed to take a const
+ argument, and then to cast out const.
+ (g_date_update_dmy): Changed to take a const argument, and then
+ cast out const.
+ (g_date_get_weekday): Changed argument to be const.
+ (g_date_get_month): Changed argument to be const.
+ (g_date_get_year): Changed argument to be const.
+ (g_date_get_day): Changed argument to be const.
+ (g_date_get_julian): Changed argument to be const.
+ (g_date_get_day_of_year): Changed argument to be const.
+ (g_date_get_monday_week_of_year): Changed argument to be const.
+ (g_date_get_sunday_week_of_year): Changed argument to be const.
+ (g_date_compare): Changed arguments to be const.
+ (g_date_to_struct_tm): Changed GDate argument to be const.
+ (g_date_strftime): Changed GDate argument to be const.
+ (g_date_clamp): Added. The equivalent of the CLAMP macro for
+ GDates.
+ (g_date_order): Added. Ensure that the first GDate argument
+ preceeds the second, swapping them if necessary.
+ (g_date_days_between): Added. Computes the (signed) number of days
+ between two dates.
+
Mon Jun 4 16:02:57 2001 Owen Taylor <otaylor@redhat.com>
* gstrfuncs.c (g_strup/strdown): to match g_strcasecmp,
+2001-06-01 Jon Trowbridge <trow@gnu.org>
+
+ * gdate.c (g_date_update_julian): Changed to take a const
+ argument, and then to cast out const.
+ (g_date_update_dmy): Changed to take a const argument, and then
+ cast out const.
+ (g_date_get_weekday): Changed argument to be const.
+ (g_date_get_month): Changed argument to be const.
+ (g_date_get_year): Changed argument to be const.
+ (g_date_get_day): Changed argument to be const.
+ (g_date_get_julian): Changed argument to be const.
+ (g_date_get_day_of_year): Changed argument to be const.
+ (g_date_get_monday_week_of_year): Changed argument to be const.
+ (g_date_get_sunday_week_of_year): Changed argument to be const.
+ (g_date_compare): Changed arguments to be const.
+ (g_date_to_struct_tm): Changed GDate argument to be const.
+ (g_date_strftime): Changed GDate argument to be const.
+ (g_date_clamp): Added. The equivalent of the CLAMP macro for
+ GDates.
+ (g_date_order): Added. Ensure that the first GDate argument
+ preceeds the second, swapping them if necessary.
+ (g_date_days_between): Added. Computes the (signed) number of days
+ between two dates.
+
Mon Jun 4 16:02:57 2001 Owen Taylor <otaylor@redhat.com>
* gstrfuncs.c (g_strup/strdown): to match g_strcasecmp,
+2001-06-01 Jon Trowbridge <trow@gnu.org>
+
+ * gdate.c (g_date_update_julian): Changed to take a const
+ argument, and then to cast out const.
+ (g_date_update_dmy): Changed to take a const argument, and then
+ cast out const.
+ (g_date_get_weekday): Changed argument to be const.
+ (g_date_get_month): Changed argument to be const.
+ (g_date_get_year): Changed argument to be const.
+ (g_date_get_day): Changed argument to be const.
+ (g_date_get_julian): Changed argument to be const.
+ (g_date_get_day_of_year): Changed argument to be const.
+ (g_date_get_monday_week_of_year): Changed argument to be const.
+ (g_date_get_sunday_week_of_year): Changed argument to be const.
+ (g_date_compare): Changed arguments to be const.
+ (g_date_to_struct_tm): Changed GDate argument to be const.
+ (g_date_strftime): Changed GDate argument to be const.
+ (g_date_clamp): Added. The equivalent of the CLAMP macro for
+ GDates.
+ (g_date_order): Added. Ensure that the first GDate argument
+ preceeds the second, swapping them if necessary.
+ (g_date_days_between): Added. Computes the (signed) number of days
+ between two dates.
+
Mon Jun 4 16:02:57 2001 Owen Taylor <otaylor@redhat.com>
* gstrfuncs.c (g_strup/strdown): to match g_strcasecmp,
+2001-06-01 Jon Trowbridge <trow@gnu.org>
+
+ * gdate.c (g_date_update_julian): Changed to take a const
+ argument, and then to cast out const.
+ (g_date_update_dmy): Changed to take a const argument, and then
+ cast out const.
+ (g_date_get_weekday): Changed argument to be const.
+ (g_date_get_month): Changed argument to be const.
+ (g_date_get_year): Changed argument to be const.
+ (g_date_get_day): Changed argument to be const.
+ (g_date_get_julian): Changed argument to be const.
+ (g_date_get_day_of_year): Changed argument to be const.
+ (g_date_get_monday_week_of_year): Changed argument to be const.
+ (g_date_get_sunday_week_of_year): Changed argument to be const.
+ (g_date_compare): Changed arguments to be const.
+ (g_date_to_struct_tm): Changed GDate argument to be const.
+ (g_date_strftime): Changed GDate argument to be const.
+ (g_date_clamp): Added. The equivalent of the CLAMP macro for
+ GDates.
+ (g_date_order): Added. Ensure that the first GDate argument
+ preceeds the second, swapping them if necessary.
+ (g_date_days_between): Added. Computes the (signed) number of days
+ between two dates.
+
Mon Jun 4 16:02:57 2001 Owen Taylor <otaylor@redhat.com>
* gstrfuncs.c (g_strup/strdown): to match g_strcasecmp,
g_date_subtract_months
g_date_add_years
g_date_subtract_years
+g_date_days_between
g_date_compare
+g_date_clamp
+g_date_order
<SUBSECTION>
g_date_get_day
@n_years: Number of years to move
+<!-- ##### FUNCTION g_date_days_between ##### -->
+<para>
+Compute the number of days between two dates.
+If @date2 is prior to @date1, the returned value is negative.
+Both dates must be valid.
+</para>
+
+@date1: The first date
+@date2: The second date
+@Returns: The number of days between @date1 and @date2
+
+
<!-- ##### FUNCTION g_date_compare ##### -->
<para>\r
<function>qsort()</function>-style comparsion function for dates. Both\r
greater than zero if @lhs is greater than @rhs
+<!-- ##### FUNCTION g_date_clamp ##### -->
+<para>
+If @date is prior to @min_date, set @date equal to @min_date.
+If @date falls after @max_date, set @date equal to @max_date.
+Either @min_date and @max_date may be %NULL. All non-%NULL dates
+must be valid.
+</para>
+
+@date: Date to clamp
+@min_date: Minimum accepted value for @date
+@max_date: Maximum accepted value for @date
+
+
+<!-- ##### FUNCTION g_date_order ##### -->
+<para>
+Check if @date1 is less than or equal to @date2,
+and swap the values if this is not the case.
+</para>
+
+@date1: The first date
+@date2: The second date
+
+
<!-- ##### FUNCTION g_date_get_day ##### -->
<para>\r
Return the day of the month; the #GDate must be valid.\r
@user_data:
@Returns:
-
<!--
Local variables:
mode: sgml
}
gboolean
-g_date_valid (GDate *d)
+g_date_valid (const GDate *d)
{
g_return_val_if_fail (d != NULL, FALSE);
* Jan 1, Year 1
*/
static void
-g_date_update_julian (GDate *d)
+g_date_update_julian (const GDate *const_d)
{
+ GDate *d = (GDate *) const_d;
GDateYear year;
gint index;
}
static void
-g_date_update_dmy (GDate *d)
+g_date_update_dmy (const GDate *const_d)
{
+ GDate *d = (GDate *) const_d;
GDateYear y;
GDateMonth m;
GDateDay day;
}
GDateWeekday
-g_date_get_weekday (GDate *d)
+g_date_get_weekday (const GDate *d)
{
g_return_val_if_fail (d != NULL, G_DATE_BAD_WEEKDAY);
g_return_val_if_fail (g_date_valid (d), G_DATE_BAD_WEEKDAY);
}
GDateMonth
-g_date_get_month (GDate *d)
+g_date_get_month (const GDate *d)
{
g_return_val_if_fail (d != NULL, G_DATE_BAD_MONTH);
g_return_val_if_fail (g_date_valid (d), G_DATE_BAD_MONTH);
}
GDateYear
-g_date_get_year (GDate *d)
+g_date_get_year (const GDate *d)
{
g_return_val_if_fail (d != NULL, G_DATE_BAD_YEAR);
g_return_val_if_fail (g_date_valid (d), G_DATE_BAD_YEAR);
}
GDateDay
-g_date_get_day (GDate *d)
+g_date_get_day (const GDate *d)
{
g_return_val_if_fail (d != NULL, G_DATE_BAD_DAY);
g_return_val_if_fail (g_date_valid (d), G_DATE_BAD_DAY);
}
guint32
-g_date_get_julian (GDate *d)
+g_date_get_julian (const GDate *d)
{
g_return_val_if_fail (d != NULL, G_DATE_BAD_JULIAN);
g_return_val_if_fail (g_date_valid (d), G_DATE_BAD_JULIAN);
}
guint
-g_date_get_day_of_year (GDate *d)
+g_date_get_day_of_year (const GDate *d)
{
gint index;
}
guint
-g_date_get_monday_week_of_year (GDate *d)
+g_date_get_monday_week_of_year (const GDate *d)
{
GDateWeekday wd;
guint day;
}
guint
-g_date_get_sunday_week_of_year (GDate *d)
+g_date_get_sunday_week_of_year (const GDate *d)
{
GDateWeekday wd;
guint day;
return ((day + wd)/7U + (wd == 0 ? 1 : 0));
}
+gint
+g_date_days_between (const GDate *d1,
+ const GDate *d2)
+{
+ g_return_val_if_fail (d1 != NULL, 0);
+ g_return_val_if_fail (d2 != NULL, 0);
+
+ g_return_val_if_fail (g_date_valid (d1), 0);
+ g_return_val_if_fail (g_date_valid (d2), 0);
+
+ return (gint)g_date_get_julian (d2) - (gint)g_date_get_julian (d1);
+}
+
void
g_date_clear (GDate *d, guint ndates)
{
gboolean
-g_date_is_first_of_month (GDate *d)
+g_date_is_first_of_month (const GDate *d)
{
g_return_val_if_fail (d != NULL, FALSE);
g_return_val_if_fail (g_date_valid (d), FALSE);
}
gboolean
-g_date_is_last_of_month (GDate *d)
+g_date_is_last_of_month (const GDate *d)
{
gint index;
}
gint
-g_date_compare (GDate *lhs,
- GDate *rhs)
+g_date_compare (const GDate *lhs,
+ const GDate *rhs)
{
g_return_val_if_fail (lhs != NULL, 0);
g_return_val_if_fail (rhs != NULL, 0);
void
-g_date_to_struct_tm (GDate *d,
+g_date_to_struct_tm (const GDate *d,
struct tm *tm)
{
GDateWeekday day;
tm->tm_isdst = -1; /* -1 means "information not available" */
}
+void
+g_date_clamp (GDate *date,
+ const GDate *min_date,
+ const GDate *max_date)
+{
+ g_return_if_fail (date);
+ g_return_if_fail (g_date_valid (date));
+ if (min_date != NULL)
+ g_return_if_fail (g_date_valid (min_date));
+ if (max_date != NULL)
+ g_return_if_fail (g_date_valid (max_date));
+ if (min_date != NULL && max_date != NULL)
+ g_return_if_fail (g_date_compare (min_date, max_date) <= 0);
+
+ if (min_date && g_date_compare (date, min_date) < 0)
+ *date = *min_date;
+
+ if (max_date && g_date_compare (max_date, date) < 0)
+ *date = *max_date;
+}
+
+void
+g_date_order (GDate *date1,
+ GDate *date2)
+{
+ g_return_if_fail (date1 != NULL);
+ g_return_if_fail (date2 != NULL);
+ g_return_if_fail (g_date_valid (date1));
+ g_return_if_fail (g_date_valid (date2));
+
+ if (g_date_compare (date1, date2) == 1) {
+ GDate tmp = *date1;
+ *date1 = *date2;
+ *date2 = tmp;
+ }
+}
+
gsize
g_date_strftime (gchar *s,
gsize slen,
const gchar *format,
- GDate *d)
+ const GDate *d)
{
struct tm tm;
gsize retval;
* dates (the exceptions are the mutators, since you need those to
* return to validity).
*/
-gboolean g_date_valid (GDate *date);
+gboolean g_date_valid (const GDate *date);
gboolean g_date_valid_day (GDateDay day) G_GNUC_CONST;
gboolean g_date_valid_month (GDateMonth month) G_GNUC_CONST;
gboolean g_date_valid_year (GDateYear year) G_GNUC_CONST;
GDateMonth month,
GDateYear year) G_GNUC_CONST;
-GDateWeekday g_date_get_weekday (GDate *date);
-GDateMonth g_date_get_month (GDate *date);
-GDateYear g_date_get_year (GDate *date);
-GDateDay g_date_get_day (GDate *date);
-guint32 g_date_get_julian (GDate *date);
-guint g_date_get_day_of_year (GDate *date);
+GDateWeekday g_date_get_weekday (const GDate *date);
+GDateMonth g_date_get_month (const GDate *date);
+GDateYear g_date_get_year (const GDate *date);
+GDateDay g_date_get_day (const GDate *date);
+guint32 g_date_get_julian (const GDate *date);
+guint g_date_get_day_of_year (const GDate *date);
/* First monday/sunday is the start of week 1; if we haven't reached
* that day, return 0. These are not ISO weeks of the year; that
* routine needs to be added.
* these functions return the number of weeks, starting on the
* corrsponding day
*/
-guint g_date_get_monday_week_of_year (GDate *date);
-guint g_date_get_sunday_week_of_year (GDate *date);
+guint g_date_get_monday_week_of_year (const GDate *date);
+guint g_date_get_sunday_week_of_year (const GDate *date);
/* If you create a static date struct you need to clear it to get it
* in a sane state before use. You can clear a whole array at
GDateYear y);
void g_date_set_julian (GDate *date,
guint32 julian_date);
-gboolean g_date_is_first_of_month (GDate *date);
-gboolean g_date_is_last_of_month (GDate *date);
+gboolean g_date_is_first_of_month (const GDate *date);
+gboolean g_date_is_last_of_month (const GDate *date);
/* To go forward by some number of weeks just go forward weeks*7 days */
void g_date_add_days (GDate *date,
guint8 g_date_get_monday_weeks_in_year (GDateYear year) G_GNUC_CONST;
guint8 g_date_get_sunday_weeks_in_year (GDateYear year) G_GNUC_CONST;
+/* Returns the number of days between the two dates. If date2 comes
+ before date1, a negative value is return. */
+gint g_date_days_between (const GDate *date1,
+ const GDate *date2);
+
/* qsort-friendly (with a cast...) */
-gint g_date_compare (GDate *lhs,
- GDate *rhs);
-void g_date_to_struct_tm (GDate *date,
+gint g_date_compare (const GDate *lhs,
+ const GDate *rhs);
+void g_date_to_struct_tm (const GDate *date,
struct tm *tm);
+void g_date_clamp (GDate *date,
+ const GDate *min_date,
+ const GDate *max_date);
+
+/* Swap date1 and date2's values if date1 > date2. */
+void g_date_order (GDate *date1, GDate *date2);
+
/* Just like strftime() except you can only use date-related formats.
* Using a time format is undefined.
*/
gsize g_date_strftime (gchar *s,
gsize slen,
const gchar *format,
- GDate *date);
+ const GDate *date);
#ifndef G_DISABLE_DEPRECATED
}
gboolean
-g_date_valid (GDate *d)
+g_date_valid (const GDate *d)
{
g_return_val_if_fail (d != NULL, FALSE);
* Jan 1, Year 1
*/
static void
-g_date_update_julian (GDate *d)
+g_date_update_julian (const GDate *const_d)
{
+ GDate *d = (GDate *) const_d;
GDateYear year;
gint index;
}
static void
-g_date_update_dmy (GDate *d)
+g_date_update_dmy (const GDate *const_d)
{
+ GDate *d = (GDate *) const_d;
GDateYear y;
GDateMonth m;
GDateDay day;
}
GDateWeekday
-g_date_get_weekday (GDate *d)
+g_date_get_weekday (const GDate *d)
{
g_return_val_if_fail (d != NULL, G_DATE_BAD_WEEKDAY);
g_return_val_if_fail (g_date_valid (d), G_DATE_BAD_WEEKDAY);
}
GDateMonth
-g_date_get_month (GDate *d)
+g_date_get_month (const GDate *d)
{
g_return_val_if_fail (d != NULL, G_DATE_BAD_MONTH);
g_return_val_if_fail (g_date_valid (d), G_DATE_BAD_MONTH);
}
GDateYear
-g_date_get_year (GDate *d)
+g_date_get_year (const GDate *d)
{
g_return_val_if_fail (d != NULL, G_DATE_BAD_YEAR);
g_return_val_if_fail (g_date_valid (d), G_DATE_BAD_YEAR);
}
GDateDay
-g_date_get_day (GDate *d)
+g_date_get_day (const GDate *d)
{
g_return_val_if_fail (d != NULL, G_DATE_BAD_DAY);
g_return_val_if_fail (g_date_valid (d), G_DATE_BAD_DAY);
}
guint32
-g_date_get_julian (GDate *d)
+g_date_get_julian (const GDate *d)
{
g_return_val_if_fail (d != NULL, G_DATE_BAD_JULIAN);
g_return_val_if_fail (g_date_valid (d), G_DATE_BAD_JULIAN);
}
guint
-g_date_get_day_of_year (GDate *d)
+g_date_get_day_of_year (const GDate *d)
{
gint index;
}
guint
-g_date_get_monday_week_of_year (GDate *d)
+g_date_get_monday_week_of_year (const GDate *d)
{
GDateWeekday wd;
guint day;
}
guint
-g_date_get_sunday_week_of_year (GDate *d)
+g_date_get_sunday_week_of_year (const GDate *d)
{
GDateWeekday wd;
guint day;
return ((day + wd)/7U + (wd == 0 ? 1 : 0));
}
+gint
+g_date_days_between (const GDate *d1,
+ const GDate *d2)
+{
+ g_return_val_if_fail (d1 != NULL, 0);
+ g_return_val_if_fail (d2 != NULL, 0);
+
+ g_return_val_if_fail (g_date_valid (d1), 0);
+ g_return_val_if_fail (g_date_valid (d2), 0);
+
+ return (gint)g_date_get_julian (d2) - (gint)g_date_get_julian (d1);
+}
+
void
g_date_clear (GDate *d, guint ndates)
{
gboolean
-g_date_is_first_of_month (GDate *d)
+g_date_is_first_of_month (const GDate *d)
{
g_return_val_if_fail (d != NULL, FALSE);
g_return_val_if_fail (g_date_valid (d), FALSE);
}
gboolean
-g_date_is_last_of_month (GDate *d)
+g_date_is_last_of_month (const GDate *d)
{
gint index;
}
gint
-g_date_compare (GDate *lhs,
- GDate *rhs)
+g_date_compare (const GDate *lhs,
+ const GDate *rhs)
{
g_return_val_if_fail (lhs != NULL, 0);
g_return_val_if_fail (rhs != NULL, 0);
void
-g_date_to_struct_tm (GDate *d,
+g_date_to_struct_tm (const GDate *d,
struct tm *tm)
{
GDateWeekday day;
tm->tm_isdst = -1; /* -1 means "information not available" */
}
+void
+g_date_clamp (GDate *date,
+ const GDate *min_date,
+ const GDate *max_date)
+{
+ g_return_if_fail (date);
+ g_return_if_fail (g_date_valid (date));
+ if (min_date != NULL)
+ g_return_if_fail (g_date_valid (min_date));
+ if (max_date != NULL)
+ g_return_if_fail (g_date_valid (max_date));
+ if (min_date != NULL && max_date != NULL)
+ g_return_if_fail (g_date_compare (min_date, max_date) <= 0);
+
+ if (min_date && g_date_compare (date, min_date) < 0)
+ *date = *min_date;
+
+ if (max_date && g_date_compare (max_date, date) < 0)
+ *date = *max_date;
+}
+
+void
+g_date_order (GDate *date1,
+ GDate *date2)
+{
+ g_return_if_fail (date1 != NULL);
+ g_return_if_fail (date2 != NULL);
+ g_return_if_fail (g_date_valid (date1));
+ g_return_if_fail (g_date_valid (date2));
+
+ if (g_date_compare (date1, date2) == 1) {
+ GDate tmp = *date1;
+ *date1 = *date2;
+ *date2 = tmp;
+ }
+}
+
gsize
g_date_strftime (gchar *s,
gsize slen,
const gchar *format,
- GDate *d)
+ const GDate *d)
{
struct tm tm;
gsize retval;
* dates (the exceptions are the mutators, since you need those to
* return to validity).
*/
-gboolean g_date_valid (GDate *date);
+gboolean g_date_valid (const GDate *date);
gboolean g_date_valid_day (GDateDay day) G_GNUC_CONST;
gboolean g_date_valid_month (GDateMonth month) G_GNUC_CONST;
gboolean g_date_valid_year (GDateYear year) G_GNUC_CONST;
GDateMonth month,
GDateYear year) G_GNUC_CONST;
-GDateWeekday g_date_get_weekday (GDate *date);
-GDateMonth g_date_get_month (GDate *date);
-GDateYear g_date_get_year (GDate *date);
-GDateDay g_date_get_day (GDate *date);
-guint32 g_date_get_julian (GDate *date);
-guint g_date_get_day_of_year (GDate *date);
+GDateWeekday g_date_get_weekday (const GDate *date);
+GDateMonth g_date_get_month (const GDate *date);
+GDateYear g_date_get_year (const GDate *date);
+GDateDay g_date_get_day (const GDate *date);
+guint32 g_date_get_julian (const GDate *date);
+guint g_date_get_day_of_year (const GDate *date);
/* First monday/sunday is the start of week 1; if we haven't reached
* that day, return 0. These are not ISO weeks of the year; that
* routine needs to be added.
* these functions return the number of weeks, starting on the
* corrsponding day
*/
-guint g_date_get_monday_week_of_year (GDate *date);
-guint g_date_get_sunday_week_of_year (GDate *date);
+guint g_date_get_monday_week_of_year (const GDate *date);
+guint g_date_get_sunday_week_of_year (const GDate *date);
/* If you create a static date struct you need to clear it to get it
* in a sane state before use. You can clear a whole array at
GDateYear y);
void g_date_set_julian (GDate *date,
guint32 julian_date);
-gboolean g_date_is_first_of_month (GDate *date);
-gboolean g_date_is_last_of_month (GDate *date);
+gboolean g_date_is_first_of_month (const GDate *date);
+gboolean g_date_is_last_of_month (const GDate *date);
/* To go forward by some number of weeks just go forward weeks*7 days */
void g_date_add_days (GDate *date,
guint8 g_date_get_monday_weeks_in_year (GDateYear year) G_GNUC_CONST;
guint8 g_date_get_sunday_weeks_in_year (GDateYear year) G_GNUC_CONST;
+/* Returns the number of days between the two dates. If date2 comes
+ before date1, a negative value is return. */
+gint g_date_days_between (const GDate *date1,
+ const GDate *date2);
+
/* qsort-friendly (with a cast...) */
-gint g_date_compare (GDate *lhs,
- GDate *rhs);
-void g_date_to_struct_tm (GDate *date,
+gint g_date_compare (const GDate *lhs,
+ const GDate *rhs);
+void g_date_to_struct_tm (const GDate *date,
struct tm *tm);
+void g_date_clamp (GDate *date,
+ const GDate *min_date,
+ const GDate *max_date);
+
+/* Swap date1 and date2's values if date1 > date2. */
+void g_date_order (GDate *date1, GDate *date2);
+
/* Just like strftime() except you can only use date-related formats.
* Using a time format is undefined.
*/
gsize g_date_strftime (gchar *s,
gsize slen,
const gchar *format,
- GDate *date);
+ const GDate *date);
#ifndef G_DISABLE_DEPRECATED