44 lines
858 B
C
44 lines
858 B
C
#include "module_registry.h"
|
|
#include "hash_table.h"
|
|
|
|
static TYPED_HASH_TABLE(GraphNodeSpecification*) registry;
|
|
static bool initialized = false;
|
|
|
|
static void
|
|
ensure_initialized()
|
|
{
|
|
if (!initialized) {
|
|
hash_table_init(®istry, NULL);
|
|
initialized = true;
|
|
}
|
|
}
|
|
|
|
void
|
|
register_graph_node_specification(GraphNodeSpecification * spec)
|
|
{
|
|
ensure_initialized();
|
|
if (!spec->name) {
|
|
return;
|
|
}
|
|
hash_table_insert(®istry, hash_table_key_from_cstr(spec->name), &spec);
|
|
}
|
|
|
|
GraphNodeSpecification *
|
|
lookup_graph_node_specification(const char * name)
|
|
{
|
|
ensure_initialized();
|
|
HashTableIndex idx = hash_table_find(®istry, hash_table_key_from_cstr(name));
|
|
if (idx < 0) {
|
|
return NULL;
|
|
}
|
|
return registry.value_array[idx];
|
|
}
|
|
|
|
void
|
|
destroy_graph_node_specification_registry()
|
|
{
|
|
ensure_initialized();
|
|
hash_table_deinit(®istry);
|
|
initialized = false;
|
|
}
|