ftp.nice.ch/Attic/openStep/implementation/gnustep/sources/libFoundation.0.7.tgz#/libFoundation-0.7/FoundationExtensions/extensions/NSMapTable.h

This is NSMapTable.h in view mode; [Download] [Up]

/* 
   Copyright (C) 1996 
	Ovidiu Predescu <ovidiu@bx.logicnet.ro>
	Mircea Oancea <mircea@jupiter.elcom.pub.ro>

   Author: Mircea Oancea <mircea@jupiter.elcom.pub.ro>

   This file is part of the FoundationExtensions 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; see the file COPYING.LIB.
   If not, write to the Free Software Foundation,
   59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/

#ifndef __NSMapTable_h__
#define __NSMapTable_h__

#include <Foundation/NSObject.h>

@class NSArray;

struct _NSMapTable;

struct _NSMapNode {
    void *key;
    void *value;
    struct _NSMapNode *next;
};

typedef struct _NSMapTableKeyCallBacks {
    unsigned (*hash)(struct _NSMapTable *table, const void *anObject);
    BOOL (*isEqual)(struct _NSMapTable *table, const void *anObject1, 
	    const void *anObject2);
    void (*retain)(struct _NSMapTable *table, const void *anObject);
    void (*release)(struct _NSMapTable *table, void *anObject);
    NSString  *(*describe)(struct _NSMapTable *table, const void *anObject);
    const void *notAKeyMarker;
} NSMapTableKeyCallBacks;

typedef struct _NSMapTableValueCallBacks {
    void (*retain)(struct _NSMapTable *table, const void *anObject);
    void (*release)(struct _NSMapTable *table, void *anObject);
    NSString  *(*describe)(struct _NSMapTable *table, const void *anObject);
} NSMapTableValueCallBacks;

typedef struct _NSMapTable {
    struct _NSMapNode	**nodes;
    unsigned int    	hashSize;
    unsigned int	itemsCount;
    NSMapTableKeyCallBacks keyCallbacks;
    NSMapTableValueCallBacks valueCallbacks;
    NSZone		*zone;
} NSMapTable;

typedef struct NSMapEnumerator {
    struct _NSMapTable	*table;
    struct _NSMapNode	*node;
    int			bucket;
} NSMapEnumerator;

#define NSNotAnIntMapKey MAXINT
#define NSNotAPointerMapKey ((long)1)

/* Predefined callback sets */
extern const NSMapTableKeyCallBacks NSIntMapKeyCallBacks; 
extern const NSMapTableValueCallBacks NSIntMapValueCallBacks; 
extern const NSMapTableKeyCallBacks NSNonOwnedPointerMapKeyCallBacks; 
extern const NSMapTableKeyCallBacks NSNonOwnedCStringMapKeyCallBacks; 
extern const NSMapTableValueCallBacks NSNonOwnedPointerMapValueCallBacks;
extern const NSMapTableKeyCallBacks NSNonOwnedPointerOrNullMapKeyCallBacks; 
extern const NSMapTableKeyCallBacks NSNonRetainedObjectMapKeyCallBacks; 
extern const NSMapTableValueCallBacks NSNonRetainedObjectMapValueCallBacks; 
extern const NSMapTableKeyCallBacks NSObjectMapKeyCallBacks; 
extern const NSMapTableValueCallBacks NSObjectMapValueCallBacks; 
extern const NSMapTableKeyCallBacks NSOwnedPointerMapKeyCallBacks; 
extern const NSMapTableValueCallBacks NSOwnedPointerMapValueCallBacks; 

/* Map Table Functions */

/* Create a Table */
NSMapTable *NSCreateMapTable(NSMapTableKeyCallBacks keyCallBacks, 
	NSMapTableValueCallBacks valueCallBacks,
	unsigned capacity);
NSMapTable *NSCreateMapTableWithZone(NSMapTableKeyCallBacks keyCallBacks, 
	NSMapTableValueCallBacks valueCallBacks,
	unsigned capacity,
	NSZone *zone);
NSMapTable *NSCopyMapTableWithZone(NSMapTable *table, NSZone *zone);

/* Free a Table */
void NSFreeMapTable(NSMapTable *table);
void NSResetMapTable(NSMapTable *table);

/* Compare Two Tables */
BOOL NSCompareMapTables(NSMapTable *table1, NSMapTable *table2);

/* Get the Number of Items */
unsigned NSCountMapTable(NSMapTable *table);

/* Retrieve Items */
BOOL NSMapMember(NSMapTable *table, const void *key, 
	void **originalKey,
	void **value);
void *NSMapGet(NSMapTable *table, const void *key);
NSMapEnumerator NSEnumerateMapTable(NSMapTable *table);
BOOL NSNextMapEnumeratorPair(NSMapEnumerator *enumerator, 
	void **key,
	void **value);
NSArray *NSAllMapTableKeys(NSMapTable *table);
NSArray *NSAllMapTableValues(NSMapTable *table);

/* Add or Remove an Item */
void NSMapInsert(NSMapTable *table, const void *key, const void *value);
void *NSMapInsertIfAbsent(NSMapTable *table,
	const void *key,
	const void *value);
void NSMapInsertKnownAbsent(NSMapTable *table,
	const void *key, 
	const void *value);
void NSMapRemove(NSMapTable *table, const void *key);
NSString *NSStringFromMapTable(NSMapTable *table);

#endif /* __NSMapTable_h__ */

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.