First Commit
This commit is contained in:
commit
ae0fab9400
424 files changed
+71006
No files matched your search
@@ -0,0 +1,61 @@
|
||||
// 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 uiprivMap {
|
||||
NSMapTable *m;
|
||||
};
|
||||
|
||||
uiprivMap *uiprivNewMap(void)
|
||||
{
|
||||
uiprivMap *m;
|
||||
|
||||
m = uiprivNew(uiprivMap);
|
||||
m->m = [[NSMapTable alloc] initWithKeyOptions:(NSPointerFunctionsOpaqueMemory | NSPointerFunctionsOpaquePersonality)
|
||||
valueOptions:(NSPointerFunctionsOpaqueMemory | NSPointerFunctionsOpaquePersonality)
|
||||
capacity:0];
|
||||
return m;
|
||||
}
|
||||
|
||||
void uiprivMapDestroy(uiprivMap *m)
|
||||
{
|
||||
if ([m->m count] != 0)
|
||||
uiprivImplBug("attempt to destroy map with items inside");
|
||||
[m->m release];
|
||||
uiprivFree(m);
|
||||
}
|
||||
|
||||
void *uiprivMapGet(uiprivMap *m, void *key)
|
||||
{
|
||||
return NSMapGet(m->m, key);
|
||||
}
|
||||
|
||||
void uiprivMapSet(uiprivMap *m, void *key, void *value)
|
||||
{
|
||||
NSMapInsert(m->m, key, value);
|
||||
}
|
||||
|
||||
void uiprivMapDelete(uiprivMap *m, void *key)
|
||||
{
|
||||
NSMapRemove(m->m, key);
|
||||
}
|
||||
|
||||
void uiprivMapWalk(uiprivMap *m, void (*f)(void *key, void *value))
|
||||
{
|
||||
NSMapEnumerator e;
|
||||
void *k, *v;
|
||||
|
||||
e = NSEnumerateMapTable(m->m);
|
||||
k = NULL;
|
||||
v = NULL;
|
||||
while (NSNextMapEnumeratorPair(&e, &k, &v))
|
||||
f(k, v);
|
||||
NSEndMapTableEnumeration(&e);
|
||||
}
|
||||
|
||||
void uiprivMapReset(uiprivMap *m)
|
||||
{
|
||||
NSResetMapTable(m->m);
|
||||
}
|
||||
Reference in new issue
Block a user