ocf/src/utils/utils_list.c
Michal Mielewczyk 916f46c893 Code refactoring
Removed few dead assignments and added variables initialization.
2019-01-16 06:46:00 -05:00

65 lines
1.4 KiB
C

/*
* Copyright(c) 2012-2018 Intel Corporation
* SPDX-License-Identifier: BSD-3-Clause-Clear
*/
#include "ocf/ocf.h"
#include "utils_list.h"
void ocf_lst_sort(struct ocf_lst *lst)
{
ocf_cache_line_t iter_idx;
ocf_cache_line_t next_idx;
struct ocf_lst_entry *iter;
if (!lst->cmp) {
/* No comparator, no needed to sort */
return;
}
if (ocf_lst_empty(lst)) {
/* List is empty nothing to do */
return;
}
/* Get iterator - first element on the list, and one after */
iter_idx = lst->head->next;
iter = lst->getter(lst->cache, iter_idx);
next_idx = iter->next;
lst->getter(lst->cache, iter->next);
/* Initialize list to initial empty state, it will be empty */
lst->head->next = lst->invalid;
lst->head->prev = lst->invalid;
while (iter_idx != lst->invalid) {
ocf_lst_init_entry(lst, iter);
if (ocf_lst_empty(lst)) {
/* Put first at the the list */
ocf_lst_add(lst, iter_idx);
} else {
/* search for place where put element at the list */
struct ocf_lst_entry *pos;
ocf_cache_line_t pos_idx;
for_each_lst(lst, pos, pos_idx)
if (lst->cmp(lst->cache, pos, iter) > 0)
break;
if (lst->invalid == pos_idx) {
/* Put at the end of list */
ocf_lst_add_tail(lst, iter_idx);
} else {
/* Position is known, put it before */
ocf_lst_add_before(lst, pos_idx, iter_idx);
}
}
/* Switch to next */
iter_idx = next_idx;
iter = lst->getter(lst->cache, iter_idx);
next_idx = iter->next;
}
}