static dt_ymd_t __daisy_to_ymd(dt_daisy_t that) { dt_daisy_t j00; unsigned int doy; unsigned int y; struct __md_s md; if (UNLIKELY(that == 0)) { return (dt_ymd_t){.u = 0}; } y = __daisy_get_year(that); j00 = __jan00_daisy(y); doy = that - j00; md = __yday_get_md(y, doy); #if defined HAVE_ANON_STRUCTS_INIT return (dt_ymd_t){.y = y, .m = md.m, .d = md.d}; #else /* !HAVE_ANON_STRUCTS_INIT */ { dt_ymd_t res; res.y = y; res.m = md.m; res.d = md.d; return res; } #endif /* HAVE_ANON_STRUCTS_INIT */ } static dt_ymcw_t __daisy_to_ymcw(dt_daisy_t that) { dt_ymd_t tmp; unsigned int c; unsigned int w; if (UNLIKELY(that == 0)) { return (dt_ymcw_t){.u = 0}; } tmp = __daisy_to_ymd(that); c = __ymd_get_count(tmp); w = __daisy_get_wday(that); #if defined HAVE_ANON_STRUCTS_INIT return (dt_ymcw_t){.y = tmp.y, .m = tmp.m, .c = c, .w = w}; #else { dt_ymcw_t res; res.y = tmp.y; res.m = tmp.m; res.c = c; res.w = w; return res; } #endif } static dt_ywd_t __daisy_to_ywd(dt_daisy_t that) { unsigned int wk = (that + 6) / 7; unsigned int wd = (that + 6) % 7; unsigned int y; unsigned int yw; dt_ywd_t res; /* get an estimate for the year and readjust */ y = __daisy_get_year(that); /* get the cumulative week count */ if (UNLIKELY((yw = wk - __get_cumwk(y)) == 0)) { y--; yw = __get_isowk(y); } else if (UNLIKELY(yw > __get_isowk(y))) { /* hanging over into the new year */ yw = 1U; y++; } /* final assignment */ res.y = y; res.c = yw; res.w = (wd + 1U) % 7U; return res; } #endif /* ASPECT_CONV */ #if defined ASPECT_ADD && !defined DAISY_ASPECT_ADD_ #define DAISY_ASPECT_ADD_ #define ASPECT_GETTERS #include "daisy.c" #undef ASPECT_GETTERS static dt_daisy_t __daisy_add_d(dt_daisy_t d, int n) { /* add N days to D */ d += n; return d; } static dt_daisy_t __daisy_add_b(dt_daisy_t d, int n) { /* add N business days to D */ dt_dow_t dow = __daisy_get_wday(d); int equ = __get_d_equiv(dow, n); d += equ; return d; }
DEFUN __attribute__((const, pure)) dt_ymd_t __daisy_to_ymd(dt_daisy_t that) { dt_daisy_t j00; unsigned int doy; unsigned int y; struct __md_s md; if (UNLIKELY(that == 0)) { return (dt_ymd_t){.u = 0}; } else if (UNLIKELY(!(y = __daisy_get_year(that)))) { return (dt_ymd_t){.u = 0}; } j00 = __jan00_daisy(y); doy = that - j00; md = __yday_get_md(y, doy); #if defined HAVE_ANON_STRUCTS_INIT return (dt_ymd_t){.y = y, .m = md.m, .d = md.d}; #else /* !HAVE_ANON_STRUCTS_INIT */ { dt_ymd_t res; res.y = y; res.m = md.m; res.d = md.d; return res; } #endif /* HAVE_ANON_STRUCTS_INIT */ } static __attribute__((const, pure)) dt_ymcw_t __daisy_to_ymcw(dt_daisy_t that) { dt_ymd_t tmp; unsigned int c; unsigned int w; if (UNLIKELY(that == 0)) { return (dt_ymcw_t){.u = 0}; } tmp = __daisy_to_ymd(that); c = __ymd_get_count(tmp); w = __daisy_get_wday(that); #if defined HAVE_ANON_STRUCTS_INIT return (dt_ymcw_t){.y = tmp.y, .m = tmp.m, .c = c, .w = w}; #else { dt_ymcw_t res; res.y = tmp.y; res.m = tmp.m; res.c = c; res.w = w; return res; } #endif } static __attribute__((const, pure)) dt_ywd_t __daisy_to_ywd(dt_daisy_t that) { const unsigned int wd = (that + GREG_DAYS_P_WEEK - 1) % GREG_DAYS_P_WEEK; dt_dow_t dow = (dt_dow_t)(wd + 1U); unsigned int y = __daisy_get_year(that); int yd = that - __jan00_daisy(y); return __make_ywd_yd_dow(y, yd, dow); } static __attribute__((const, pure)) dt_yd_t __daisy_to_yd(dt_daisy_t d) { int yd = __daisy_get_yday(d); unsigned int y = __daisy_get_year(d); #if defined HAVE_ANON_STRUCTS_INIT return (dt_yd_t){.y = y, .d = yd}; #else dt_yd_t res; res.y = y; res.d = yd; return res; #endif } #endif /* ASPECT_CONV */ #if defined ASPECT_ADD && !defined DAISY_ASPECT_ADD_ #define DAISY_ASPECT_ADD_ #define ASPECT_GETTERS #include "daisy.c" #undef ASPECT_GETTERS static __attribute__((const, pure)) dt_daisy_t __daisy_add_d(dt_daisy_t d, int n) { /* add N days to D */ d += n; return d; } static __attribute__((const, pure)) dt_daisy_t __daisy_add_b(dt_daisy_t d, int n) { /* add N business days to D */ dt_dow_t dow = __daisy_get_wday(d); int equ = __get_d_equiv(dow, n); d += equ; return d; }