star-meteo

Time varying meteorological data
git clone git://git.meso-star.fr/star-meteo.git
Log | Files | Refs | README | LICENSE

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:
Msrc/smeteo.c | 14++++++++++++++
Msrc/smeteo.h | 38+++++++++++++++++++++++++++++++++-----
Msrc/smeteo_c.h | 16+---------------
Msrc/smeteo_load.c | 4++--
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; }