* Version $Id$
*/
/*
- Copyright (C) 2003-2005 Kern Sibbald
+ Copyright (C) 2004-2005 Kern Sibbald
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
#define M_ABORT 1
/* In case you want to specifically specify the offset to the link */
-#define OFFSET(item, link) ((char *)(link) - (char *)(item))
+#define OFFSET(item, link) (int)((char *)(link) - (char *)(item))
/*
* There is a lot of extra casting here to work around the fact
* that some compilers (Sun and Visual C++) do not accept
#ifdef the_old_way
#define foreach_dlist(var, list) \
- for((var)=NULL; (((void *)(var))=(list)->next(var)); )
+ for((var)=NULL; (((void *)(var))=(list)->next(var)); )
#endif
void append(void *item);
void insert_before(void *item, void *where);
void insert_after(void *item, void *where);
- void *unique_binary_insert(void *item, int compare(void *item1, void *item2));
- void binary_insert(void *item, int compare(void *item1, void *item2));
+ void *binary_insert(void *item, int compare(void *item1, void *item2));
+ void *binary_search(void *item, int compare(void *item1, void *item2));
+ void binary_insert_multiple(void *item, int compare(void *item1, void *item2));
void remove(void *item);
bool empty() const;
- int size() const;
+ int size() const;
void *next(const void *item) const;
void *prev(const void *item) const;
void destroy();
inline void dlist::init(void *item, dlink *link)
{
head = tail = NULL;
- loffset = (char *)link - (char *)item;
+ loffset = (int)((char *)link - (char *)item);
if (loffset < 0 || loffset > 5000) {
Emsg0(M_ABORT, 0, "Improper dlist initialization.\n");
}