aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2018-06-13 15:18:27 -0400
committerDavid Robillard <d@drobilla.net>2020-10-27 13:13:58 +0100
commit06b775c1de2173720fe12abec2fbe225c353a12b (patch)
tree8d244b45091234136a47c038b33042a77f740134
parent897590f6408b9b2b1aae2a060465da6d0faf42be (diff)
downloadserd-06b775c1de2173720fe12abec2fbe225c353a12b.tar.gz
serd-06b775c1de2173720fe12abec2fbe225c353a12b.tar.bz2
serd-06b775c1de2173720fe12abec2fbe225c353a12b.zip
Shorten node constructor names
-rw-r--r--serd/serd.h83
-rw-r--r--src/env.c16
-rw-r--r--src/node.c209
-rw-r--r--src/node.h2
-rw-r--r--src/serdi.c6
-rw-r--r--src/world.c2
-rw-r--r--tests/env_test.c18
-rw-r--r--tests/serd_test.c150
8 files changed, 305 insertions, 181 deletions
diff --git a/serd/serd.h b/serd/serd.h
index 382506f7..e576398b 100644
--- a/serd/serd.h
+++ b/serd/serd.h
@@ -347,7 +347,7 @@ serd_strtod(const char* str, size_t* end);
/**
Decode a base64 string.
This function can be used to deserialise a blob node created with
- serd_node_new_blob().
+ serd_new_blob().
@param str Base64 string to decode.
@param len The length of `str`.
@@ -525,61 +525,97 @@ serd_uri_serialise_relative(const SerdURI* uri,
*/
SERD_API
SerdNode*
-serd_node_new_simple_node(SerdType type, const char* str, size_t len);
+serd_new_simple_node(SerdType type, const char* str, size_t len);
/**
Create a new plain literal string node from `str`.
*/
SERD_API
SerdNode*
-serd_node_new_string(const char* str);
+serd_new_string(const char* str);
/**
Create a new plain literal string node from a prefix of `str`.
*/
SERD_API
SerdNode*
-serd_node_new_substring(const char* str, size_t len);
+serd_new_substring(const char* str, size_t len);
+
+/**
+ Create a new literal node from substrings.
+
+ This is a low-level constructor which can be used for constructing a literal
+ from slices of a buffer (for example, directly from a Turtle literal)
+ without copying. In most cases, applications should use the simpler
+ serd_new_plain_literal() or serd_new_typed_literal().
+
+ Either `datatype_uri` or `lang` can be given, but not both, unless
+ `datatype_uri` is rdf:langString in which case it is ignored.
+
+ @param str Literal body string.
+ @param str_len Length of `str` in bytes.
+ @param datatype_uri Full datatype URI, or NULL.
+ @param datatype_uri_len Length of `datatype_uri` in bytes.
+ @param lang Language string.
+ @param lang_len Length of `lang` in bytes.
+*/
+SERD_API
+SerdNode*
+serd_new_literal(const char* str,
+ size_t str_len,
+ const char* datatype_uri,
+ size_t datatype_uri_len,
+ const char* lang,
+ size_t lang_len);
/**
Create a new literal node from `str`.
- Either `datatype` or `lang` can be given, but not both, unless `datatype` is
- rdf:langString in which case it is ignored.
+ A plain literal has no datatype, but may have a language tag. The `lang`
+ may be NULL, in which case this is equivalent to `serd_new_string()`.
*/
SERD_API
SerdNode*
-serd_node_new_literal(const char* str,
- const SerdNode* datatype,
- const char* lang);
+serd_new_plain_literal(const char* str, const char* lang);
+
+/**
+ Create a new typed literal node from `str`.
+
+ A typed literal has no language tag, but may have a datatype. The
+ `datatype` may be NULL, in which case this is equivalent to
+ `serd_new_string()`.
+*/
+SERD_API
+SerdNode*
+serd_new_typed_literal(const char* str, const SerdNode* datatype);
/**
Create a new blank node.
*/
SERD_API
SerdNode*
-serd_node_new_blank(const char* str);
+serd_new_blank(const char* str);
/**
Create a new CURIE node.
*/
SERD_API
SerdNode*
-serd_node_new_curie(const char* str);
+serd_new_curie(const char* str);
/**
Create a new URI from a string.
*/
SERD_API
SerdNode*
-serd_node_new_uri(const char* str);
+serd_new_uri(const char* str);
/**
Create a new URI from a string, resolved against a base URI.
*/
SERD_API
SerdNode*
-serd_node_new_resolved_uri(const char* str, const SerdNode* base);
+serd_new_resolved_uri(const char* str, const SerdNode* base);
/**
Resolve `node` against `base`.
@@ -601,7 +637,7 @@ serd_node_resolve(const SerdNode* node, const SerdNode* base);
*/
SERD_API
SerdNode*
-serd_node_new_file_uri(const char* path, const char* hostname, bool escape);
+serd_new_file_uri(const char* path, const char* hostname, bool escape);
/**
Create a new URI from a string, relative to a base URI.
@@ -618,9 +654,9 @@ serd_node_new_file_uri(const char* path, const char* hostname, bool escape);
*/
SERD_API
SerdNode*
-serd_node_new_relative_uri(const char* str,
- const SerdNode* base,
- const SerdNode* root);
+serd_new_relative_uri(const char* str,
+ const SerdNode* base,
+ const SerdNode* root);
/**
Create a new node by serialising `d` into an xsd:decimal string.
@@ -643,7 +679,7 @@ serd_node_new_relative_uri(const char* str,
*/
SERD_API
SerdNode*
-serd_node_new_decimal(double d, unsigned frac_digits, const SerdNode* datatype);
+serd_new_decimal(double d, unsigned frac_digits, const SerdNode* datatype);
/**
Create a new node by serialising `i` into an xsd:integer string.
@@ -655,7 +691,7 @@ serd_node_new_decimal(double d, unsigned frac_digits, const SerdNode* datatype);
*/
SERD_API
SerdNode*
-serd_node_new_integer(int64_t i, const SerdNode* datatype);
+serd_new_integer(int64_t i, const SerdNode* datatype);
/**
Create a node by serialising `buf` into an xsd:base64Binary string.
@@ -672,10 +708,11 @@ serd_node_new_integer(int64_t i, const SerdNode* datatype);
type xsd:base64Binary.
*/
SERD_API
-SerdNode* serd_node_new_blob(const void* buf,
- size_t size,
- bool wrap_lines,
- const SerdNode* datatype);
+SerdNode*
+serd_new_blob(const void* buf,
+ size_t size,
+ bool wrap_lines,
+ const SerdNode* datatype);
/**
Return a deep copy of `node`.
diff --git a/src/env.c b/src/env.c
index 298d22e8..dd73a06f 100644
--- a/src/env.c
+++ b/src/env.c
@@ -84,7 +84,7 @@ serd_env_set_base_uri(SerdEnv* env,
}
// Resolve base URI and create a new node and URI for it
- SerdNode* base_uri_node = serd_node_new_resolved_uri_i(
+ SerdNode* base_uri_node = serd_new_resolved_uri_i(
serd_node_string(uri), &env->base_uri);
SerdURI base_uri;
@@ -149,7 +149,7 @@ serd_env_set_prefix(SerdEnv* env,
serd_env_add(env, name, uri);
} else {
// Resolve relative URI and create a new node and URI for it
- SerdNode* abs_uri = serd_node_new_resolved_uri_i(
+ SerdNode* abs_uri = serd_new_resolved_uri_i(
serd_node_string(uri), &env->base_uri);
// Set prefix to resolved (absolute) URI
@@ -164,8 +164,8 @@ serd_env_set_prefix_from_strings(SerdEnv* env,
const char* name,
const char* uri)
{
- SerdNode* name_node = serd_node_new_string(name);
- SerdNode* uri_node = serd_node_new_uri(uri);
+ SerdNode* name_node = serd_new_string(name);
+ SerdNode* uri_node = serd_new_uri(uri);
const SerdStatus st = serd_env_set_prefix(env, name_node, uri_node);
@@ -231,17 +231,15 @@ serd_env_expand_node(const SerdEnv* env,
SerdNode* datatype = serd_env_expand_node(
env, serd_node_datatype(node));
if (datatype) {
- SerdNode* ret = serd_node_new_literal(serd_node_string(node),
- datatype,
- NULL);
+ SerdNode* ret =
+ serd_new_typed_literal(serd_node_string(node), datatype);
serd_node_free(datatype);
return ret;
}
}
return NULL;
case SERD_URI:
- return serd_node_new_resolved_uri_i(
- serd_node_string(node), &env->base_uri);
+ return serd_new_resolved_uri_i(serd_node_string(node), &env->base_uri);
case SERD_CURIE: {
SerdStringView prefix;
SerdStringView suffix;
diff --git a/src/node.c b/src/node.c
index 7dc8ed62..cbad34bf 100644
--- a/src/node.c
+++ b/src/node.c
@@ -44,7 +44,7 @@
static const size_t serd_node_align = sizeof(SerdNode);
static SerdNode*
-serd_node_new_from_uri(const SerdURI* uri, const SerdURI* base);
+serd_new_from_uri(const SerdURI* uri, const SerdURI* base);
static size_t
serd_node_pad_size(const size_t n_bytes)
@@ -128,7 +128,7 @@ serd_node_set(SerdNode** dst, const SerdNode* src)
}
SerdNode*
-serd_node_new_simple_node(SerdType type, const char* str, const size_t len)
+serd_new_simple_node(SerdType type, const char* str, const size_t len)
{
if (!str) {
return NULL;
@@ -144,7 +144,7 @@ serd_node_new_simple_node(SerdType type, const char* str, const size_t len)
}
SerdNode*
-serd_node_new_string(const char* str)
+serd_new_string(const char* str)
{
if (!str) {
return NULL;
@@ -160,7 +160,7 @@ serd_node_new_string(const char* str)
}
SerdNode*
-serd_node_new_substring(const char* str, const size_t len)
+serd_new_substring(const char* str, const size_t len)
{
if (!str) {
return NULL;
@@ -174,74 +174,147 @@ serd_node_new_substring(const char* str, const size_t len)
return node;
}
-SerdNode*
-serd_node_new_literal(const char* str,
- const SerdNode* datatype,
- const char* lang)
+/// Internal pre-measured implementation of serd_new_plain_literal
+static SerdNode*
+serd_new_plain_literal_i(const char* str,
+ const size_t str_len,
+ SerdNodeFlags flags,
+ const char* lang,
+ const size_t lang_len)
{
- serd_node_check_padding(datatype);
+ assert(str);
+ assert(lang);
+
+ flags |= SERD_HAS_LANGUAGE;
+
+ const size_t len = serd_node_pad_size(str_len);
+ const size_t total_len = len + sizeof(SerdNode) + lang_len;
+
+ SerdNode* node = serd_node_malloc(total_len, flags, SERD_LITERAL);
+ memcpy(serd_node_buffer(node), str, str_len);
+ node->n_bytes = str_len;
+
+ SerdNode* lang_node = node + 1 + (len / serd_node_align);
+ lang_node->type = SERD_LITERAL;
+ lang_node->n_bytes = lang_len;
+ memcpy(serd_node_buffer(lang_node), lang, lang_len);
+ serd_node_check_padding(lang_node);
- if (!str || (lang && datatype &&
- strcmp(serd_node_buffer_c(datatype), NS_RDF "langString")) ||
- (datatype && serd_node_type(datatype) != SERD_URI)) {
+ serd_node_check_padding(node);
+ return node;
+}
+
+/// Internal pre-measured implementation of serd_new_typed_literal
+static SerdNode*
+serd_new_typed_literal_i(const char* str,
+ const size_t str_len,
+ SerdNodeFlags flags,
+ const char* datatype_uri,
+ const size_t datatype_uri_len)
+{
+ assert(str);
+ assert(datatype_uri);
+ assert(strcmp(datatype_uri, NS_RDF "langString"));
+
+ flags |= SERD_HAS_DATATYPE;
+
+ const size_t len = serd_node_pad_size(str_len);
+ const size_t total_len = len + sizeof(SerdNode) + datatype_uri_len;
+
+ SerdNode* node = serd_node_malloc(total_len, flags, SERD_LITERAL);
+ memcpy(serd_node_buffer(node), str, str_len);
+ node->n_bytes = str_len;
+
+ SerdNode* datatype_node = node + 1 + (len / serd_node_align);
+ datatype_node->n_bytes = datatype_uri_len;
+ datatype_node->type = SERD_URI;
+ memcpy(serd_node_buffer(datatype_node), datatype_uri, datatype_uri_len);
+ serd_node_check_padding(datatype_node);
+
+ serd_node_check_padding(node);
+ return node;
+}
+
+SerdNode*
+serd_new_literal(const char* str,
+ const size_t str_len,
+ const char* datatype_uri,
+ const size_t datatype_uri_len,
+ const char* lang,
+ const size_t lang_len)
+{
+ if (!str ||
+ (lang && datatype_uri && strcmp(datatype_uri, NS_RDF "langString"))) {
return NULL;
}
- SerdNodeFlags flags = 0;
- const size_t n_bytes = serd_strlen(str, &flags);
- const size_t len = serd_node_pad_size(n_bytes);
+ SerdNodeFlags flags = 0;
+ serd_substrlen(str, str_len, &flags);
- SerdNode* node = NULL;
if (lang) {
- flags |= SERD_HAS_LANGUAGE;
- const size_t lang_len = strlen(lang);
- const size_t total_len = len + sizeof(SerdNode) + lang_len;
- node = serd_node_malloc(total_len, flags, SERD_LITERAL);
- memcpy(serd_node_buffer(node), str, n_bytes);
- node->n_bytes = n_bytes;
-
- SerdNode* lang_node = node + 1 + (len / serd_node_align);
- lang_node->type = SERD_LITERAL;
- lang_node->n_bytes = lang_len;
- memcpy(serd_node_buffer(lang_node), lang, lang_len);
- serd_node_check_padding(lang_node);
- } else if (datatype) {
- flags |= SERD_HAS_DATATYPE;
- const size_t datatype_len = strlen(serd_node_buffer_c(datatype));
- const size_t total_len = len + sizeof(SerdNode) + datatype_len;
- node = serd_node_malloc(total_len, flags, SERD_LITERAL);
- memcpy(serd_node_buffer(node), str, n_bytes);
- node->n_bytes = n_bytes;
-
- SerdNode* datatype_node = node + 1 + (len / serd_node_align);
- memcpy(datatype_node, datatype, sizeof(SerdNode) + datatype_len);
- serd_node_check_padding(datatype_node);
+ return serd_new_plain_literal_i(str, str_len, flags, lang, lang_len);
+ } else if (datatype_uri) {
+ return serd_new_typed_literal_i(
+ str, str_len, flags, datatype_uri, datatype_uri_len);
} else {
- node = serd_node_malloc(n_bytes, flags, SERD_LITERAL);
- memcpy(serd_node_buffer(node), str, n_bytes);
- node->n_bytes = n_bytes;
+ return serd_new_substring(str, str_len);
}
+}
- serd_node_check_padding(node);
- return node;
+SerdNode*
+serd_new_plain_literal(const char* str, const char* lang)
+{
+ if (!str) {
+ return NULL;
+ } else if (!lang) {
+ return serd_new_string(str);
+ }
+
+ SerdNodeFlags flags = 0;
+ const size_t str_len = serd_strlen(str, &flags);
+ const size_t lang_len = strlen(lang);
+
+ return serd_new_plain_literal_i(str, str_len, flags, lang, lang_len);
+}
+
+SerdNode*
+serd_new_typed_literal(const char* str, const SerdNode* datatype)
+{
+ if (!str) {
+ return NULL;
+ } else if (!datatype) {
+ return serd_new_string(str);
+ } else if (!strcmp(serd_node_buffer_c(datatype), NS_RDF "langString") ||
+ serd_node_type(datatype) != SERD_URI) {
+ return NULL;
+ }
+
+ SerdNodeFlags flags = 0;
+ const size_t str_len = serd_strlen(str, &flags);
+
+ return serd_new_typed_literal_i(str,
+ str_len,
+ flags,
+ serd_node_string(datatype),
+ serd_node_length(datatype));
}
SerdNode*
-serd_node_new_blank(const char* str)
+serd_new_blank(const char* str)
{
- return str ? serd_node_new_simple_node(SERD_BLANK, str, strlen(str)) : NULL;
+ return str ? serd_new_simple_node(SERD_BLANK, str, strlen(str)) : NULL;
}
SerdNode*
-serd_node_new_curie(const char* str)
+serd_new_curie(const char* str)
{
- return str ? serd_node_new_simple_node(SERD_CURIE, str, strlen(str)) : NULL;
+ return str ? serd_new_simple_node(SERD_CURIE, str, strlen(str)) : NULL;
}
SerdNode*
-serd_node_new_uri(const char* str)
+serd_new_uri(const char* str)
{
- return str ? serd_node_new_simple_node(SERD_URI, str, strlen(str)) : NULL;
+ return str ? serd_new_simple_node(SERD_URI, str, strlen(str)) : NULL;
}
/**
@@ -323,7 +396,7 @@ string_sink(const void* buf, size_t size, size_t nmemb, void* stream)
}
SerdNode*
-serd_node_new_resolved_uri(const char* str, const SerdNode* base)
+serd_new_resolved_uri(const char* str, const SerdNode* base)
{
if (!base || base->type != SERD_URI) {
return NULL;
@@ -331,7 +404,7 @@ serd_node_new_resolved_uri(const char* str, const SerdNode* base)
SerdURI base_uri;
serd_uri_parse(serd_node_string(base), &base_uri);
- return serd_node_new_resolved_uri_i(str, &base_uri);
+ return serd_new_resolved_uri_i(str, &base_uri);
}
SerdNode*
@@ -346,20 +419,20 @@ serd_node_resolve(const SerdNode* node, const SerdNode* base)
serd_uri_parse(serd_node_string(node), &uri);
serd_uri_parse(serd_node_string(base), &base_uri);
- return serd_node_new_from_uri(&uri, &base_uri);
+ return serd_new_from_uri(&uri, &base_uri);
}
SerdNode*
-serd_node_new_resolved_uri_i(const char* str, const SerdURI* base)
+serd_new_resolved_uri_i(const char* str, const SerdURI* base)
{
if (!str || str[0] == '\0') {
// Empty URI => Base URI, or nothing if no base is given
- return base ? serd_node_new_from_uri(base, NULL) : NULL;
+ return base ? serd_new_from_uri(base, NULL) : NULL;
}
SerdURI uri;
serd_uri_parse(str, &uri);
- return serd_node_new_from_uri(&uri, base);
+ return serd_new_from_uri(&uri, base);
}
static inline bool
@@ -382,7 +455,7 @@ is_uri_path_char(const char c)
}
SerdNode*
-serd_node_new_file_uri(const char* path, const char* hostname, bool escape)
+serd_new_file_uri(const char* path, const char* hostname, bool escape)
{
const size_t path_len = strlen(path);
const size_t hostname_len = hostname ? strlen(hostname) : 0;
@@ -416,14 +489,14 @@ serd_node_new_file_uri(const char* path, const char* hostname, bool escape)
}
serd_buffer_sink_finish(&buffer);
- SerdNode* node = serd_node_new_uri((const char*)buffer.buf);
+ SerdNode* node = serd_new_uri((const char*)buffer.buf);
free(buffer.buf);
serd_node_check_padding(node);
return node;
}
static SerdNode*
-serd_node_new_from_uri(const SerdURI* uri, const SerdURI* base)
+serd_new_from_uri(const SerdURI* uri, const SerdURI* base)
{
SerdURI abs_uri = *uri;
if (base) {
@@ -443,9 +516,9 @@ serd_node_new_from_uri(const SerdURI* uri, const SerdURI* base)
}
SerdNode*
-serd_node_new_relative_uri(const char* str,
- const SerdNode* base,
- const SerdNode* root)
+serd_new_relative_uri(const char* str,
+ const SerdNode* base,
+ const SerdNode* root)
{
SerdURI uri = SERD_URI_NULL;
SerdURI base_uri = SERD_URI_NULL;
@@ -481,7 +554,7 @@ serd_digits(double abs)
}
SerdNode*
-serd_node_new_decimal(double d, unsigned frac_digits, const SerdNode* datatype)
+serd_new_decimal(double d, unsigned frac_digits, const SerdNode* datatype)
{
if (isnan(d) || isinf(d)) {
return NULL;
@@ -544,7 +617,7 @@ serd_node_new_decimal(double d, unsigned frac_digits, const SerdNode* datatype)
}
SerdNode*
-serd_node_new_integer(int64_t i, const SerdNode* datatype)
+serd_new_integer(int64_t i, const SerdNode* datatype)
{
const SerdNode* type = datatype ? datatype : &serd_xsd_integer.node;
uint64_t abs_i = (uint64_t)((i < 0) ? -i : i);
@@ -576,10 +649,10 @@ serd_node_new_integer(int64_t i, const SerdNode* datatype)
}
SerdNode*
-serd_node_new_blob(const void* buf,
- size_t size,
- bool wrap_lines,
- const SerdNode* datatype)
+serd_new_blob(const void* buf,
+ size_t size,
+ bool wrap_lines,
+ const SerdNode* datatype)
{
if (!buf || !size) {
return NULL;
diff --git a/src/node.h b/src/node.h
index 2a37217c..8b662a3c 100644
--- a/src/node.h
+++ b/src/node.h
@@ -42,6 +42,6 @@ serd_node_buffer_c(const SerdNode* node)
SerdNode* serd_node_malloc(size_t n_bytes, SerdNodeFlags flags, SerdType type);
void serd_node_set(SerdNode** dst, const SerdNode* src);
void serd_node_zero_pad(SerdNode* node);
-SerdNode* serd_node_new_resolved_uri_i(const char* str, const SerdURI* base);
+SerdNode* serd_new_resolved_uri_i(const char* str, const SerdURI* base);
#endif // SERD_NODE_H
diff --git a/src/serdi.c b/src/serdi.c
index 71c4e683..5e64e709 100644
--- a/src/serdi.c
+++ b/src/serdi.c
@@ -196,9 +196,9 @@ main(int argc, char** argv)
SerdNode* base = NULL;
if (a < argc) { // Base URI given on command line
- base = serd_node_new_uri((const char*)argv[a]);
+ base = serd_new_uri(argv[a]);
} else if (!from_string && !from_stdin) { // Use input file URI
- base = serd_node_new_file_uri(input, NULL, true);
+ base = serd_new_file_uri(input, NULL, true);
}
FILE* out_fd = stdout;
@@ -240,7 +240,7 @@ main(int argc, char** argv)
serd_world_set_error_sink(world, quiet_error_sink, NULL);
}
- SerdNode* root = serd_node_new_uri(root_uri);
+ SerdNode* root = serd_new_uri(root_uri);
serd_writer_set_root_uri(writer, root);
serd_writer_chop_blank_prefix(writer, chop_prefix);
serd_reader_add_blank_prefix(reader, add_prefix);
diff --git a/src/world.c b/src/world.c
index ebafcfef..a99bff8a 100644
--- a/src/world.c
+++ b/src/world.c
@@ -81,7 +81,7 @@ serd_world_new(void)
{
SerdWorld* world = (SerdWorld*)calloc(1, sizeof(SerdWorld));
- world->blank_node = serd_node_new_blank("b0000000000");
+ world->blank_node = serd_new_blank("b0000000000");
return world;
}
diff --git a/tests/env_test.c b/tests/env_test.c
index 607b8763..07e3700e 100644
--- a/tests/env_test.c
+++ b/tests/env_test.c
@@ -36,11 +36,11 @@ test_env(void)
{
SerdWorld* world = serd_world_new();
- SerdNode* hello = serd_node_new_string("hello\"");
- SerdNode* u = serd_node_new_uri("http://example.org/foo");
- SerdNode* b = serd_node_new_curie("invalid");
- SerdNode* c = serd_node_new_curie("eg.2:b");
- SerdNode* s = serd_node_new_string("hello");
+ SerdNode* hello = serd_new_string("hello\"");
+ SerdNode* u = serd_new_uri("http://example.org/foo");
+ SerdNode* b = serd_new_curie("invalid");
+ SerdNode* c = serd_new_curie("eg.2:b");
+ SerdNode* s = serd_new_string("hello");
SerdEnv* env = serd_env_new(NULL);
serd_env_set_prefix_from_strings(env, "eg.2", "http://example.org/");
@@ -65,7 +65,7 @@ test_env(void)
assert(!strcmp(serd_node_string(xu), "http://example.org/foo"));
serd_node_free(xu);
- SerdNode* badpre = serd_node_new_curie("hm:what");
+ SerdNode* badpre = serd_new_curie("hm:what");
SerdNode* xbadpre = serd_env_expand_node(env, badpre);
assert(!xbadpre);
@@ -75,10 +75,10 @@ test_env(void)
assert(serd_env_set_prefix(env, NULL, NULL));
- SerdNode* lit = serd_node_new_string("hello");
+ SerdNode* lit = serd_new_string("hello");
assert(serd_env_set_prefix(env, b, lit));
- SerdNode* blank = serd_node_new_blank("b1");
+ SerdNode* blank = serd_new_blank("b1");
assert(!serd_env_expand_node(env, blank));
serd_node_free(blank);
@@ -87,7 +87,7 @@ test_env(void)
serd_env_foreach(env, count_prefixes, &n_prefixes);
assert(n_prefixes == 1);
- SerdNode* shorter_uri = serd_node_new_uri("urn:foo");
+ SerdNode* shorter_uri = serd_new_uri("urn:foo");
const SerdNode* prefix_name = NULL;
assert(!serd_env_qualify(env, shorter_uri, &prefix_name, &suffix));
serd_node_free(shorter_uri);
diff --git a/tests/serd_test.c b/tests/serd_test.c
index 2f0a3b07..2a8f7edf 100644
--- a/tests/serd_test.c
+++ b/tests/serd_test.c
@@ -107,7 +107,7 @@ test_file_uri(const char* hostname,
expected_path = path;
}
- SerdNode* node = serd_node_new_file_uri(path, hostname, escape);
+ SerdNode* node = serd_new_file_uri(path, hostname, escape);
const char* node_str = serd_node_string(node);
char* out_hostname = NULL;
char* out_path = serd_file_uri_parse(node_str, &out_hostname);
@@ -267,7 +267,7 @@ test_double_to_node(void)
};
for (size_t i = 0; i < sizeof(dbl_test_nums) / sizeof(double); ++i) {
- SerdNode* node = serd_node_new_decimal(dbl_test_nums[i], 8, NULL);
+ SerdNode* node = serd_new_decimal(dbl_test_nums[i], 8, NULL);
const char* node_str = serd_node_string(node);
const bool pass = (node_str && dbl_test_strs[i])
? !strcmp(node_str, dbl_test_strs[i])
@@ -294,7 +294,7 @@ test_integer_to_node(void)
};
for (size_t i = 0; i < sizeof(int_test_nums) / sizeof(double); ++i) {
- SerdNode* node = serd_node_new_integer(int_test_nums[i], NULL);
+ SerdNode* node = serd_new_integer(int_test_nums[i], NULL);
const char* node_str = serd_node_string(node);
assert(!strcmp(node_str, int_test_strs[i]));
const size_t len = strlen(node_str);
@@ -308,8 +308,8 @@ test_integer_to_node(void)
static void
test_blob_to_node(void)
{
- assert(!serd_node_new_blob(NULL, 0, true, NULL));
- assert(!serd_node_new_blob("data", 0, true, NULL));
+ assert(!serd_new_blob(NULL, 0, true, NULL));
+ assert(!serd_new_blob("data", 0, true, NULL));
for (size_t size = 1; size < 256; ++size) {
uint8_t* data = size > 0 ? (uint8_t*)malloc(size) : NULL;
@@ -318,7 +318,7 @@ test_blob_to_node(void)
}
size_t out_size = 0;
- SerdNode* blob = serd_node_new_blob(data, size, size % 5, NULL);
+ SerdNode* blob = serd_new_blob(data, size, size % 5, NULL);
const char* blob_str = serd_node_string(blob);
uint8_t* out = (uint8_t*)serd_base64_decode(
blob_str, serd_node_length(blob), &out_size);
@@ -391,11 +391,11 @@ static void
test_node_equals(void)
{
const uint8_t replacement_char_str[] = { 0xEF, 0xBF, 0xBD, 0 };
- SerdNode* lhs = serd_node_new_string((const char*)replacement_char_str);
- SerdNode* rhs = serd_node_new_string("123");
+ SerdNode* lhs = serd_new_string((const char*)replacement_char_str);
+ SerdNode* rhs = serd_new_string("123");
assert(!serd_node_equals(lhs, rhs));
- SerdNode* qnode = serd_node_new_curie("foo:bar");
+ SerdNode* qnode = serd_new_curie("foo:bar");
assert(!serd_node_equals(lhs, qnode));
serd_node_free(qnode);
@@ -408,9 +408,9 @@ test_node_equals(void)
static void
test_node_from_string(void)
{
- assert(!serd_node_new_string(NULL));
+ assert(!serd_new_string(NULL));
- SerdNode* hello = serd_node_new_string("hello\"");
+ SerdNode* hello = serd_new_string("hello\"");
assert(serd_node_length(hello) == 6);
assert(serd_node_flags(hello) == SERD_HAS_QUOTE);
assert(!strncmp(serd_node_string(hello), "hello\"", 6));
@@ -420,16 +420,16 @@ test_node_from_string(void)
static void
test_node_from_substring(void)
{
- assert(!serd_node_new_substring(NULL, 32));
+ assert(!serd_new_substring(NULL, 32));
- SerdNode* a_b = serd_node_new_substring("a\"bc", 3);
+ SerdNode* a_b = serd_new_substring("a\"bc", 3);
assert(serd_node_length(a_b) == 3);
assert(serd_node_flags(a_b) == SERD_HAS_QUOTE);
assert(strlen(serd_node_string(a_b)) == 3);
assert(!strncmp(serd_node_string(a_b), "a\"b", 3));
serd_node_free(a_b);
- a_b = serd_node_new_substring("a\"bc", 10);
+ a_b = serd_new_substring("a\"bc", 10);
assert(serd_node_length(a_b) == 4);
assert(serd_node_flags(a_b) == SERD_HAS_QUOTE);
assert(strlen(serd_node_string(a_b)) == 4);
@@ -440,52 +440,68 @@ test_node_from_substring(void)
static void
test_simple_node(void)
{
- assert(!serd_node_new_simple_node(SERD_LITERAL, "Literal", 7));
- assert(!serd_node_new_simple_node(SERD_URI, NULL, 0));
+ assert(!serd_new_simple_node(SERD_LITERAL, "Literal", 7));
+ assert(!serd_new_simple_node(SERD_URI, NULL, 0));
}
static void
test_literal(void)
{
- assert(!serd_node_new_literal(NULL, NULL, NULL));
+ assert(!serd_new_literal(NULL, 0, NULL, 0, NULL, 0));
+ assert(!serd_new_plain_literal(NULL, NULL));
+ assert(!serd_new_typed_literal(NULL, NULL));
+
+ SerdNode* hello2 = serd_new_string("hello\"");
+ assert(!serd_new_typed_literal("bad type", hello2));
- SerdNode* hello2 = serd_node_new_literal("hello\"", NULL, NULL);
assert(serd_node_length(hello2) == 6 &&
serd_node_flags(hello2) == SERD_HAS_QUOTE &&
!strcmp(serd_node_string(hello2), "hello\""));
+
+ SerdNode* hello3 = serd_new_plain_literal("hello\"", NULL);
+ assert(serd_node_equals(hello2, hello3));
+
+ SerdNode* hello4 = serd_new_typed_literal("hello\"", NULL);
+ assert(serd_node_equals(hello4, hello2));
+
+ serd_node_free(hello4);
+ serd_node_free(hello3);
serd_node_free(hello2);
- SerdNode* hello_l = serd_node_new_literal("hello_l\"", NULL, "en");
- assert(serd_node_length(hello_l) == 8);
- assert(!strcmp(serd_node_string(hello_l), "hello_l\""));
- assert(serd_node_flags(hello_l) ==
- (SERD_HAS_QUOTE | SERD_HAS_LANGUAGE));
- assert(!strcmp(serd_node_string(serd_node_language(hello_l)),
- "en"));
- serd_node_free(hello_l);
-
- SerdNode* eg_Thing = serd_node_new_uri("http://example.org/Thing");
- SerdNode* hello_dt = serd_node_new_literal("hello_dt\"", eg_Thing, NULL);
- assert(serd_node_length(hello_dt) == 9);
- assert(!strcmp(serd_node_string(hello_dt), "hello_dt\""));
- assert(serd_node_flags(hello_dt) == (SERD_HAS_QUOTE | SERD_HAS_DATATYPE));
- assert(!strcmp(serd_node_string(serd_node_datatype(hello_dt)),
- "http://example.org/Thing"));
- serd_node_free(hello_dt);
- serd_node_free(eg_Thing);
+ const char* lang_lit_str = "\"Hello\"@en";
+ SerdNode* sliced_lang_lit =
+ serd_new_literal(lang_lit_str + 1, 5, NULL, 0, lang_lit_str + 8, 2);
+ assert(!strcmp(serd_node_string(sliced_lang_lit), "Hello"));
+ assert(!strcmp(
+ serd_node_string(serd_node_language(sliced_lang_lit)),
+ "en"));
+ serd_node_free(sliced_lang_lit);
+
+ const char* type_lit_str = "\"Hallo\"^^<http://example.org/Greeting>";
+ SerdNode* sliced_type_lit =
+ serd_new_literal(type_lit_str + 1, 5, type_lit_str + 10, 27, NULL, 0);
+ assert(!strcmp(serd_node_string(sliced_type_lit), "Hallo"));
+ assert(!strcmp(
+ serd_node_string(serd_node_datatype(sliced_type_lit)),
+ "http://example.org/Greeting"));
+ serd_node_free(sliced_type_lit);
+
+ SerdNode* plain_lit = serd_new_literal("Plain", 5, NULL, 0, NULL, 0);
+ assert(!strcmp(serd_node_string(plain_lit), "Plain"));
+ serd_node_free(plain_lit);
}
static void
test_uri_from_string(void)
{
- assert(!serd_node_new_uri(NULL));
-
- SerdNode* base = serd_node_new_uri("http://example.org/a/b/c/");
- SerdNode* not_a_uri = serd_node_new_string("hello");
- SerdNode* nil = serd_node_new_resolved_uri(NULL, base);
- SerdNode* nil2 = serd_node_new_resolved_uri("", base);
- assert(!serd_node_new_resolved_uri("", NULL));
- assert(!serd_node_new_resolved_uri("", not_a_uri));
+ assert(!serd_new_uri(NULL));
+
+ SerdNode* base = serd_new_uri("http://example.org/a/b/c/");
+ SerdNode* not_a_uri = serd_new_string("hello");
+ SerdNode* nil = serd_new_resolved_uri(NULL, base);
+ SerdNode* nil2 = serd_new_resolved_uri("", base);
+ assert(!serd_new_resolved_uri("", NULL));
+ assert(!serd_new_resolved_uri("", not_a_uri));
assert(serd_node_type(nil) == SERD_URI);
assert(!strcmp(serd_node_string(nil), serd_node_string(base)));
assert(serd_node_type(nil2) == SERD_URI);
@@ -502,7 +518,7 @@ check_rel_uri(const char* uri,
const SerdNode* root,
const char* expected)
{
- SerdNode* rel = serd_node_new_relative_uri(uri, base, root);
+ SerdNode* rel = serd_new_relative_uri(uri, base, root);
const int ret = strcmp(serd_node_string(rel), expected);
serd_node_free(rel);
assert(!ret);
@@ -511,8 +527,8 @@ check_rel_uri(const char* uri,
static void
test_relative_uri(void)
{
- SerdNode* root = serd_node_new_uri("http://example.org/a/b/");
- SerdNode* base = serd_node_new_uri("http://example.org/a/b/c/");
+ SerdNode* root = serd_new_uri("http://example.org/a/b/");
+ SerdNode* base = serd_new_uri("http://example.org/a/b/c/");
check_rel_uri("http://example.org/a/b/c/foo", base, NULL, "foo");
check_rel_uri("http://example.org/a/", base, NULL, "../../");
@@ -527,18 +543,18 @@ test_relative_uri(void)
static void
test_uri_resolution(void)
{
- SerdNode* base = serd_node_new_uri("http://example.org/a/b/c/");
- SerdNode* nil = serd_node_new_resolved_uri(NULL, base);
- SerdNode* nil2 = serd_node_new_resolved_uri("", base);
- SerdNode* not_a_uri = serd_node_new_string("hello");
- SerdNode* root = serd_node_new_uri("http://example.org/a/b/");
+ SerdNode* base = serd_new_uri("http://example.org/a/b/c/");
+ SerdNode* nil = serd_new_resolved_uri(NULL, base);
+ SerdNode* nil2 = serd_new_resolved_uri("", base);
+ SerdNode* not_a_uri = serd_new_string("hello");
+ SerdNode* root = serd_new_uri("http://example.org/a/b/");
assert(!serd_node_resolve(NULL, base));
assert(!serd_node_resolve(nil, NULL));
assert(!serd_node_resolve(not_a_uri, base));
assert(!serd_node_resolve(nil, not_a_uri));
- SerdNode* rel = serd_node_new_relative_uri(
+ SerdNode* rel = serd_new_relative_uri(
"http://example.org/a/b/c/foo", base, NULL);
SerdNode* resolved = serd_node_resolve(rel, base);
assert(!strcmp(serd_node_string(resolved),
@@ -556,9 +572,9 @@ test_uri_resolution(void)
static void
test_blank(void)
{
- assert(!serd_node_new_blank(NULL));
+ assert(!serd_new_blank(NULL));
- SerdNode* blank = serd_node_new_blank("b0");
+ SerdNode* blank = serd_new_blank("b0");
assert(serd_node_length(blank) == 2);
assert(serd_node_flags(blank) == 0);
assert(!strcmp(serd_node_string(blank), "b0"));
@@ -585,7 +601,7 @@ test_writer(const char* const path)
serd_writer_chop_blank_prefix(writer, "tmp");
serd_writer_chop_blank_prefix(writer, NULL);
- SerdNode* lit = serd_node_new_string("hello");
+ SerdNode* lit = serd_new_string("hello");
const SerdSink* iface = serd_writer_get_sink(writer);
assert(iface->base(iface->handle, lit));
@@ -594,9 +610,9 @@ test_writer(const char* const path)
assert(serd_writer_env(writer) == env);
uint8_t buf[] = { 0xEF, 0xBF, 0xBD, 0 };
- SerdNode* s = serd_node_new_uri("");
- SerdNode* p = serd_node_new_uri("http://example.org/pred");
- SerdNode* o = serd_node_new_string((char*)buf);
+ SerdNode* s = serd_new_uri("");
+ SerdNode* p = serd_new_uri("http://example.org/pred");
+ SerdNode* o = serd_new_string((char*)buf);
// Write 3 invalid statements (should write nothing)
const SerdNode* junk[][5] = { { s, p, NULL },
@@ -614,10 +630,10 @@ test_writer(const char* const path)
iface, 0, junk[i][0], junk[i][1], junk[i][2], 0));
}
- SerdNode* urn_Type = serd_node_new_uri("urn:Type");
+ SerdNode* urn_Type = serd_new_uri("urn:Type");
- SerdNode* t = serd_node_new_literal((char*)buf, urn_Type, NULL);
- SerdNode* l = serd_node_new_literal((char*)buf, NULL, "en");
+ SerdNode* t = serd_new_typed_literal((char*)buf, urn_Type);
+ SerdNode* l = serd_new_plain_literal((char*)buf, "en");
const SerdNode* good[][5] = { { s, p, o },
{ s, p, o },
{ s, p, t },
@@ -635,8 +651,8 @@ test_writer(const char* const path)
// Write statements with bad UTF-8 (should be replaced)
const char bad_str[] = { (char)0xFF, (char)0x90, 'h', 'i', 0 };
- SerdNode* bad_lit = serd_node_new_string(bad_str);
- SerdNode* bad_uri = serd_node_new_uri(bad_str);
+ SerdNode* bad_lit = serd_new_string(bad_str);
+ SerdNode* bad_uri = serd_new_uri(bad_str);
assert(!serd_sink_write(iface, 0, s, p, bad_lit, 0));
assert(!serd_sink_write(iface, 0, s, p, bad_uri, 0));
serd_node_free(bad_uri);
@@ -644,7 +660,7 @@ test_writer(const char* const path)
// Write 1 valid statement
serd_node_free(o);
- o = serd_node_new_string("hello");
+ o = serd_new_string("hello");
assert(!serd_sink_write(iface, 0, s, p, o, 0));
serd_writer_free(writer);
@@ -659,7 +675,7 @@ test_writer(const char* const path)
writer = serd_writer_new(
world, SERD_TURTLE, (SerdStyle)0, env, serd_buffer_sink, &buffer);
- o = serd_node_new_uri("http://example.org/base");
+ o = serd_new_uri("http://example.org/base");
assert(!serd_writer_set_base_uri(writer, o));
serd_node_free(o);
@@ -683,7 +699,7 @@ test_reader(const char* path)
SerdReader* reader = serd_reader_new(world, SERD_TURTLE, &sink, 4096);
assert(reader);
- SerdNode* g = serd_node_new_uri("http://example.org/");
+ SerdNode* g = serd_new_uri("http://example.org/");
serd_reader_set_default_graph(reader, g);
serd_reader_add_blank_prefix(reader, "tmp");
serd_reader_add_blank_prefix(reader, NULL);