aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--serd/serd.h10
-rw-r--r--src/node.c14
-rw-r--r--tests/serd_test.c16
3 files changed, 40 insertions, 0 deletions
diff --git a/serd/serd.h b/serd/serd.h
index 9688ad4e..be819d55 100644
--- a/serd/serd.h
+++ b/serd/serd.h
@@ -485,6 +485,16 @@ serd_node_new_literal(const char* str,
const char* lang);
/**
+ Create a new blank node.
+
+ Note this function measures `str`, which is a common bottleneck.
+ Use sord_node_from_serd_node() instead if `str` is already measured.
+*/
+SERD_API
+SerdNode*
+serd_node_new_blank(const char* str);
+
+/**
Simple wrapper for serd_node_new_uri() to resolve a URI node.
*/
SERD_API
diff --git a/src/node.c b/src/node.c
index 3c6c9d45..abe9304c 100644
--- a/src/node.c
+++ b/src/node.c
@@ -170,6 +170,20 @@ serd_node_new_literal(const char* str,
}
SerdNode*
+serd_node_new_blank(const char* str)
+{
+ if (!str) {
+ return NULL;
+ }
+
+ const size_t n_bytes = strlen(str);
+ SerdNode* node = serd_node_malloc(n_bytes, 0, SERD_BLANK);
+ memcpy(serd_node_buffer(node), str, n_bytes);
+ node->n_bytes = n_bytes;
+ return node;
+}
+
+SerdNode*
serd_node_copy(const SerdNode* node)
{
if (!node) {
diff --git a/tests/serd_test.c b/tests/serd_test.c
index 2b50e647..d46e01ba 100644
--- a/tests/serd_test.c
+++ b/tests/serd_test.c
@@ -473,8 +473,22 @@ test_relative_uri(void)
}
static void
+test_blank(void)
+{
+ assert(!serd_node_new_blank(NULL));
+
+ SerdNode* blank = serd_node_new_blank("b0");
+ assert(serd_node_get_length(blank) == 2);
+ assert(serd_node_get_flags(blank) == 0);
+ assert(!strcmp(serd_node_get_string(blank), "b0"));
+ serd_node_free(blank);
+}
+
+static void
test_env(void)
{
+ SerdWorld* world = serd_world_new();
+
SerdNode* u = serd_node_new_string(SERD_URI, "http://example.org/foo");
SerdNode* b = serd_node_new_string(SERD_CURIE, "invalid");
SerdNode* c = serd_node_new_string(SERD_CURIE, "eg.2:b");
@@ -527,6 +541,7 @@ test_env(void)
serd_node_free(u);
serd_env_free(env);
+ serd_world_free(world);
}
static void
@@ -689,6 +704,7 @@ main(void)
test_literal();
test_uri_from_string();
test_relative_uri();
+ test_blank();
test_env();
test_read_chunks();