view plugins/icq/list.h @ 1401:bf041349b11e

[gaim-migrate @ 1411] abliity to set accounts away independent of each other. also allows for all the other states (like in yahoo and icq). probably breaks MSN, so don't use it until rob fixes it. committer: Tailor Script <tailor@pidgin.im>
author Eric Warmenhoven <eric@warmenhoven.org>
date Wed, 10 Jan 2001 22:15:24 +0000
parents 201ec77f3a60
children 4c510ca3563f
line wrap: on
line source

/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
#ifndef _LIST_H
#define _LIST_H

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdarg.h>

#define list_enqueue(plist, p) \
   list_insert(plist, 0, p)

#define list_dequeue(plist) \
  list_remove_node(plist, plist->head)

typedef struct list_node_s
{
  struct list_node_s *next;
  struct list_node_s *previous;
  void *item;
} list_node;

typedef struct list_s
{
  list_node *head;
  list_node *tail;
  int count;
} list;

list *list_new(void);
void list_delete(list *plist, void (*item_free_f)(void *));
void list_free(list *plist, void (*item_free_f)(void *));
void list_insert(list *plist, list_node *pnode, void *pitem);
void *list_remove(list *plist, void *pitem);
void *list_traverse(list *plist, int (*item_f)(void *, va_list), ...);
int list_dump(list *plist);
void *list_first(list *plist);
void *list_last(list *plist);
void *list_at(list *plist, int num);
list_node *list_find(list *plist, void *pitem);
void *list_remove_node(list *plist, list_node *p);

#endif /* _LIST_H */