// -*- tab-width: 4; Mode: C++; c-basic-offset: 4; indent-tabs-mode: nil -*-

#if 0 // currently unused

struct DataPoint {
    unsigned long x;
    long y;
};

DataPoint history[ALTITUDE_HISTORY_LENGTH];               // Collection of (x,y) points to regress a rate of change from
unsigned char hindex;   // Index in history for the current data point

unsigned long xoffset;
unsigned char n;

// Intermediate variables for regression calculation
long xi;
long yi;
long xiyi;
unsigned long xi2;

void add_altitude_data(unsigned long xl, long y)
{
    //Reset the regression if our X variable overflowed
    if (xl < xoffset)
        n = 0;

    //To allow calculation of sum(xi*yi), make sure X hasn't exceeded 2^32/2^15/length
    if (xl - xoffset > 131072/ALTITUDE_HISTORY_LENGTH)
        n = 0;

    if (n == ALTITUDE_HISTORY_LENGTH) {
        xi -= history[hindex].x;
        yi -= history[hindex].y;
        xiyi -= (long)history[hindex].x * history[hindex].y;
        xi2 -= history[hindex].x * history[hindex].x;
    } else {
        if (n == 0) {
            xoffset = xl;
            xi = 0;
            yi = 0;
            xiyi = 0;
            xi2 = 0;
        }
        n++;
    }

    history[hindex].x = xl - xoffset;
    history[hindex].y = y;

    xi += history[hindex].x;
    yi += history[hindex].y;
    xiyi += (long)history[hindex].x * history[hindex].y;
    xi2 += history[hindex].x * history[hindex].x;

    if (++hindex >= ALTITUDE_HISTORY_LENGTH)
        hindex = 0;
}
#endif

