commit 4d48e70bd2ce64ac6108cc32d44bd3f4a1ed0e26
parent e12efe45ddbafa16f099c3a7492ec7623897ebef
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Wed, 14 May 2025 17:14:17 +0200
Add an accessor to the loaded data
The "entry" data structure becomes public: the getter function returns a
list of this data.
Diffstat:
4 files changed, 50 insertions(+), 22 deletions(-)
diff --git a/src/smeteo.c b/src/smeteo.c
@@ -84,3 +84,17 @@ smeteo_ref_put(struct smeteo* smeteo)
{
return smeteo ? ref_put(&smeteo->ref, release_smeteo), RES_OK : RES_BAD_ARG;
}
+
+res_T
+smeteo_get_desc(const struct smeteo* smeteo, struct smeteo_desc* desc)
+{
+ if(!smeteo || !desc) return RES_BAD_ARG;
+
+ *desc = SMETEO_DESC_NULL;
+
+ desc->nentries = darray_entry_size_get(&smeteo->entries);
+ if(str_len(&smeteo->filename)) desc->filename = str_cget(&smeteo->filename);
+ if(desc->nentries) desc->entries = darray_entry_cdata_get(&smeteo->entries);
+
+ return RES_OK;
+}
diff --git a/src/smeteo.h b/src/smeteo.h
@@ -17,6 +17,7 @@
#define SMETEO_H
#include <rsys/rsys.h>
+#include <time.h>
/* Library symbol management */
#if defined(SMETEO_SHARED_BUILD)
@@ -33,12 +34,27 @@
#define SMETEO(Func) smeteo_ ## Func
#endif
-/* Forward declaration of external data types */
-struct logger;
-struct mem_allocator;
+struct smeteo_entry {
+ struct tm time;
+ double Tsrf; /* Surface temperature [K] */
+ double Tatm; /* Atmosphere temperature [K] */
+ double SWdn; /* Shortwave downward flux [W/m^2] */
+ double SWup; /* Shortwave downward flux [W/m^2] */
+ double Trad; /* Radiative temperature [K] */
+ double H; /* Convection coefficient [W/K/m^2] */
+ double LE; /* ??? */
+ double day_1850; /* ??? */
+};
+#define SMETEO_ENTRY_NULL__ {{0},0,0,0,0,0,0,0,0}
+static const struct smeteo_entry SMETEO_ENTRY_NULL = SMETEO_ENTRY_NULL__;
-/* Forwar declaration of opaque data types */
-struct smeteo;
+struct smeteo_desc {
+ const char* filename;
+ const struct smeteo_entry* entries;
+ size_t nentries;
+};
+#define SMETEO_DESC_NULL__ {NULL, NULL, 0}
+static const struct smeteo_desc SMETEO_DESC_NULL = SMETEO_DESC_NULL__;
struct smeteo_create_args {
struct logger* logger; /* May be NULL <=> default logger */
@@ -49,6 +65,13 @@ struct smeteo_create_args {
static const struct smeteo_create_args SMETEO_CREATE_ARGS_DEFAULT =
SMETEO_CREATE_ARGS_DEFAULT__;
+/* Forward declaration of external data types */
+struct logger;
+struct mem_allocator;
+
+/* Forwar declaration of opaque data types */
+struct smeteo;
+
BEGIN_DECLS
SMETEO_API res_T
@@ -75,6 +98,11 @@ smeteo_load_stream
FILE* fp,
const char* name);
+SMETEO_API res_T
+smeteo_get_desc
+ (const struct smeteo* smeteo,
+ struct smeteo_desc* desc);
+
END_DECLS
#endif /* SMETEO_H */
diff --git a/src/smeteo_c.h b/src/smeteo_c.h
@@ -32,23 +32,9 @@
#define WARN(Dev, ...) LOG__(Dev, 2, LOG_WARNING, "warning: "__VA_ARGS__)
#define INFO(Dev, ...) LOG__(Dev, 3, LOG_OUTPUT, __VA_ARGS__)
-struct entry {
- struct tm time;
- double Tsrf; /* Surface temperature [K] */
- double Tatm; /* Atmosphere temperature [K] */
- double SWdn; /* Shortwave downward flux [W/m^2] */
- double SWup; /* Shortwave downward flux [W/m^2] */
- double Trad; /* Radiative temperature [K] */
- double H; /* Convection coefficient [W/K/m^2] */
- double LE; /* ??? */
- double day_1850; /* ??? */
-};
-#define ENTRY_NULL__ {0}
-static const struct entry ENTRY_NULL = ENTRY_NULL__;
-
/* Generate the darray_entry data type and its API */
#define DARRAY_NAME entry
-#define DARRAY_DATA struct entry
+#define DARRAY_DATA struct smeteo_entry
#include <rsys/dynamic_array.h>
struct smeteo {
diff --git a/src/smeteo_load.c b/src/smeteo_load.c
@@ -120,7 +120,7 @@ error:
static res_T
parse_line(struct smeteo* smeteo, struct txtrdr* txtrdr)
{
- struct entry entry = ENTRY_NULL;
+ struct smeteo_entry entry = SMETEO_ENTRY_NULL;
char* line = NULL;
char* date = NULL;
@@ -211,7 +211,7 @@ smeteo_load(struct smeteo* smeteo, const char* filename)
if(!smeteo || !filename) { res = RES_BAD_ARG; goto error; }
if(!(fp = fopen(filename, "r"))) {
- ERROR(smeteo, "Error opening file %s -- %s\n", filename, strerror(errno));
+ ERROR(smeteo, "Error opening file '%s' -- %s\n", filename, strerror(errno));
res = RES_IO_ERR;
goto error;
}