You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

60 lines
1.1 KiB

/* Copyright 2016 Alex 'AdUser' Z (ad_user@runbox.com)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#include "common.h"
#include "matches.h"
bool
f2b_matches_create(f2b_matches_t *m, size_t max) {
assert(m != NULL);
assert(max != 0);
if ((m->times = calloc(max, sizeof(time_t))) == NULL)
return false;
m->used = 0;
m->max = max;
return true;
}
void
f2b_matches_destroy(f2b_matches_t *m) {
assert(m != NULL);
free(m->times);
m->times = NULL;
m->used = 0;
m->max = 0;
}
bool
f2b_matches_append(f2b_matches_t *m, time_t t) {
assert(m != NULL);
m->hits++;
if (m->used >= m->max)
return false;
m->times[m->used] = t;
m->used++;
return true;
}
void
f2b_matches_expire(f2b_matches_t *m, time_t t) {
assert(m != NULL);
for (size_t i = 0; i < m->used; ) {
if (m->times[i] > t) {
i++;
continue;
}
m->used--;
m->times[i] = m->times[m->used];
m->times[m->used] = 0;
}
}