Remove indirection from alias table.

main
theraven 15 years ago
parent 9967d85d60
commit b633338a7a

@ -37,31 +37,34 @@ struct objc_alias
Class class;
};
typedef struct objc_alias *Alias;
typedef struct objc_alias Alias;
static int alias_compare(const char *name, const Alias alias)
{
return string_compare(name, alias->name);
return string_compare(name, alias.name);
}
static int alias_hash(const Alias alias)
{
return string_hash(alias->name);
return string_hash(alias.name);
}
static int alias_is_null(const Alias alias)
{
return alias.name == NULL;
}
static Alias NullAlias;
#define MAP_TABLE_NAME alias_table_internal
#define MAP_TABLE_COMPARE_FUNCTION alias_compare
#define MAP_TABLE_HASH_KEY string_hash
#define MAP_TABLE_HASH_VALUE alias_hash
#define MAP_TABLE_VALUE_TYPE struct objc_alias
#define MAP_TABLE_VALUE_NULL alias_is_null
#define MAP_TABLE_VALUE_PLACEHOLDER NullAlias
#include "hash_table.h"
static alias_table_internal_table *alias_table;
#define POOL_NAME alias
#define POOL_TYPE struct objc_alias
#include "pool.h"
PRIVATE void init_alias_table(void)
{
alias_table_internal_initialize(&alias_table, 128);
@ -83,12 +86,12 @@ Class alias_getClass(const char *alias_name)
Alias alias = alias_table_get_safe(alias_name);
if (NULL == alias)
if (NULL == alias.name)
{
return NULL;
}
return alias->class;
return alias.class;
}
PRIVATE void alias_table_insert(Alias alias)
@ -117,10 +120,7 @@ BOOL class_registerAlias_np(Class class, const char *alias)
*/
return (class == existingClass);
}
Alias newAlias = alias_pool_alloc();
newAlias->name = strdup(alias);
newAlias->class = class;
Alias newAlias = { strdup(alias), class };
alias_table_insert(newAlias);
return 1;
}

29
arc.m

@ -86,12 +86,23 @@ id objc_storeStrong(id *object, id value)
////////////////////////////////////////////////////////////////////////////////
//
//FIXME: These are all stubs!
#if 0
id objc_storeWeak(id*addr, id obj) { return obj;}
struct
{
id *ref[4];
struct weakRef *next;
} weakRef;
id objc_storeWeak(id *addr, id obj)
{
id old = *addr;
if (
return obj;
}
id objc_loadWeakRetained(id* obj)
{
}
id objc_loadWeak(id* object)
@ -99,14 +110,16 @@ id objc_loadWeak(id* object)
return objc_autorelease(objc_loadWeakRetained(object));
}
void objc_moveWeak(id *dest, id *src)
void objc_copyWeak(id *dest, id *src)
{
objc_release(objc_initWeak(dest, objc_loadWeakRetained(src)));
}
void objc_copyWeak(id *dest, id *src)
void objc_moveWeak(id *dest, id *src)
{
objc_release(objc_initWeak(dest, objc_loadWeakRetained(src)));
// FIXME: src can be zero'd here, removing the relationship between the
// object and the pointer, which can be cheaper.
objc_moveWeak(dest, src);
}
void objc_destroyWeak(id* obj)
@ -114,10 +127,8 @@ void objc_destroyWeak(id* obj)
objc_storeWeak(object, nil);
}
id objc_initWeak(id*, id)
id objc_initWeak(id *object, id value)
{
*object = nil;
return objc_storeWeak(object, value);
}
#endif

Loading…
Cancel
Save