/* NSHashTable interface for GNUStep. * Copyright (C) 1994, 1995, 1996, 1997, 2002 Free Software Foundation, Inc. * * Author: Albin L. Jones * Created: Mon Dec 12 23:56:03 EST 1994 * Updated: Thu Mar 21 15:13:46 EST 1996 * Serial: 96.03.21.06 * Modified by: Richard Frith-Macdonald * * This file is part of the GNUstep Base Library. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, write to the Free * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #ifndef __NSHashTable_h_GNUSTEP_BASE_INCLUDE #define __NSHashTable_h_GNUSTEP_BASE_INCLUDE 1 /**** Included Headers *******************************************************/ #include #include #include /**** Type, Constant, and Macro Definitions **********************************/ /** * Hash table type ... an opaque pointer to a data structure. */ typedef void* NSHashTable; /** * Type for enumerating.
* NB. Implementation detail ... in GNUstep the layout must * correspond to that used by the GSIMap macros. */ typedef struct { void *map; void *node; size_t bucket; } NSHashEnumerator; /** Callback functions for an NSHashTable. See NSCreateHashTable() .
*/ typedef struct _NSHashTableCallBacks { /** unsigned int (*hash)(NSHashTable *, const void *) ... * Hashing function. NOTE: Elements with equal values must have equal hash * function values. The default if NULL uses the pointer addresses * directly.
*/ unsigned int (*hash)(NSHashTable *, const void *); /** BOOL (*isEqual)(NSHashTable *, const void *, const void *) * ... Comparison function. The default if NULL uses '=='. *
*/ BOOL (*isEqual)(NSHashTable *, const void *, const void *); /** void (*retain)(NSHashTable *, const void *) ... * Retaining function called when adding elements to the table. * The default if NULL is a no-op (no reference counting).
*/ void (*retain)(NSHashTable *, const void *); /** void (*release)(NSHashTable *, void *) ... Releasing * function called when a data element is removed from the table. * The default if NULL is a no-op (no reference counting).
*/ void (*release)(NSHashTable *, void *); /** NSString *(*describe)(NSHashTable *, const void *) ... * Description function. The default if NULL prints boilerplate.
*/ NSString *(*describe)(NSHashTable *, const void *); } NSHashTableCallBacks; GS_EXPORT const NSHashTableCallBacks NSIntHashCallBacks; GS_EXPORT const NSHashTableCallBacks NSNonOwnedPointerHashCallBacks; GS_EXPORT const NSHashTableCallBacks NSNonRetainedObjectHashCallBacks; GS_EXPORT const NSHashTableCallBacks NSObjectHashCallBacks; GS_EXPORT const NSHashTableCallBacks NSOwnedPointerHashCallBacks; GS_EXPORT const NSHashTableCallBacks NSPointerToStructHashCallBacks; GS_EXPORT NSHashTable * NSCreateHashTable(NSHashTableCallBacks callBacks, unsigned int capacity); GS_EXPORT NSHashTable * NSCreateHashTableWithZone(NSHashTableCallBacks callBacks, unsigned int capacity, NSZone *zone); GS_EXPORT NSHashTable * NSCopyHashTableWithZone(NSHashTable *table, NSZone *zone); GS_EXPORT void NSFreeHashTable(NSHashTable *table); GS_EXPORT void NSResetHashTable(NSHashTable *table); GS_EXPORT BOOL NSCompareHashTables(NSHashTable *table1, NSHashTable *table2); GS_EXPORT unsigned int NSCountHashTable(NSHashTable *table); GS_EXPORT void * NSHashGet(NSHashTable *table, const void *element); GS_EXPORT NSArray * NSAllHashTableObjects(NSHashTable *table); GS_EXPORT void NSEndHashTableEnumeration(NSHashEnumerator *enumerator); GS_EXPORT NSHashEnumerator NSEnumerateHashTable(NSHashTable *table); GS_EXPORT void * NSNextHashEnumeratorItem(NSHashEnumerator *enumerator); GS_EXPORT void NSHashInsert(NSHashTable *table, const void *element); GS_EXPORT void NSHashInsertKnownAbsent(NSHashTable *table, const void *element); GS_EXPORT void * NSHashInsertIfAbsent(NSHashTable *table, const void *element); GS_EXPORT void NSHashRemove(NSHashTable *table, const void *element); GS_EXPORT NSString * NSStringFromHashTable(NSHashTable *table); #endif /* __NSHashTable_h_GNUSTEP_BASE_INCLUDE */