aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2018-12-26 11:54:21 -0500
committerDavid Robillard <d@drobilla.net>2022-01-13 23:03:43 -0500
commit2ddf10fb8bfabff3ecdbe9ea866a905631ec2866 (patch)
tree112a6068678ec9696d1ede59db0e461d920ca4ab
parentc90c662f85ca1a36794a0404b2101a72de020ca3 (diff)
downloadserd-2ddf10fb8bfabff3ecdbe9ea866a905631ec2866.tar.gz
serd-2ddf10fb8bfabff3ecdbe9ea866a905631ec2866.tar.bz2
serd-2ddf10fb8bfabff3ecdbe9ea866a905631ec2866.zip
Add serd_new_boolean()
-rw-r--r--include/serd/serd.h5
-rw-r--r--src/node.c7
-rw-r--r--src/static_nodes.h1
-rw-r--r--test/test_node.c22
4 files changed, 35 insertions, 0 deletions
diff --git a/include/serd/serd.h b/include/serd/serd.h
index 2dd551fd..80a12452 100644
--- a/include/serd/serd.h
+++ b/include/serd/serd.h
@@ -598,6 +598,11 @@ SERD_API
SerdNode* SERD_ALLOCATED
serd_new_file_uri(SerdStringView path, SerdStringView hostname);
+/// Create a new node by serialising `b` into an xsd:boolean string
+SERD_API
+SerdNode* SERD_ALLOCATED
+serd_new_boolean(bool b);
+
/**
Create a new canonical xsd:decimal literal.
diff --git a/src/node.c b/src/node.c
index 6ba00048..b5a7816b 100644
--- a/src/node.c
+++ b/src/node.c
@@ -515,6 +515,13 @@ serd_new_custom_literal(const void* const user_data,
}
SerdNode*
+serd_new_boolean(bool b)
+{
+ return serd_new_typed_literal(b ? SERD_STRING("true") : SERD_STRING("false"),
+ serd_node_string_view(&serd_xsd_boolean.node));
+}
+
+SerdNode*
serd_new_decimal(const double d, const SerdNode* const datatype)
{
// Use given datatype, or xsd:decimal as a default if it is null
diff --git a/src/static_nodes.h b/src/static_nodes.h
index 18950444..952c0634 100644
--- a/src/static_nodes.h
+++ b/src/static_nodes.h
@@ -32,6 +32,7 @@ typedef struct StaticNode {
{sizeof(NS_XSD #name) - 1, 0, SERD_URI}, NS_XSD #name};
DEFINE_XSD_NODE(base64Binary)
+DEFINE_XSD_NODE(boolean)
DEFINE_XSD_NODE(decimal)
DEFINE_XSD_NODE(integer)
diff --git a/test/test_node.c b/test/test_node.c
index 968d4ada..f286aa16 100644
--- a/test/test_node.c
+++ b/test/test_node.c
@@ -21,6 +21,7 @@
#include <assert.h>
#include <float.h>
#include <math.h>
+#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
@@ -118,6 +119,26 @@ test_integer_to_node(void)
}
static void
+test_boolean(void)
+{
+ SerdNode* const true_node = serd_new_boolean(true);
+ assert(!strcmp(serd_node_string(true_node), "true"));
+
+ const SerdNode* const true_datatype = serd_node_datatype(true_node);
+ assert(true_datatype);
+ assert(!strcmp(serd_node_string(true_datatype), NS_XSD "boolean"));
+ serd_node_free(true_node);
+
+ SerdNode* const false_node = serd_new_boolean(false);
+ assert(!strcmp(serd_node_string(false_node), "false"));
+
+ const SerdNode* const false_datatype = serd_node_datatype(false_node);
+ assert(false_datatype);
+ assert(!strcmp(serd_node_string(false_datatype), NS_XSD "boolean"));
+ serd_node_free(false_node);
+}
+
+static void
test_blob_to_node(void)
{
assert(!serd_new_base64(&SERD_URI_NULL, 0, NULL));
@@ -302,6 +323,7 @@ main(void)
test_new_decimal();
test_integer_to_node();
test_blob_to_node();
+ test_boolean();
test_node_equals();
test_node_from_string();
test_node_from_substring();