X-Git-Url: https://git.wpitchoune.net/gitweb/?a=blobdiff_plain;f=src%2Flp.c;h=e23b77b992ddf2ff5299d448160e88641333449a;hb=497e16d17e06f1f303de8f10398353b0821f9c1e;hp=79fcce6d4a6f594ceada5d2f3c981da449f5b711;hpb=12cf1b3a4702e58c5797be638ab48e899ef932a4;p=ppastats.git diff --git a/src/lp.c b/src/lp.c index 79fcce6..e23b77b 100644 --- a/src/lp.c +++ b/src/lp.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011-2012 jeanfi@gmail.com + * Copyright (C) 2011-2014 jeanfi@gmail.com * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -220,3 +220,103 @@ 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; +} + +int ddts_get_count(struct daily_download_total **ddts) +{ + struct daily_download_total **cur; + int i; + + i = 0; + for (cur = ddts; *cur; cur++) + i += (*cur)->count; + + return i; +}