MCPcopy Create free account
hub / github.com/bloomberg/comdb2 / interval_cmp

Function interval_cmp

db/types.c:14236–14284  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

14234}
14235
14236int interval_cmp(const intv_t *i1, const intv_t *i2)
14237{
14238 int rc;
14239 if (i1->type != i2->type &&
14240 ((i1->type == INTV_DS_TYPE && i2->type != INTV_DSUS_TYPE) ||
14241 (i1->type == INTV_DSUS_TYPE && i2->type != INTV_DS_TYPE)))
14242 bad:
14243 return i1->sign * memcmp(&i1->u, &i2->u, sizeof(i1->u));
14244 if ((rc = i1->sign - i2->sign) != 0)
14245 return rc < 0 ? -1 : 1;
14246 switch (i1->type) {
14247 case INTV_YM_TYPE:
14248 if (i1->u.ym.years != i2->u.ym.years)
14249 return i1->sign * (i1->u.ym.years - i2->u.ym.years);
14250 if (i1->u.ym.months != i2->u.ym.months)
14251 return i1->sign * (i1->u.ym.months - i2->u.ym.months);
14252 return 0;
14253 case INTV_DS_TYPE:
14254 if (i1->u.ds.days != i2->u.ds.days)
14255 return i1->sign * (i1->u.ds.days - i2->u.ds.days);
14256 if (i1->u.ds.hours != i2->u.ds.hours)
14257 return i1->sign * (i1->u.ds.hours - i2->u.ds.hours);
14258 if (i1->u.ds.mins != i2->u.ds.mins)
14259 return i1->sign * (i1->u.ds.mins - i2->u.ds.mins);
14260 if (i1->u.ds.sec != i2->u.ds.sec)
14261 return i1->sign * (i1->u.ds.sec - i2->u.ds.sec);
14262 if (i1->type == i2->type && i1->u.ds.frac != i2->u.ds.frac)
14263 return i1->sign * (i1->u.ds.frac - i2->u.ds.frac);
14264 if (i1->type != i2->type && i1->u.ds.frac * 1000 != i2->u.ds.frac)
14265 return i1->sign * (i1->u.ds.frac * 1000 - i2->u.ds.frac);
14266 return 0;
14267 case INTV_DSUS_TYPE:
14268 if (i1->u.ds.days != i2->u.ds.days)
14269 return i1->sign * (i1->u.ds.days - i2->u.ds.days);
14270 if (i1->u.ds.hours != i2->u.ds.hours)
14271 return i1->sign * (i1->u.ds.hours - i2->u.ds.hours);
14272 if (i1->u.ds.mins != i2->u.ds.mins)
14273 return i1->sign * (i1->u.ds.mins - i2->u.ds.mins);
14274 if (i1->u.ds.sec != i2->u.ds.sec)
14275 return i1->sign * (i1->u.ds.sec - i2->u.ds.sec);
14276 if (i1->type == i2->type && i1->u.ds.frac != i2->u.ds.frac)
14277 return i1->sign * (i1->u.ds.frac - i2->u.ds.frac);
14278 if (i1->type != i2->type && i1->u.ds.frac != i2->u.ds.frac * 1000)
14279 return i1->sign * (i1->u.ds.frac - i2->u.ds.frac * 1000);
14280 return 0;
14281 default:
14282 goto bad;
14283 }
14284}
14285
14286int int_to_interval(int64_t i, uint64_t *n0, uint64_t *n1, int *sign)
14287{

Callers 2

compareDateTimeIntervalFunction · 0.85
intv_cmpFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected