rt 0.17.0

A real-time operating system capable of full preemption
Documentation
#include <rt/list.h>

bool rt_list_is_empty(const struct rt_list *list)
{
    return list->next == list;
}

struct rt_list *rt_list_front(const struct rt_list *list)
{
    return list->next;
}

void rt_list_push_back(struct rt_list *list, struct rt_list *node)
{
    struct rt_list *const prev = list->prev;
    list->prev = node;
    prev->next = node;
    node->prev = prev;
    node->next = list;
}

void rt_list_remove(struct rt_list *node)
{
    struct rt_list *const next = node->next, *const prev = node->prev;
    node->prev = node;
    node->next = node;
    next->prev = prev;
    prev->next = next;
}

void rt_list_insert_by(struct rt_list *list, struct rt_list *node,
                       bool (*cmp)(const struct rt_list *,
                                   const struct rt_list *))
{
    struct rt_list *next;
    for (next = rt_list_front(list); next != list; next = next->next)
    {
        if (cmp(node, next))
        {
            break;
        }
    }
    rt_list_push_back(next, node);
}