60 lines
1.3 KiB
Objective-C
60 lines
1.3 KiB
Objective-C
// 17 august 2015
|
|
#import "uipriv_darwin.h"
|
|
|
|
// unfortunately NSMutableDictionary copies its keys, meaning we can't use it for pointers
|
|
// hence, this file
|
|
// we could expose a NSMapTable directly, but let's treat all pointers as opaque and hide the implementation, just to be safe and prevent even more rewrites later
|
|
struct mapTable {
|
|
NSMapTable *m;
|
|
};
|
|
|
|
struct mapTable *newMap(void)
|
|
{
|
|
struct mapTable *m;
|
|
|
|
m = uiNew(struct mapTable);
|
|
m->m = [[NSMapTable alloc] initWithKeyOptions:(NSPointerFunctionsOpaqueMemory | NSPointerFunctionsOpaquePersonality)
|
|
valueOptions:(NSPointerFunctionsOpaqueMemory | NSPointerFunctionsOpaquePersonality)
|
|
capacity:0];
|
|
return m;
|
|
}
|
|
|
|
void mapDestroy(struct mapTable *m)
|
|
{
|
|
if ([m->m count] != 0)
|
|
implbug("attempt to destroy map with items inside");
|
|
[m->m release];
|
|
uiFree(m);
|
|
}
|
|
|
|
void *mapGet(struct mapTable *m, void *key)
|
|
{
|
|
return NSMapGet(m->m, key);
|
|
}
|
|
|
|
void mapSet(struct mapTable *m, void *key, void *value)
|
|
{
|
|
NSMapInsert(m->m, key, value);
|
|
}
|
|
|
|
void mapDelete(struct mapTable *m, void *key)
|
|
{
|
|
NSMapRemove(m->m, key);
|
|
}
|
|
|
|
void mapWalk(struct mapTable *m, void (*f)(void *key, void *value))
|
|
{
|
|
NSMapEnumerator e = NSEnumerateMapTable(m->m);
|
|
void *k = NULL;
|
|
void *v = NULL;
|
|
while (NSNextMapEnumeratorPair(&e, &k, &v)) {
|
|
f(k, v);
|
|
}
|
|
NSEndMapTableEnumeration(&e);
|
|
}
|
|
|
|
void mapReset(struct mapTable *m)
|
|
{
|
|
NSResetMapTable(m->m);
|
|
}
|