X-Git-Url: http://git.wpitchoune.net/gitweb/?p=ppastats.git;a=blobdiff_plain;f=src%2Flp.c;h=c307a3632168af7d2627816b13bf9dc5fce7f814;hp=fe4c019403c43de03c4c035fe12ccf2b6ca1af66;hb=9a8af404ffbfb331575dc4b37b044d49d728be8b;hpb=2b74afd29d7b9aebf9bd459f0aab5c420bb2a82d diff --git a/src/lp.c b/src/lp.c index fe4c019..c307a36 100644 --- a/src/lp.c +++ b/src/lp.c @@ -220,3 +220,91 @@ struct bpph **bpph_list_append_list(struct bpph **list1, struct bpph **list2) return list1; } + +time_t ddts_get_last_date(struct daily_download_total **ddts) +{ + struct daily_download_total **cur; + time_t t, last_t; + + if (!ddts) + return 0; + + last_t = 0; + for(cur = ddts; *cur; cur++) { + t = mktime(&(*cur)->date); + if (t > last_t) + last_t = t; + } + + return last_t; +} + +int ddts_length(struct daily_download_total **ddts) +{ + int n; + struct daily_download_total **cur; + + n = 0; + + if (ddts) + for(cur = ddts; *cur; cur++) + n++; + + return n; +} + + +struct daily_download_total **add_total +(struct daily_download_total **totals, struct daily_download_total *total) +{ + struct daily_download_total **cur; + struct daily_download_total *item; + + if (totals) { + cur = totals; + while (*cur) { + item = *cur; + + if (item->date.tm_year == total->date.tm_year && + item->date.tm_mon == total->date.tm_mon && + item->date.tm_mday == total->date.tm_mday) { + item->count = total->count; + return totals; + } + + cur++; + } + } + + item = malloc(sizeof(struct daily_download_total)); + memcpy(item, total, sizeof(struct daily_download_total)); + + return (struct daily_download_total **) + list_add((void **)totals, (void *)item); +} + + +struct daily_download_total ** +ddts_merge(struct daily_download_total **ddts1, + struct daily_download_total **ddts2) +{ + struct daily_download_total **ddts, **cur, **tmp; + + if (ddts1) { + ddts = malloc((ddts_length(ddts1) + 1) * sizeof(struct daily_download_total *)); + memcpy(ddts, ddts1, (ddts_length(ddts1) + 1) * sizeof(void *)); + } else { + ddts = malloc(sizeof(struct daily_download_total *)); + ddts[0] = NULL; + } + + if (ddts2) + for(cur = ddts2; *cur; cur++) { + tmp = add_total(ddts, *cur); + if (tmp != ddts) { + ddts = tmp; + } + } + + return ddts; +}