mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-08 04:27:37 +00:00
193 lines
6.2 KiB
C
193 lines
6.2 KiB
C
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/*
|
|
* The contents of this file are subject to the Mozilla Public
|
|
* License Version 1.1 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
* implied. See the License for the specific language governing
|
|
* rights and limitations under the License.
|
|
*
|
|
* The Original Code is the Netscape security libraries.
|
|
*
|
|
* The Initial Developer of the Original Code is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1994-2000 Netscape Communications Corporation. All
|
|
* Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*
|
|
* Alternatively, the contents of this file may be used under the
|
|
* terms of the GNU General Public License Version 2 or later (the
|
|
* "GPL"), in which case the provisions of the GPL are applicable
|
|
* instead of those above. If you wish to allow use of your
|
|
* version of this file only under the terms of the GPL and not to
|
|
* allow others to use your version of this file under the MPL,
|
|
* indicate your decision by deleting the provisions above and
|
|
* replace them with the notice and other provisions required by
|
|
* the GPL. If you do not delete the provisions above, a recipient
|
|
* may use your version of this file under either the MPL or the
|
|
* GPL.
|
|
*/
|
|
|
|
#ifndef __SSM_HASHTBL_H__
|
|
#define __SSM_HASHTBL_H__
|
|
|
|
#include "nspr.h"
|
|
#include "prtypes.h"
|
|
#include "prmem.h"
|
|
#include "seccomon.h"
|
|
#include "secitem.h"
|
|
#include "ssmdefs.h"
|
|
|
|
/* It's a cheap method of hashing; we use the lower HASH_USE_LOW_BITS
|
|
bits of the key to determine what bucket it fits in.
|
|
Oh, what a hack. */
|
|
#define HASH_USE_LOW_BITS 4
|
|
#define HASH_NUM_BUCKETS (1 << HASH_USE_LOW_BITS)
|
|
|
|
typedef PRInt32 SSMHashKey;
|
|
|
|
struct _ssm_hashbucket
|
|
{
|
|
SSMHashKey *m_keys;
|
|
void **m_values;
|
|
PRIntn m_size;
|
|
PRIntn m_allocSize;
|
|
};
|
|
|
|
typedef struct _ssm_hashbucket SSMHashBucket;
|
|
|
|
struct _ssm_hashtbl
|
|
{
|
|
SSMHashBucket m_buckets[HASH_NUM_BUCKETS];
|
|
PRIntn m_size;
|
|
PRMonitor * m_hashLock;
|
|
};
|
|
|
|
typedef struct _ssm_hashtbl SSMHashTable;
|
|
|
|
|
|
/************************************************************
|
|
** FUNCTION: SSM_HashInsert
|
|
** DESCRIPTION: Insert a new data item keyed by (key) into (hash).
|
|
** INPUTS:
|
|
** hash
|
|
** The hash into which the item is to be inserted.
|
|
** key
|
|
** The key used to store the item.
|
|
** value
|
|
** The item to be inserted.
|
|
** RETURNS:
|
|
** If successful, returns PR_SUCCESS.
|
|
** If failed, returns either PR_FAILURE or the underlying NSPR error,
|
|
** if it is available.
|
|
**
|
|
*************************************************************/
|
|
SSMStatus SSM_HashInsert(SSMHashTable *hash, SSMHashKey key, void *value);
|
|
|
|
/************************************************************
|
|
** FUNCTION: SSM_HashFind
|
|
** DESCRIPTION: Get the item whose key is (key).
|
|
** INPUTS:
|
|
** hash
|
|
** The hash from which the item is to be retrieved.
|
|
** key
|
|
** The key used to store the item.
|
|
** value
|
|
** The item to be returned. Set to NULL if no suitable
|
|
** item is found.
|
|
** RETURNS:
|
|
** If successful, returns PR_SUCCESS.
|
|
** If failed, returns either PR_FAILURE or the underlying NSPR error,
|
|
** if it is available.
|
|
**
|
|
*************************************************************/
|
|
SSMStatus SSM_HashFind(SSMHashTable *hash, SSMHashKey key, void **value);
|
|
|
|
|
|
/************************************************************
|
|
** FUNCTION: SSM_HashRemove
|
|
** DESCRIPTION: Remove from a hash the item whose key is (key).
|
|
** INPUTS:
|
|
** hash
|
|
** The hash from which the item is to be removed.
|
|
** key
|
|
** The key used to store the item.
|
|
** value
|
|
** The value removed from the hash.
|
|
** RETURNS:
|
|
** If successful, returns PR_SUCCESS.
|
|
** If failed, returns either PR_FAILURE or the underlying NSPR error,
|
|
** if it is available.
|
|
**
|
|
*************************************************************/
|
|
SSMStatus SSM_HashRemove(SSMHashTable *hash, SSMHashKey key, void **value);
|
|
|
|
/************************************************************
|
|
** FUNCTION: SSM_HashKeys
|
|
** DESCRIPTION: Get keys for all items stored in the hash.
|
|
** INPUTS:
|
|
** hash
|
|
** The hash from which the keys are to be returned.
|
|
** keys
|
|
** Returns an array of keys. The array is allocated using PR_Malloc.
|
|
** numKeys
|
|
** Returns the number of keys in the array.
|
|
** RETURNS:
|
|
** If successful, returns PR_SUCCESS.
|
|
** If failed, returns either PR_FAILURE or the underlying NSPR error,
|
|
** if it is available.
|
|
**
|
|
*************************************************************/
|
|
SSMStatus SSM_HashKeys(SSMHashTable *hash, SSMHashKey **keys, PRIntn *numKeys);
|
|
|
|
/************************************************************
|
|
** FUNCTION: SSM_HashCount
|
|
** DESCRIPTION: Returns a count of the number of items in the hash.
|
|
** INPUTS:
|
|
** hash
|
|
** The hash to be counted.
|
|
** numItems
|
|
** Returns the number of items in the hash.
|
|
** RETURNS:
|
|
** If successful, returns PR_SUCCESS.
|
|
** If failed, returns either PR_FAILURE or the underlying NSPR error,
|
|
** if it is available.
|
|
**
|
|
*************************************************************/
|
|
SSMStatus SSM_HashCount(SSMHashTable *hash, PRIntn *numItems);
|
|
|
|
/************************************************************
|
|
** FUNCTION: SSM_HashDestroy
|
|
** DESCRIPTION: Destroy a hash. Items in the hash are not freed.
|
|
** INPUTS:
|
|
** hash
|
|
** The hash to be destroyed.
|
|
** RETURNS:
|
|
** If successful, returns PR_SUCCESS.
|
|
** If failed, returns either PR_FAILURE or the underlying NSPR error,
|
|
** if it is available.
|
|
**
|
|
*************************************************************/
|
|
SSMStatus SSM_HashDestroy(SSMHashTable *hash);
|
|
|
|
/************************************************************
|
|
** FUNCTION: SSM_HashCreate
|
|
** DESCRIPTION: Create and initialize a hash.
|
|
p** INPUTS:
|
|
** hash
|
|
** Returns the newly created hash.
|
|
** RETURNS:
|
|
** If successful, returns PR_SUCCESS.
|
|
** If failed, returns either PR_FAILURE or the underlying NSPR error,
|
|
** if it is available.
|
|
**
|
|
*************************************************************/
|
|
SSMStatus SSM_HashCreate(SSMHashTable **hash);
|
|
|
|
|
|
#endif /* __SSM_HASHTBL_H__ */
|