if (!object)
return NULL;
- object->type = type;
- object->user_data_map = pepper_map_create(5, user_data_hash, user_data_key_length,
- user_data_key_compare);
-
- if (!object->user_data_map)
- {
- pepper_free(object);
- return NULL;
- }
+ pepper_object_init(object, type);
+ return object;
+}
+void
+pepper_object_init(pepper_object_t *object, pepper_object_type_t type)
+{
+ object->type = type;
pepper_list_init(&object->event_listener_list);
- return object;
+ pepper_map_init(&object->user_data_map, PEPPER_OBJECT_BUCKET_BITS,
+ user_data_hash, user_data_key_length, user_data_key_compare,
+ &object->buckets[0]);
}
void
pepper_object_fini(pepper_object_t *object)
{
pepper_object_emit_event(object, PEPPER_EVENT_OBJECT_DESTROY, NULL);
- pepper_map_destroy(object->user_data_map);
+ pepper_map_fini(&object->user_data_map);
}
PEPPER_API pepper_object_type_t
pepper_object_set_user_data(pepper_object_t *object, const void *key, void *data,
pepper_free_func_t free_func)
{
- pepper_map_set(object->user_data_map, key, data, free_func);
+ pepper_map_set(&object->user_data_map, key, data, free_func);
}
PEPPER_API void *
pepper_object_get_user_data(pepper_object_t *object, const void *key)
{
- return pepper_map_get(object->user_data_map, key);
+ return pepper_map_get(&object->user_data_map, key);
}
static void
#include "pepper-output-backend.h"
#include "pepper-input-backend.h"
-#define PEPPER_MAX_OUTPUT_COUNT 32
+#define PEPPER_OBJECT_BUCKET_BITS 5
+#define PEPPER_MAX_OUTPUT_COUNT 32
typedef struct pepper_region pepper_region_t;
typedef struct pepper_surface_state pepper_surface_state_t;
struct pepper_object
{
pepper_object_type_t type;
- pepper_map_t *user_data_map;
+ pepper_map_t user_data_map;
+ pepper_map_entry_t *buckets[1 << PEPPER_OBJECT_BUCKET_BITS];
pepper_list_t event_listener_list;
};
pepper_object_alloc(pepper_object_type_t type, size_t size);
void
+pepper_object_init(pepper_object_t *object, pepper_object_type_t type);
+
+void
pepper_object_fini(pepper_object_t *object);
/* compositor */