5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/*
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * CDDL HEADER START
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland *
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * The contents of this file are subject to the terms of the
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * Common Development and Distribution License (the "License").
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * You may not use this file except in compliance with the License.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland *
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * or http://www.opensolaris.org/os/licensing.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * See the License for the specific language governing permissions
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * and limitations under the License.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland *
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * When distributing Covered Code, include this CDDL HEADER in each
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * If applicable, add the following below this CDDL HEADER, with the
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * fields enclosed by brackets "[]" replaced with your own identifying
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * information: Portions Copyright [yyyy] [name of copyright owner]
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland *
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * CDDL HEADER END
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland/*
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * Copyright 2003 Sun Microsystems, Inc. All rights reserved.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland * Use is subject to license terms.
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#ifndef _NHASH_H
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define _NHASH_H
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#ifdef __cplusplus
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandextern "C" {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#endif
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#ifndef NULL
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define NULL 0
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#endif /* NULL */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandtypedef struct item_t {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland void *key;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland int keyl;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland void *data;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland int datal;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland} Item;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define Null_Item ((Item *) NULL)
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandtypedef struct bucket_t {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland int nent;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland int nalloc;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland Item **itempp;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland} Bucket;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandtypedef struct cache_t {
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland int hsz;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland int bsz;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland Bucket *bp;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland int (*hfunc)(void *, int, int);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland int (*cfunc)(void *, void *, int);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland} Cache;
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#ifdef _KERNEL
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#define malloc bkmem_alloc
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#endif /* _KERNEL */
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandextern int init_cache(Cache **cp, int hsz, int bsz,
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland int (*hfunc)(void *, int, int), int (*cfunc)(void *, void *, int));
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandextern int add_cache(Cache *cp, Item *itemp);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterlandextern Item *lookup_cache(Cache *cp, void *datap, int datalen);
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#ifdef __cplusplus
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland}
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#endif
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland
5c51f1241dbbdf2656d0e10011981411ed0c9673Moriah Waterland#endif /* _NHASH_H */