~n-muench/ubuntu/quantal/open-vm-tools/open-vm-tools.may2.sid-sync

« back to all changes in this revision

Viewing changes to modules/linux/vmblock/linux/dbllnklst.h

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Baumann
  • Date: 2009-05-30 09:48:43 UTC
  • mfrom: (1.1.5 upstream) (2.4.4 squeeze)
  • Revision ID: james.westby@ubuntu.com-20090530094843-gdpza57r5iqsf124
Tags: 2009.05.22-167859-1
MergingĀ upstreamĀ versionĀ 2009.05.22-167859.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*********************************************************
2
 
 * Copyright (C) 1998 VMware, Inc. All rights reserved.
3
 
 *
4
 
 * This program is free software; you can redistribute it and/or modify it
5
 
 * under the terms of the GNU General Public License as published by the
6
 
 * Free Software Foundation version 2 and no later version.
7
 
 *
8
 
 * This program is distributed in the hope that it will be useful, but
9
 
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
10
 
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
11
 
 * for more details.
12
 
 *
13
 
 * You should have received a copy of the GNU General Public License along
14
 
 * with this program; if not, write to the Free Software Foundation, Inc.,
15
 
 * 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
16
 
 *
17
 
 *********************************************************/
18
 
 
19
 
/*
20
 
 * dbllnklst.h --
21
 
 *
22
 
 *    Double linked lists
23
 
 */
24
 
 
25
 
#ifndef _DBLLNKLST_H_
26
 
#define _DBLLNKLST_H_
27
 
 
28
 
#include "vm_basic_types.h"
29
 
 
30
 
#define INCLUDE_ALLOW_MODULE
31
 
#define INCLUDE_ALLOW_USERLEVEL
32
 
#include "includeCheck.h"
33
 
 
34
 
 
35
 
#define DblLnkLst_OffsetOf(type, field) ((intptr_t)&((type *)0)->field)
36
 
 
37
 
#define DblLnkLst_Container(addr, type, field) \
38
 
   ((type *)((char *)addr - DblLnkLst_OffsetOf(type, field)))
39
 
 
40
 
#define DblLnkLst_ForEach(curr, head)                   \
41
 
      for (curr = (head)->next; curr != (head); curr = (curr)->next)
42
 
 
43
 
/* Safe from list element removal within loop body. */
44
 
#define DblLnkLst_ForEachSafe(curr, nextElem, head)             \
45
 
      for (curr = (head)->next, nextElem = (curr)->next;        \
46
 
           curr != (head);                                      \
47
 
           curr = nextElem, nextElem = (curr)->next)
48
 
 
49
 
typedef struct DblLnkLst_Links {
50
 
   struct DblLnkLst_Links *prev;
51
 
   struct DblLnkLst_Links *next;
52
 
} DblLnkLst_Links;
53
 
 
54
 
 
55
 
/* Functions for both circular and anchored lists. --hpreg */
56
 
 
57
 
void DblLnkLst_Init(DblLnkLst_Links *l);
58
 
void DblLnkLst_Link(DblLnkLst_Links *l1, DblLnkLst_Links *l2);
59
 
void DblLnkLst_Unlink(DblLnkLst_Links *l1, DblLnkLst_Links *l2);
60
 
void DblLnkLst_Unlink1(DblLnkLst_Links *l);
61
 
Bool DblLnkLst_IsLinked(DblLnkLst_Links const *l);
62
 
 
63
 
/* Functions specific to anchored lists. --hpreg */
64
 
 
65
 
void DblLnkLst_LinkFirst(DblLnkLst_Links *head, DblLnkLst_Links *l);
66
 
void DblLnkLst_LinkLast(DblLnkLst_Links *head, DblLnkLst_Links *l);
67
 
 
68
 
 
69
 
#endif /* _DBLLNKLST_H_ */