123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- #include "zori.h"
- #include "zori_registry.h"
- /* registry functionality */
- /** Compare registry entries. */
- int zori_registry_entry_compare(const void * v1, const void * v2) {
- const struct zori_registry_entry * entry1 = v1;
- const struct zori_registry_entry * entry2 = v2;
- return (entry2->id - entry1->id);
- }
- /** Initialize the registry. */
- zori_id zori_registry_init(struct zori_registry * registry) {
- miao_init(registry);
- return ZORI_ID_OK;
- }
- /** Destroy the registry */
- void zori_registry_destroy(struct zori_registry * registry) {
- if(registry) {
- miao_done(registry);
- }
- }
- /** Add an entry to the registry. */
- zori_id
- zori_registry_add(struct zori_registry * registry, zori_id id,
- struct zori_widget * widget) {
- struct zori_registry_entry entry = { id, widget };
- if (miao_push(registry, entry)) {
- miao_qsort(registry, zori_registry_entry_compare);
- return ZORI_ID_OK;
- }
- return ZORI_ID_ENOMEM;
- }
- /** Look up an entry in the registry. */
- struct zori_registry_entry *
- zori_registry_lookup_entry(struct zori_registry * registry, zori_id id) {
- struct zori_registry_entry key = { id, NULL };
- return miao_bsearch(registry, zori_registry_entry_compare, &key);
- }
- /** Look up a widget in the registry. */
- struct zori_widget *
- zori_registry_lookup(struct zori_registry * registry, zori_id id) {
- struct zori_widget * result = NULL;
- struct zori_registry_entry * entry = NULL;
-
- entry = zori_registry_lookup_entry(registry, id);
- if (entry) {
- result = entry->widget;
- }
- return result;
- }
- /** Remove an entry from the registry. */
- zori_id
- zori_registry_remove(struct zori_registry * registry, zori_id id) {
- struct zori_registry_entry * entry = NULL;
- entry = zori_registry_lookup_entry(registry, id);
- if (entry) {
- miao_delete_entry(registry, entry);
- }
- return ZORI_ID_OK;
- }
- /** The global registry for Zori. */
- static struct zori_registry * the_zori_registry = NULL;
- /** Intializes the global registry for zori. */
- zori_id zori_initialize_registry() {
- the_zori_registry = calloc(1, sizeof(*the_zori_registry));
- if (!the_zori_registry) return ZORI_ID_ENOMEM;
- return zori_registry_init(the_zori_registry);
- }
- /** Destroys the global registry for zori. */
- zori_id zori_destroy_registry() {
- zori_registry_destroy(the_zori_registry);
- free(the_zori_registry);
- the_zori_registry = NULL;
- return ZORI_ID_OK;
- }
- /** Returns the global registry for Zori. */
- struct zori_registry * zori_get_registry() {
- return the_zori_registry;
- }
|