aboutsummaryrefslogtreecommitdiffstats
path: root/src/world.c
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2018-10-28 14:15:28 +0100
committerDavid Robillard <d@drobilla.net>2021-03-08 23:23:05 -0500
commit6aee38ce233b319c4ee3ac1f16f4c2ca621cb4b0 (patch)
tree566321615dbbdc73554339c73da67a4bc0c02638 /src/world.c
parent800f2d0d4960061a1739a36d8b608a13896b321e (diff)
downloadserd-6aee38ce233b319c4ee3ac1f16f4c2ca621cb4b0.tar.gz
serd-6aee38ce233b319c4ee3ac1f16f4c2ca621cb4b0.tar.bz2
serd-6aee38ce233b319c4ee3ac1f16f4c2ca621cb4b0.zip
Cache commonly used nodes in the world
Diffstat (limited to 'src/world.c')
-rw-r--r--src/world.c29
1 files changed, 27 insertions, 2 deletions
diff --git a/src/world.c b/src/world.c
index 1b66f025..354331f6 100644
--- a/src/world.c
+++ b/src/world.c
@@ -21,6 +21,7 @@
#include "cursor.h"
#include "node.h"
#include "serd_config.h"
+#include "serd_internal.h"
#if defined(USE_POSIX_FADVISE)
# include <fcntl.h>
@@ -86,8 +87,25 @@ SerdWorld*
serd_world_new(void)
{
SerdWorld* world = (SerdWorld*)calloc(1, sizeof(SerdWorld));
-
- world->blank_node = serd_new_blank(SERD_STATIC_STRING("b00000000000"));
+ SerdNodes* nodes = serd_nodes_new();
+
+ const SerdStringView rdf_first = SERD_STATIC_STRING(NS_RDF "first");
+ const SerdStringView rdf_nil = SERD_STATIC_STRING(NS_RDF "nil");
+ const SerdStringView rdf_rest = SERD_STATIC_STRING(NS_RDF "rest");
+ const SerdStringView rdf_type = SERD_STATIC_STRING(NS_RDF "type");
+ const SerdStringView xsd_boolean = SERD_STATIC_STRING(NS_XSD "boolean");
+ const SerdStringView xsd_decimal = SERD_STATIC_STRING(NS_XSD "decimal");
+ const SerdStringView xsd_integer = SERD_STATIC_STRING(NS_XSD "integer");
+
+ world->rdf_first = serd_nodes_manage(nodes, serd_new_uri(rdf_first));
+ world->rdf_nil = serd_nodes_manage(nodes, serd_new_uri(rdf_nil));
+ world->rdf_rest = serd_nodes_manage(nodes, serd_new_uri(rdf_rest));
+ world->rdf_type = serd_nodes_manage(nodes, serd_new_uri(rdf_type));
+ world->xsd_boolean = serd_nodes_manage(nodes, serd_new_uri(xsd_boolean));
+ world->xsd_decimal = serd_nodes_manage(nodes, serd_new_uri(xsd_decimal));
+ world->xsd_integer = serd_nodes_manage(nodes, serd_new_uri(xsd_integer));
+ world->blank_node = serd_new_blank(SERD_STATIC_STRING("b00000000000"));
+ world->nodes = nodes;
return world;
}
@@ -97,10 +115,17 @@ serd_world_free(SerdWorld* world)
{
if (world) {
serd_node_free(world->blank_node);
+ serd_nodes_free(world->nodes);
free(world);
}
}
+SerdNodes*
+serd_world_nodes(SerdWorld* world)
+{
+ return world->nodes;
+}
+
const SerdNode*
serd_world_get_blank(SerdWorld* world)
{