/* Copyright (c) 2014 The Regents of the University of California
 * Kevin Klues <klueska@cs.berkeley.edu>
 * Andrew Waterman <waterman@cs.berkeley.edu>
 * See LICENSE for details.
 *
 * A wait-free unordered list data structure.
 * 
 */

#pragma once

#include <string.h>

__BEGIN_DECLS

struct wfl_entry {
  struct wfl_entry *next;
  void *data;
};

struct wfl {
  struct wfl_entry *head;
  struct wfl_entry first;
};

#define WFL_INITIALIZER(list) {&(list).first, {0, 0}}

void wfl_init(struct wfl *list);
void wfl_destroy(struct wfl *list);
size_t wfl_capacity(struct wfl *list);
size_t wfl_size(struct wfl *list);
void wfl_insert(struct wfl *list, void *data);
void *wfl_remove(struct wfl *list);
size_t wfl_remove_all(struct wfl *list, void *data);

/* Iterate over list.  Safe w.r.t. inserts, but not w.r.t. removals. */
#define wfl_foreach_unsafe(elm, list) \
  for (struct wfl_entry *_p = (list)->head; \
       elm = _p == NULL ? NULL : _p->data, _p != NULL; \
       _p = _p->next) \
    if (elm)

__END_DECLS
