aboutsummaryrefslogtreecommitdiffstats
path: root/src/env.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2021-07-11 18:44:03 -0400
committerDavid Robillard <d@drobilla.net>2022-01-14 19:36:06 -0500
commit5edfa72b81b46866a87d4f3c118492ee99bc0476 (patch)
tree8e98be947e8ac2d887ed3687d0c7a9948b0d0f82 /src/env.c
parent7269c12bbe4532f5f5844aaec16cf1bb75a1c71c (diff)
downloadserd-5edfa72b81b46866a87d4f3c118492ee99bc0476.tar.gz
serd-5edfa72b81b46866a87d4f3c118492ee99bc0476.tar.bz2
serd-5edfa72b81b46866a87d4f3c118492ee99bc0476.zip
Remove SERD_CURIE node datatype entirely
Diffstat (limited to 'src/env.c')
-rw-r--r--src/env.c67
1 files changed, 22 insertions, 45 deletions
diff --git a/src/env.c b/src/env.c
index dccff337..8aaae29e 100644
--- a/src/env.c
+++ b/src/env.c
@@ -208,51 +208,29 @@ serd_env_set_prefix(SerdEnv* const env,
return SERD_SUCCESS;
}
-bool
-serd_env_qualify_in_place(const SerdEnv* const env,
- const SerdNode* const uri,
- const SerdNode** const prefix,
- SerdStringView* const suffix)
+SerdStatus
+serd_env_qualify(const SerdEnv* const env,
+ const SerdStringView uri,
+ SerdStringView* const prefix,
+ SerdStringView* const suffix)
{
for (size_t i = 0; i < env->n_prefixes; ++i) {
- const SerdNode* const prefix_uri = env->prefixes[i].uri;
- if (uri->length >= prefix_uri->length) {
+ const SerdNode* const prefix_uri = env->prefixes[i].uri;
+ const size_t prefix_uri_len = serd_node_length(prefix_uri);
+ if (uri.len >= prefix_uri_len) {
const char* prefix_str = serd_node_string(prefix_uri);
- const char* uri_str = serd_node_string(uri);
+ const char* uri_str = uri.buf;
- if (!strncmp(uri_str, prefix_str, prefix_uri->length)) {
- *prefix = env->prefixes[i].name;
- suffix->buf = uri_str + prefix_uri->length;
- suffix->len = uri->length - prefix_uri->length;
- return true;
+ if (!strncmp(uri_str, prefix_str, prefix_uri_len)) {
+ *prefix = serd_node_string_view(env->prefixes[i].name);
+ suffix->buf = uri_str + prefix_uri_len;
+ suffix->len = uri.len - prefix_uri_len;
+ return SERD_SUCCESS;
}
}
}
- return false;
-}
-
-SerdNode*
-serd_env_qualify(const SerdEnv* const env, const SerdNode* const uri)
-{
- if (!env || !uri) {
- return NULL;
- }
- const SerdNode* prefix = NULL;
- SerdStringView suffix = {NULL, 0};
- if (serd_env_qualify_in_place(env, uri, &prefix, &suffix)) {
- const size_t prefix_len = serd_node_length(prefix);
- const size_t length = prefix_len + 1 + suffix.len;
- SerdNode* node = serd_node_malloc(length, 0, SERD_CURIE);
-
- memcpy(serd_node_buffer(node), serd_node_string(prefix), prefix_len);
- serd_node_buffer(node)[prefix_len] = ':';
- memcpy(serd_node_buffer(node) + 1 + prefix_len, suffix.buf, suffix.len);
- node->length = length;
- return node;
- }
-
- return NULL;
+ return SERD_FAILURE;
}
SerdStatus
@@ -288,15 +266,16 @@ expand_uri(const SerdEnv* env, const SerdNode* node)
return serd_new_resolved_uri(serd_node_string_view(node), env->base_uri);
}
-static SerdNode*
-expand_curie(const SerdEnv* env, const SerdNode* node)
+SerdNode*
+serd_env_expand_curie(const SerdEnv* const env, const SerdStringView curie)
{
- assert(serd_node_type(node) == SERD_CURIE);
+ if (!env) {
+ return NULL;
+ }
SerdStringView prefix;
SerdStringView suffix;
- if (serd_env_expand_in_place(
- env, serd_node_string_view(node), &prefix, &suffix)) {
+ if (serd_env_expand_in_place(env, curie, &prefix, &suffix)) {
return NULL;
}
@@ -310,7 +289,7 @@ expand_curie(const SerdEnv* env, const SerdNode* node)
}
SerdNode*
-serd_env_expand(const SerdEnv* env, const SerdNode* node)
+serd_env_expand_node(const SerdEnv* const env, const SerdNode* const node)
{
if (!env || !node) {
return NULL;
@@ -321,8 +300,6 @@ serd_env_expand(const SerdEnv* env, const SerdNode* node)
break;
case SERD_URI:
return expand_uri(env, node);
- case SERD_CURIE:
- return expand_curie(env, node);
case SERD_BLANK:
case SERD_VARIABLE:
break;