1168404Spjd/*
2168404Spjd * CDDL HEADER START
3168404Spjd *
4168404Spjd * The contents of this file are subject to the terms of the
5185029Spjd * Common Development and Distribution License (the "License").
6185029Spjd * You may not use this file except in compliance with the License.
7168404Spjd *
8168404Spjd * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9168404Spjd * or http://www.opensolaris.org/os/licensing.
10168404Spjd * See the License for the specific language governing permissions
11168404Spjd * and limitations under the License.
12168404Spjd *
13168404Spjd * When distributing Covered Code, include this CDDL HEADER in each
14168404Spjd * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15168404Spjd * If applicable, add the following below this CDDL HEADER, with the
16168404Spjd * fields enclosed by brackets "[]" replaced with your own identifying
17168404Spjd * information: Portions Copyright [yyyy] [name of copyright owner]
18168404Spjd *
19168404Spjd * CDDL HEADER END
20168404Spjd */
21168404Spjd/*
22185029Spjd * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
23168404Spjd * Use is subject to license terms.
24168404Spjd */
25168404Spjd
26168404Spjd#ifndef	_SYS_UNIQUE_H
27168404Spjd#define	_SYS_UNIQUE_H
28168404Spjd
29168404Spjd#include <sys/zfs_context.h>
30168404Spjd
31168404Spjd#ifdef	__cplusplus
32168404Spjdextern "C" {
33168404Spjd#endif
34168404Spjd
35168404Spjd/* The number of significant bits in each unique value. */
36168404Spjd#define	UNIQUE_BITS	56
37168404Spjd
38168404Spjdvoid unique_init(void);
39185029Spjdvoid unique_fini(void);
40168404Spjd
41185029Spjd/*
42185029Spjd * Return a new unique value (which will not be uniquified against until
43251631Sdelphij * it is unique_insert()-ed).
44185029Spjd */
45168404Spjduint64_t unique_create(void);
46168404Spjd
47168404Spjd/* Return a unique value, which equals the one passed in if possible. */
48168404Spjduint64_t unique_insert(uint64_t value);
49168404Spjd
50168404Spjd/* Indicate that this value no longer needs to be uniquified against. */
51168404Spjdvoid unique_remove(uint64_t value);
52168404Spjd
53168404Spjd#ifdef	__cplusplus
54168404Spjd}
55168404Spjd#endif
56168404Spjd
57168404Spjd#endif /* _SYS_UNIQUE_H */
58