/* Copyright 2012 Google Inc. All Rights Reserved.
 */

#ifndef _HNVRAM_DLIST_H_
#define _HNVRAM_DLIST_H_

typedef struct dlist_hdr {
  struct dlist_hdr *next;
  struct dlist_hdr *prev;
} dlist_hdr_t;

#define DLIST_INIT(dlist) { &(dlist), &(dlist) }

static inline void dlist_add(struct dlist_hdr *dlist, struct dlist_hdr *entry)
{
  entry->next = dlist;
  entry->prev = dlist->prev;
  dlist->prev->next = entry;
  dlist->prev = entry;
}

static inline void dlist_del(struct dlist_hdr *entry)
{
  entry->prev->next = entry->next;
  entry->next->prev = entry->prev;
}

#define DLIST_FOR_EACH(dlist, entry) \
    for (entry = (dlist)->next; entry != (dlist); entry = entry->next)

#endif  /* _HNVRAM_DLIST_H_ */
