diff options
author | David Robillard <d@drobilla.net> | 2018-09-30 17:31:10 +0200 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2020-10-27 13:13:58 +0100 |
commit | a938b755197e8a2ea660cfae1b1ef160e8d59e11 (patch) | |
tree | f7cc470af4109c23e8b8a6d1e4f0ed63cb8e4e35 /src/env.c | |
parent | 2f8014934fc8f4c6946bf81fe3898c39db611261 (diff) | |
download | serd-a938b755197e8a2ea660cfae1b1ef160e8d59e11.tar.gz serd-a938b755197e8a2ea660cfae1b1ef160e8d59e11.tar.bz2 serd-a938b755197e8a2ea660cfae1b1ef160e8d59e11.zip |
Add serd_env_copy() and serd_env_equals()
Diffstat (limited to 'src/env.c')
-rw-r--r-- | src/env.c | 36 |
1 files changed, 36 insertions, 0 deletions
@@ -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) { |