1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
/*
* Copyright (C) 1996-2025 The Squid Software Foundation and contributors
*
* Squid software is distributed under GPLv2+ license and includes
* contributions from numerous individuals and organizations.
* Please see the COPYING and CONTRIBUTORS files for details.
*/
// XXX: This file is made of large pieces of src/tools.cc
// with only a few minor modifications. TODO: redesign or delete.
#include "squid.h"
#include "dlink.h"
void
dlinkAdd(void *data, dlink_node * m, dlink_list * list)
{
m->data = data;
m->prev = nullptr;
m->next = list->head;
if (list->head)
list->head->prev = m;
list->head = m;
if (list->tail == nullptr)
list->tail = m;
}
void
dlinkAddAfter(void *data, dlink_node * m, dlink_node * n, dlink_list * list)
{
m->data = data;
m->prev = n;
m->next = n->next;
if (n->next)
n->next->prev = m;
else {
assert(list->tail == n);
list->tail = m;
}
n->next = m;
}
void
dlinkAddTail(void *data, dlink_node * m, dlink_list * list)
{
m->data = data;
m->next = nullptr;
m->prev = list->tail;
if (list->tail)
list->tail->next = m;
list->tail = m;
if (list->head == nullptr)
list->head = m;
}
void
dlinkDelete(dlink_node * m, dlink_list * list)
{
if (m->next)
m->next->prev = m->prev;
if (m->prev)
m->prev->next = m->next;
if (m == list->head)
list->head = m->next;
if (m == list->tail)
list->tail = m->prev;
m->next = m->prev = nullptr;
}
|