aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2018-09-30 17:31:10 +0200
committerDavid Robillard <d@drobilla.net>2020-10-27 13:13:58 +0100
commita938b755197e8a2ea660cfae1b1ef160e8d59e11 (patch)
treef7cc470af4109c23e8b8a6d1e4f0ed63cb8e4e35 /src
parent2f8014934fc8f4c6946bf81fe3898c39db611261 (diff)
downloadserd-a938b755197e8a2ea660cfae1b1ef160e8d59e11.tar.gz
serd-a938b755197e8a2ea660cfae1b1ef160e8d59e11.tar.bz2
serd-a938b755197e8a2ea660cfae1b1ef160e8d59e11.zip
Add serd_env_copy() and serd_env_equals()
Diffstat (limited to 'src')
-rw-r--r--src/env.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/env.c b/src/env.c
index 15e49413..6828a0fd 100644
--- a/src/env.c
+++ b/src/env.c
@@ -47,6 +47,22 @@ serd_env_new(const SerdNode* base_uri)
return env;
}
+SerdEnv*
+serd_env_copy(const SerdEnv* env)
+{
+ SerdEnv* copy = (SerdEnv*)calloc(1, sizeof(struct SerdEnvImpl));
+
+ copy->n_prefixes = env->n_prefixes;
+ copy->prefixes = (SerdPrefix*)malloc(copy->n_prefixes * sizeof(SerdPrefix));
+ for (size_t i = 0; i < copy->n_prefixes; ++i) {
+ copy->prefixes[i].name = serd_node_copy(env->prefixes[i].name);
+ copy->prefixes[i].uri = serd_node_copy(env->prefixes[i].uri);
+ }
+
+ serd_env_set_base_uri(copy, serd_env_base_uri(env));
+ return copy;
+}
+
void
serd_env_free(SerdEnv* env)
{
@@ -63,6 +79,26 @@ serd_env_free(SerdEnv* env)
free(env);
}
+bool
+serd_env_equals(const SerdEnv* a, const SerdEnv* b)
+{
+ if (!a || !b) {
+ return !a == !b;
+ } else if (a->n_prefixes != b->n_prefixes ||
+ !serd_node_equals(a->base_uri_node, b->base_uri_node)) {
+ return false;
+ }
+
+ for (size_t i = 0; i < a->n_prefixes; ++i) {
+ if (!serd_node_equals(a->prefixes[i].name, b->prefixes[i].name) ||
+ !serd_node_equals(a->prefixes[i].uri, b->prefixes[i].uri)) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
const SerdURI*
serd_env_get_parsed_base_uri(const SerdEnv* env)
{