diff options
author | David Robillard <d@drobilla.net> | 2018-05-12 17:56:27 +0200 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2018-05-27 18:23:15 +0200 |
commit | cc1378913b22737fc1abb81de15313099d005eae (patch) | |
tree | abbba65b63b991eae9add189ac990f331c25afaf | |
parent | 9143f8ece49e902dda34a5c99ae721543bfa0d33 (diff) | |
download | serd-cc1378913b22737fc1abb81de15313099d005eae.tar.gz serd-cc1378913b22737fc1abb81de15313099d005eae.tar.bz2 serd-cc1378913b22737fc1abb81de15313099d005eae.zip |
Add serd_world_get_blank()
-rw-r--r-- | serd/serd.h | 10 | ||||
-rw-r--r-- | src/world.c | 19 | ||||
-rw-r--r-- | src/world.h | 2 |
3 files changed, 30 insertions, 1 deletions
diff --git a/serd/serd.h b/serd/serd.h index 89f612a3..c765f8dd 100644 --- a/serd/serd.h +++ b/serd/serd.h @@ -721,6 +721,16 @@ void serd_world_free(SerdWorld* world); /** + Return a unique blank node. + + The returned node is valid only until the next time serd_world_get_blank() + is called or the world is destroyed. +*/ +SERD_API +const SerdNode* +serd_world_get_blank(SerdWorld* world); + +/** Set a function to be called when errors occur. The `error_sink` will be called with `handle` as its first argument. If diff --git a/src/world.c b/src/world.c index 0457e34f..9d364e04 100644 --- a/src/world.c +++ b/src/world.c @@ -18,6 +18,7 @@ #include "world.h" +#include "node.h" #include "serd_config.h" #include <errno.h> @@ -29,6 +30,8 @@ # include <fcntl.h> #endif +#define BLANK_CHARS 11 + FILE* serd_world_fopen(SerdWorld* world, const char* path, const char* mode) { @@ -71,7 +74,11 @@ serd_world_errorf(SerdWorld* world, SerdStatus st, const char* fmt, ...) SerdWorld* serd_world_new(void) { - return (SerdWorld*)calloc(1, sizeof(SerdWorld)); + SerdWorld* world = (SerdWorld*)calloc(1, sizeof(SerdWorld)); + + world->blank_node = serd_node_new_blank("b0000000000"); + + return world; } void @@ -80,6 +87,16 @@ serd_world_free(SerdWorld* world) free(world); } +const SerdNode* +serd_world_get_blank(SerdWorld* world) +{ + char* buf = serd_node_buffer(world->blank_node); + memset(buf, 0, BLANK_CHARS + 1); + world->blank_node->n_bytes = snprintf( + buf, BLANK_CHARS, "b%u", ++world->next_blank_id); + return world->blank_node; +} + void serd_world_set_error_sink(SerdWorld* world, SerdErrorSink error_sink, diff --git a/src/world.h b/src/world.h index f35eb96c..e3bd3784 100644 --- a/src/world.h +++ b/src/world.h @@ -24,6 +24,8 @@ struct SerdWorldImpl { SerdErrorSink error_sink; void* error_handle; + uint32_t next_blank_id; + SerdNode* blank_node; }; FILE* serd_world_fopen(SerdWorld* world, const char* path, const char* mode); |