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
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; |
|
} |
|
}
|
|
|