aboutsummaryrefslogtreecommitdiffstats
path: root/include/serd
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2022-12-18 21:06:25 -0500
committerDavid Robillard <d@drobilla.net>2023-12-02 18:49:07 -0500
commit9c613b337712314c169d4add61212f4fc4102022 (patch)
treefe9191bed8d6aaf6339c82fe447def74e22ef11b /include/serd
parenta970f06aba98736223214a6fa995f4e82acd7132 (diff)
downloadserd-9c613b337712314c169d4add61212f4fc4102022.tar.gz
serd-9c613b337712314c169d4add61212f4fc4102022.tar.bz2
serd-9c613b337712314c169d4add61212f4fc4102022.zip
Clean up numeric node construction and access API
Diffstat (limited to 'include/serd')
-rw-r--r--include/serd/node.h69
-rw-r--r--include/serd/string.h11
2 files changed, 69 insertions, 11 deletions
diff --git a/include/serd/node.h b/include/serd/node.h
index 79c9ffe1..427bbdd1 100644
--- a/include/serd/node.h
+++ b/include/serd/node.h
@@ -189,6 +189,34 @@ SERD_API SerdNode* SERD_ALLOCATED
serd_new_decimal(double d, const SerdNode* SERD_NULLABLE datatype);
/**
+ Create a new canonical xsd:double literal.
+
+ The node will be in scientific notation, like "1.23E4", except for NaN and
+ negative/positive infinity, which are "NaN", "-INF", and "INF",
+ respectively.
+
+ Uses the shortest possible representation that precisely describes the
+ value, which has at most 17 significant digits (under 24 characters total).
+
+ @param d Double value to write.
+ @return A literal node with datatype xsd:double.
+*/
+SERD_API SerdNode* SERD_ALLOCATED
+serd_new_double(double d);
+
+/**
+ Create a new canonical xsd:float literal.
+
+ Uses identical formatting to serd_new_double(), except with at most 9
+ significant digits (under 14 characters total).
+
+ @param f Float value of literal.
+ @return A literal node with datatype xsd:float.
+*/
+SERD_API SerdNode* SERD_ALLOCATED
+serd_new_float(float f);
+
+/**
Create a new canonical xsd:integer literal.
The node will be an xsd:integer literal like "1234", with datatype
@@ -291,6 +319,47 @@ SERD_PURE_API const SerdNode* SERD_NULLABLE
serd_node_language(const SerdNode* SERD_NONNULL node);
/**
+ Return the value of `node` as a boolean.
+
+ This will work for booleans, and numbers of any datatype if they are 0 or
+ 1.
+
+ @return The value of `node` as a `bool`, or `false` on error.
+*/
+SERD_API bool
+serd_get_boolean(const SerdNode* SERD_NONNULL node);
+
+/**
+ Return the value of `node` as a double.
+
+ This will coerce numbers of any datatype to double, if the value fits.
+
+ @return The value of `node` as a `double`, or NaN on error.
+*/
+SERD_API double
+serd_get_double(const SerdNode* SERD_NONNULL node);
+
+/**
+ Return the value of `node` as a float.
+
+ This will coerce numbers of any datatype to float, if the value fits.
+
+ @return The value of `node` as a `float`, or NaN on error.
+*/
+SERD_API float
+serd_get_float(const SerdNode* SERD_NONNULL node);
+
+/**
+ Return the value of `node` as a long (signed 64-bit integer).
+
+ This will coerce numbers of any datatype to long, if the value fits.
+
+ @return The value of `node` as a `int64_t`, or 0 on error.
+*/
+SERD_API int64_t
+serd_get_integer(const SerdNode* SERD_NONNULL node);
+
+/**
@}
@defgroup serd_node_operators Operators
@{
diff --git a/include/serd/string.h b/include/serd/string.h
index b5ba7154..f0b8e591 100644
--- a/include/serd/string.h
+++ b/include/serd/string.h
@@ -28,17 +28,6 @@ SERD_API size_t
serd_strlen(const char* SERD_NONNULL str, SerdNodeFlags* SERD_NULLABLE flags);
/**
- Parse a string to a double.
-
- The API of this function is identical to the standard C strtod function,
- except this function is locale-independent and always matches the lexical
- format used in the Turtle grammar (the decimal point is always ".").
-*/
-SERD_API double
-serd_strtod(const char* SERD_NONNULL str,
- const char* SERD_NONNULL* SERD_NULLABLE endptr);
-
-/**
Decode a base64 string.
This function can be used to decode a node created with serd_new_base64().