else
{
/* apply the new one, if we have no such policy */
- this->policies->insert_last(this->policies, policy);
+ this->policies->insert_first(this->policies, policy);
}
if (priority == POLICY_PRIORITY_ROUTED)
this->mutex->lock(this->mutex);
/* we try to find the policy again and install the route if needed */
- if (this->policies->find_last(this->policies, NULL, (void**)&policy) != SUCCESS)
+ if (this->policies->find_first(this->policies, NULL,
+ (void**)&policy) != SUCCESS)
{
this->mutex->unlock(this->mutex);
DBG2(DBG_KNL, "the policy %R === %R %N is already gone, ignoring",
/* we try to find the policy again and update the kernel index */
this->mutex->lock(this->mutex);
- if (this->policies->find_last(this->policies, NULL,
- (void**)&policy) != SUCCESS)
+ if (this->policies->find_first(this->policies, NULL,
+ (void**)&policy) != SUCCESS)
{
DBG2(DBG_KNL, "unable to update index, the policy is already gone, "
"ignoring");
}
else
{ /* use the new one, if we have no such policy */
- this->policies->insert_last(this->policies, policy);
+ this->policies->insert_first(this->policies, policy);
policy->used_by = linked_list_create();
}
return NOT_FOUND;
}
-METHOD(linked_list_t, find_last, status_t,
- private_linked_list_t *this, linked_list_match_t match,
- void **item, void *d1, void *d2, void *d3, void *d4, void *d5)
-{
- element_t *current = this->last;
-
- while (current)
- {
- if ((match && match(current->value, d1, d2, d3, d4, d5)) ||
- (!match && item && current->value == *item))
- {
- if (item != NULL)
- {
- *item = current->value;
- }
- return SUCCESS;
- }
- current = current->previous;
- }
- return NOT_FOUND;
-}
-
METHOD(linked_list_t, invoke_offset, void,
private_linked_list_t *this, size_t offset,
void *d1, void *d2, void *d3, void *d4, void *d5)
.get_first = _get_first,
.get_last = _get_last,
.find_first = (void*)_find_first,
- .find_last = (void*)_find_last,
.insert_first = _insert_first,
.insert_last = _insert_last,
.insert_before = (void*)_insert_before,
status_t (*find_first) (linked_list_t *this, linked_list_match_t match,
void **item, ...);
- /**
- * Find the last matching element in the list.
- *
- * The first object passed to the match function is the current list item,
- * followed by the user supplied data.
- * If the supplied function returns TRUE this function returns SUCCESS, and
- * the current object is returned in the third parameter, otherwise,
- * the next item is checked.
- *
- * If match is NULL, *item and the current object are compared.
- *
- * @warning Only use pointers as user supplied data.
- *
- * @param match comparison function to call on each object, or NULL
- * @param item the list item, if found
- * @param ... user data to supply to match function (limited to 5 arguments)
- * @return SUCCESS if found, NOT_FOUND otherwise
- */
- status_t (*find_last) (linked_list_t *this, linked_list_match_t match,
- void **item, ...);
-
/**
* Invoke a method on all of the contained objects.
*
void *a = (void*)1, *b = (void*)2;
ck_assert(list->find_first(list, NULL, &a) == NOT_FOUND);
- ck_assert(list->find_last(list, NULL, &a) == NOT_FOUND);
list->insert_last(list, a);
ck_assert(list->find_first(list, NULL, &a) == SUCCESS);
ck_assert(list->find_first(list, NULL, &b) == NOT_FOUND);
- ck_assert(list->find_last(list, NULL, &a) == SUCCESS);
- ck_assert(list->find_last(list, NULL, &b) == NOT_FOUND);
list->insert_last(list, b);
ck_assert(list->find_first(list, NULL, &a) == SUCCESS);
ck_assert(list->find_first(list, NULL, &b) == SUCCESS);
- ck_assert(list->find_last(list, NULL, &a) == SUCCESS);
- ck_assert(list->find_last(list, NULL, &b) == SUCCESS);
ck_assert(list->find_first(list, NULL, NULL) == NOT_FOUND);
- ck_assert(list->find_last(list, NULL, NULL) == NOT_FOUND);
}
END_TEST
ck_assert(list->find_first(list, (linked_list_match_t)match_a_b, &x, a, b) == SUCCESS);
ck_assert(a == x);
- ck_assert(list->find_last(list, (linked_list_match_t)match_a, NULL, a) == SUCCESS);
- x = NULL;
- ck_assert(list->find_last(list, (linked_list_match_t)match_a, &x, a) == SUCCESS);
- ck_assert(a == x);
- ck_assert(list->find_last(list, (linked_list_match_t)match_b, &x, b) == NOT_FOUND);
- ck_assert(a == x);
- x = NULL;
- ck_assert(list->find_last(list, (linked_list_match_t)match_a_b, &x, a, b) == SUCCESS);
- ck_assert(a == x);
-
list->insert_last(list, b);
ck_assert(list->find_first(list, (linked_list_match_t)match_a, &x, a) == SUCCESS);
ck_assert(a == x);
ck_assert(list->find_first(list, (linked_list_match_t)match_b, &x, b) == SUCCESS);
ck_assert(b == x);
- ck_assert(list->find_last(list, (linked_list_match_t)match_a, &x, a) == SUCCESS);
- ck_assert(a == x);
- ck_assert(list->find_last(list, (linked_list_match_t)match_b, &x, b) == SUCCESS);
- ck_assert(b == x);
x = NULL;
ck_assert(list->find_first(list, (linked_list_match_t)match_a_b, &x, a, b) == SUCCESS);
ck_assert(a == x);
- x = NULL;
- ck_assert(list->find_last(list, (linked_list_match_t)match_a_b, &x, a, b) == SUCCESS);
- ck_assert(b == x);
}
END_TEST