#include <search.h>

struct node {
  struct node* next;
  struct node* prev;
};

void insque(void* element, void* pred) {
  struct node* e = element;
  struct node* p = pred;

  if (!p) {
    e->next = e->prev = 0;
    return;
  }
  e->next = p->next;
  e->prev = p;
  p->next = e;
  if (e->next)
    e->next->prev = e;
}

void remque(void* element) {
  struct node* e = element;

  if (e->next)
    e->next->prev = e->prev;
  if (e->prev)
    e->prev->next = e->next;
}
