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 82 83 84 85 86 87 88 89
|
/*
* Copyright (C) 1996-2019 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"
#include <iostream>
void
xassert(const char *msg, const char *file, int line)
{
std::cout << "Assertion failed: (" << msg << ") at " << file << ":" << line << std::endl;
exit (1);
}
void
dlinkAdd(void *data, dlink_node * m, dlink_list * list)
{
m->data = data;
m->prev = NULL;
m->next = list->head;
if (list->head)
list->head->prev = m;
list->head = m;
if (list->tail == NULL)
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 = NULL;
m->prev = list->tail;
if (list->tail)
list->tail->next = m;
list->tail = m;
if (list->head == NULL)
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 = NULL;
}
|