~ubuntu-branches/ubuntu/quantal/clustalo/quantal

« back to all changes in this revision

Viewing changes to src/clustal/list.h

  • Committer: Package Import Robot
  • Author(s): Olivier Sallou
  • Date: 2011-12-14 11:21:56 UTC
  • Revision ID: package-import@ubuntu.com-20111214112156-y3chwm0t4yn2nevm
Tags: upstream-1.0.3
ImportĀ upstreamĀ versionĀ 1.0.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 
 
27
typedef struct list_elem_s {
 
28
    void  *data;
 
29
    struct list_elem_s *next;
 
30
} list_elem_t;
 
31
 
 
32
typedef struct {
 
33
    /* size of list */
 
34
    int size;
 
35
    /* user defined function for freeing data */
 
36
    void (*destroy)(void *data);
 
37
    list_elem_t *head;
 
38
    list_elem_t *tail;
 
39
} list_t;
 
40
 
 
41
void ListInit(list_t *prList, void (*destroy)(void *data));
 
42
 
 
43
void ListDestroy(list_t *prList);
 
44
 
 
45
int 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
 
 
51
int 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
 
 
76
typedef list_t int_list_t;
 
77
 
 
78
#define INT_LIST_INIT(prList)  ListInit((prList), free)
 
79
 
 
80
#define INT_LIST_DESTROY(prList) ListDestroy((prList));
 
81
 
 
82
int 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
 
 
88
int 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