Subversion Repositories f9daq

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

#ifndef __LIST_H__
#define __LIST_H__

//****************************************************************************
// Copyright (C) 2000-2004  ARW Elektronik Germany
//
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
// This product is not authorized for use as critical component in
// life support systems without the express written approval of
// ARW Elektronik Germany.
//  
// Please announce changes and hints to ARW Elektronik
//
// Maintainer(s): Klaus Hitschler (klaus.hitschler@gmx.de)
//
//****************************************************************************

//****************************************************************************
//
// list.h - Header file for list.c
//
// $Log: list.h,v $
// Revision 1.5  2004/08/12 19:59:19  klaus
// conversion to kernel-version 2.6, released version 6.0
//
// Revision 1.4  2002/04/10 18:40:10  klaus
// compiled and modified on RedHat 7.2
//
// Revision 1.3  2001/11/20 20:12:50  klaus
// included new header and CVS log
//
//
// derived from code original by Dirk Muehlenberg               AR   18.02.2000
// removed all ANEW, FREE because of MODVERSIONS                AR   24.04.2000
//
//****************************************************************************

#if LINUX_VERSION_CODE < KERNEL_VERSION(2,3,0)
#include <linux/malloc.h>
#else
#include <linux/slab.h>
#endif

typedef struct _node
{
  struct _node *pred;  /* points to previous      */
  struct _node *succ;  /* points to next          */
  void *data;          /* points to work load     */
} Node;

typedef struct  _list
{
  Node *head;          /* points to head of list  */
  Node *tail;          /* points to tail of list  */
  int nodes;           /* current number of nodes */
} List;

enum NodePosition {CurrentLeft, CurrentRight};

/*-- PROTOTYPES ----------------------------------------------------------------------*/
Node *initNode(void);
Node *addNode(Node *, void *, enum NodePosition);
Node *delNode(Node *);

List *newList(void);
void deleteList(List *, void (*)(void *));
Node *addTail(List *, void *);
Node *addHead(List *, void *);
Node *searchList(List *, void *, int (*)(void *, void *));
void delNodeInList(List *, Node *);
void delNodeAndDataInList(List *, Node *);
void delTail(List *);
void delTailAndData(List *);
void resetList(List *, void (*)(void *));
void printList(List *, char *(*)(void *));
#ifndef USE_MACROS
int getNumOfNodesInList(List *);
#else
#define getNumOfNodesInList(l) l->nodes
#endif
int emptyList(List *);
/* for lifo-, fifo operations */
Node *getFirstNode(List *);
Node *getNextNode(Node *);
Node *getPrevNode(Node *);
Node *getLastNode(List *);
void *getContent(Node *n);
void delFirstNode(List *);
void delFirstNodeAndData(List *);
void delLastNode(List *);
void delLastNodeAndData(List *);

#endif /* __LIST_H__ */