mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-24 06:48:05 +01:00
extend smartlist with _remove() and _subtract()
svn:r922
This commit is contained in:
parent
2997ef8dd9
commit
f4cb5d8c93
2 changed files with 20 additions and 0 deletions
|
@ -92,6 +92,17 @@ void smartlist_add(smartlist_t *sl, void *element) {
|
|||
log_fn(LOG_WARN,"We've already got %d elements, discarding.",sl->max);
|
||||
}
|
||||
|
||||
void smartlist_remove(smartlist_t *sl, void *element) {
|
||||
int i;
|
||||
if(element == NULL)
|
||||
return;
|
||||
for(i=0; i < sl->num_used; i++)
|
||||
if(sl->list[i] == element) {
|
||||
sl->list[i] = sl->list[--sl->num_used]; /* swap with the end */
|
||||
i--; /* so we process the new i'th element */
|
||||
}
|
||||
}
|
||||
|
||||
int smartlist_isin(smartlist_t *sl, void *element) {
|
||||
int i;
|
||||
for(i=0; i < sl->num_used; i++)
|
||||
|
@ -118,6 +129,13 @@ void smartlist_intersect(smartlist_t *sl1, smartlist_t *sl2) {
|
|||
}
|
||||
}
|
||||
|
||||
/* remove all elements of sl2 from sl1 */
|
||||
void smartlist_subtract(smartlist_t *sl1, smartlist *sl2) {
|
||||
int i;
|
||||
for(i=0; i < sl2->num_used; i++)
|
||||
smartlist_remove(sl1, sl2->list[i]);
|
||||
}
|
||||
|
||||
void *smartlist_choose(smartlist_t *sl) {
|
||||
if(sl->num_used)
|
||||
return sl->list[crypto_pseudo_rand_int(sl->num_used)];
|
||||
|
|
|
@ -48,9 +48,11 @@ typedef struct {
|
|||
smartlist_t *smartlist_create(int max_elements);
|
||||
void smartlist_free(smartlist_t *sl);
|
||||
void smartlist_add(smartlist_t *sl, void *element);
|
||||
void smartlist_remove(smartlist_t *sl, void *element);
|
||||
int smartlist_isin(smartlist_t *sl, void *element);
|
||||
int smartlist_overlap(smartlist_t *sl1, smartlist_t *sl2);
|
||||
void smartlist_intersect(smartlist_t *sl1, smartlist_t *sl2);
|
||||
void smartlist_subtract(smartlist_t *sl1, smartlist *sl2);
|
||||
void *smartlist_choose(smartlist_t *sl);
|
||||
|
||||
const char *eat_whitespace(const char *s);
|
||||
|
|
Loading…
Add table
Reference in a new issue