Clustal Omega 1.2.4
list.h
Go to the documentation of this file.
1/*********************************************************************
2 * Clustal Omega - Multiple sequence alignment
3 *
4 * Copyright (C) 2010 University College Dublin
5 *
6 * Clustal-Omega is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License as
8 * published by the Free Software Foundation; either version 2 of the
9 * License, or (at your option) any later version.
10 *
11 * This file is part of Clustal-Omega.
12 *
13 ********************************************************************/
14
15/*
16 * RCS $Id: list.h 193 2011-02-07 15:45:21Z andreas $
17 *
18 * Generic single linked list storing pointers to data
19 *
20 */
21
22#ifndef CLUSTALO_LIST_H
23#define CLUSTALO_LIST_H
24
25#include <stdlib.h>
26
27typedef struct list_elem_s {
28 void *data;
31
32typedef struct {
33 /* size of list */
34 int size;
35 /* user defined function for freeing data */
36 void (*destroy)(void *data);
39} list_t;
40
41void ListInit(list_t *prList, void (*destroy)(void *data));
42
43void ListDestroy(list_t *prList);
44
45int ListInsertNext(list_t *prList, list_elem_t *prElement, const void *data);
46
47#define LIST_APPEND(prList, data) ListInsertNext((prList), LIST_TAIL(prList), (data))
48
49#define LIST_PREPEND(prList, data) ListInsertNext((prList), CLUSTALO_LIST_HEAD(prList), (data))
50
51int ListRemoveNext(list_t *prList, list_elem_t *prElement, void **data);
52
53#define LIST_SIZE(prList) ((prList)->size)
54
55#define CLUSTALO_LIST_HEAD(prList) ((prList)->head)
56
57#define LIST_TAIL(prList) ((prList)->tail)
58
59#define LIST_IS_HEAD(prList, prElement) ((prElement) == (prList)->head ? 1 : 0)
60
61#define LIST_IS_TAIL(prElement) ((prElement)->next == NULL ? 1 : 0)
62
63#define LIST_DATA(prElement) ((prElement)->data)
64
65#define LIST_NEXT(prElement) ((prElement)->next)
66
67
68
69
70
71/* special int list: stores ints by copying them (instead of storing
72 * pointers as generic list)
73 *
74 */
75
77
78#define INT_LIST_INIT(prList) ListInit((prList), free)
79
80#define INT_LIST_DESTROY(prList) ListDestroy((prList));
81
82int IntListInsertNext(list_t *prList, list_elem_t *prElement, const int data);
83
84#define INT_LIST_APPEND(prList, data) IntListInsertNext((prList), LIST_TAIL(prList), (data))
85
86#define INT_LIST_PREPEND(prList, data) IntListInsertNext((prList), CLUSTALO_LIST_HEAD(prList), (data))
87
88int IntListRemoveNext(list_t *prList, list_elem_t *prElement, int *data);
89
90#define INT_LIST_SIZE(prList) LIST_SIZE(prList)
91
92#define INT_CLUSTALO_LIST_HEAD(prList) CLUSTALO_LIST_HEAD_INT((prList))
93
94#define INT_LIST_TAIL(prList) LIST_TAIL_INT((prList) )
95
96#define INT_LIST_IS_HEAD(prList, prElement) LIST_IS_HEAD(prList, prElement)
97
98#define INT_LIST_IS_TAIL(prElement) LIST_IS_TAIL((prElement))
99
100#define INT_LIST_DATA(prElement) LIST_DATA((prElement))
101
102#define INT_LIST_NEXT(prElement) LIST_NEXT((prElement))
103
104
105#endif
int ListRemoveNext(list_t *prList, list_elem_t *prElement, void **data)
Remove next element from current element/position.
Definition list.c:158
int ListInsertNext(list_t *prList, list_elem_t *prElement, const void *data)
Insert data next to given element.
Definition list.c:112
int IntListInsertNext(list_t *prList, list_elem_t *prElement, const int data)
Insert int next to given element.
Definition list.c:211
void ListDestroy(list_t *prList)
Calls user defined function to free data in list and resets the list to NULL. Call even if your destr...
Definition list.c:78
struct list_elem_s list_elem_t
int IntListRemoveNext(list_t *prList, list_elem_t *prElement, int *data)
Remove next element from current element/position.
Definition list.c:240
void ListInit(list_t *prList, void(*destroy)(void *data))
Initialise data members of a list.
Definition list.c:57
list_t int_list_t
Definition list.h:76
Definition list.h:27
void * data
Definition list.h:28
struct list_elem_s * next
Definition list.h:29
Definition list.h:32
int size
Definition list.h:34
list_elem_t * head
Definition list.h:37
list_elem_t * tail
Definition list.h:38