/*
 * $Id: macdate.c,v 0.70 2005/08/09 15:47:00 dankogai Exp $
 */

#include <DateTimeUtils.h>
# include <math.h>

#define EPOCH_DELTA 2082844800

/*
 *  I HATE TINKERING WITH BITS!
 */

static double 
UDT2D(UTCDateTime *u){
    SInt64 q;
    double d;
    q  = u->highSeconds;              q <<= 32;
    q += u->lowSeconds - EPOCH_DELTA; q <<= 16; 
    q += u->fraction;
    d = q;
    return (d / 65536);
}

static UTCDateTime *
D2UDT(double d, UTCDateTime *u){
    SInt64 q = (d + EPOCH_DELTA) * 65536;

    u->highSeconds =  q >> 48;
    u->lowSeconds  = (q & 0x0000ffffffff0000) >> 16;
    u->fraction    =  q & 0x000000000000ffff;

    /* fprintf(stderr, "%f-> %qd -> %u,%u,%u\n", d, q, u->highSeconds, u->lowSeconds, u->fraction); */

    return u;
}