aboutsummaryrefslogtreecommitdiffstats
path: root/include/serd/serd.h
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2018-04-29 18:29:03 +0200
committerDavid Robillard <d@drobilla.net>2022-01-13 22:59:49 -0500
commitdb3799cd77f8f4e6525ea31c4d5f9400f47aa228 (patch)
treecd5e3d85c9f5a0483bf26847f39a54a5e39cfa5f /include/serd/serd.h
parentbfece96cead96fdcdb11567f1cf031edc3f53a8b (diff)
downloadserd-db3799cd77f8f4e6525ea31c4d5f9400f47aa228.tar.gz
serd-db3799cd77f8f4e6525ea31c4d5f9400f47aa228.tar.bz2
serd-db3799cd77f8f4e6525ea31c4d5f9400f47aa228.zip
Simplify node construction API
Diffstat (limited to 'include/serd/serd.h')
-rw-r--r--include/serd/serd.h78
1 files changed, 38 insertions, 40 deletions
diff --git a/include/serd/serd.h b/include/serd/serd.h
index 03fc0665..cb65ba14 100644
--- a/include/serd/serd.h
+++ b/include/serd/serd.h
@@ -483,37 +483,48 @@ typedef enum {
} SerdNodeType;
/**
- Create a new node from `str`.
+ Create a new "simple" node that is just a string.
+
+ This can be used to create blank, CURIE, or URI nodes from an already
+ measured string or slice of a buffer, which avoids a strlen compared to the
+ friendly constructors. This may not be used for literals since those must
+ be measured to set the SERD_HAS_NEWLINE and SERD_HAS_QUOTE flags.
*/
SERD_API
SerdNode* SERD_ALLOCATED
-serd_new_string(SerdNodeType type, const char* SERD_NULLABLE str);
+serd_new_simple_node(SerdNodeType type, SerdStringView string);
-/**
- Create a new node from a prefix of `str`.
-*/
+/// Create a new plain literal string node from `str`
SERD_API
SerdNode* SERD_ALLOCATED
-serd_new_substring(SerdNodeType type,
- const char* SERD_NULLABLE str,
- size_t len);
+serd_new_string(SerdStringView string);
/**
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.
+ Either `datatype_uri` or `lang` can be given, but not both, unless
+ `datatype_uri` is rdf:langString in which case it is ignored.
*/
SERD_API
SerdNode* SERD_ALLOCATED
-serd_new_literal(const char* SERD_NONNULL str,
- const char* SERD_NULLABLE datatype,
- const char* SERD_NULLABLE lang);
+serd_new_literal(SerdStringView string,
+ SerdStringView datatype_uri,
+ SerdStringView lang);
+
+/// Create a new blank node
+SERD_API
+SerdNode* SERD_ALLOCATED
+serd_new_blank(SerdStringView string);
+
+/// Create a new CURIE node
+SERD_API
+SerdNode* SERD_ALLOCATED
+serd_new_curie(SerdStringView string);
/// Create a new URI node
SERD_API
SerdNode* SERD_ALLOCATED
-serd_new_uri(const char* SERD_NONNULL str);
+serd_new_uri(SerdStringView string);
/// Create a new URI from a URI view
SERD_API
@@ -527,13 +538,10 @@ serd_new_parsed_uri(SerdURIView uri);
percent encoded as necessary.
If `path` is relative, `hostname` is ignored.
- If `out` is not NULL, it will be set to the parsed URI.
*/
SERD_API
SerdNode* SERD_ALLOCATED
-serd_new_file_uri(const char* SERD_NONNULL path,
- const char* SERD_NULLABLE hostname,
- SerdURIView* SERD_NULLABLE out);
+serd_new_file_uri(SerdStringView path, SerdStringView hostname);
/**
Create a new node by serialising `d` into an xsd:decimal string.
@@ -735,7 +743,7 @@ typedef struct SerdEnvImpl SerdEnv;
/// Create a new environment
SERD_API
SerdEnv* SERD_ALLOCATED
-serd_env_new(const SerdNode* SERD_NULLABLE base_uri);
+serd_env_new(SerdStringView base_uri);
/// Free `env`
SERD_API
@@ -743,16 +751,14 @@ void
serd_env_free(SerdEnv* SERD_NULLABLE env);
/// Get the current base URI
-SERD_API
+SERD_PURE_API
const SerdNode* SERD_NULLABLE
-serd_env_base_uri(const SerdEnv* SERD_NONNULL env,
- SerdURIView* SERD_NULLABLE out);
+serd_env_base_uri(const SerdEnv* SERD_NULLABLE env);
/// Set the current base URI
SERD_API
SerdStatus
-serd_env_set_base_uri(SerdEnv* SERD_NONNULL env,
- const SerdNode* SERD_NULLABLE uri);
+serd_env_set_base_uri(SerdEnv* SERD_NONNULL env, SerdStringView uri);
/**
Set a namespace prefix.
@@ -763,16 +769,9 @@ serd_env_set_base_uri(SerdEnv* SERD_NONNULL env,
*/
SERD_API
SerdStatus
-serd_env_set_prefix(SerdEnv* SERD_NONNULL env,
- const SerdNode* SERD_NONNULL name,
- const SerdNode* SERD_NONNULL uri);
-
-/// Set a namespace prefix
-SERD_API
-SerdStatus
-serd_env_set_prefix_from_strings(SerdEnv* SERD_NONNULL env,
- const char* SERD_NONNULL name,
- const char* SERD_NONNULL uri);
+serd_env_set_prefix(SerdEnv* SERD_NONNULL env,
+ SerdStringView name,
+ SerdStringView uri);
/// Qualify `uri` into a CURIE if possible
SERD_API
@@ -997,12 +996,11 @@ typedef uint32_t SerdWriterFlags;
/// Create a new RDF writer
SERD_API
SerdWriter* SERD_ALLOCATED
-serd_writer_new(SerdSyntax syntax,
- SerdWriterFlags flags,
- SerdEnv* SERD_NONNULL env,
- const SerdURIView* SERD_NULLABLE base_uri,
- SerdSink SERD_NONNULL ssink,
- void* SERD_NULLABLE stream);
+serd_writer_new(SerdSyntax syntax,
+ SerdWriterFlags flags,
+ SerdEnv* SERD_NONNULL env,
+ SerdSink SERD_NONNULL ssink,
+ void* SERD_NULLABLE stream);
/// Free `writer`
SERD_API