/* Copyright (c) 2015 Google Inc.
 * Ron Minnich <rminnich@google.com>
 * Barret Rhoden <brho@cs.berkeley.edu>
 *
 * Trivial thread-safe ID pool for small sets of things (< 64K)
 * implemented as a stack.
 */

#pragma once

#define MAX_U16_POOL_SZ (1 << 16)

#include <atomic.h>

/* IDS is the stack of 16 bit integers we give out.  TOS is the top of stack -
 * it is the index of the next slot that can be popped, if there are any.  It's
 * a u32 so it can be greater than a u16.
 *
 * All free slots in ids will be below the TOS, ranging from indexes [0, TOS),
 * where if TOS == 0, then there are no free slots to push.
 *
 * We can hand out u16s in the range [0, 65535].
 *
 * The check array is used instead of a bitfield because these architectures
 * suck at those. */

struct u16_pool {
	spinlock_t lock;
	uint32_t tos;
	uint16_t *ids;
	uint8_t *check;
	int size;
};

struct u16_pool *create_u16_pool(unsigned int size);
int get_u16(struct u16_pool *id);
void put_u16(struct u16_pool *id, int v);
