LexLeo 0.0.0-dev+f8e5087-dirty
Technical documentation
Loading...
Searching...
No Matches
logger.c
Go to the documentation of this file.
1/* SPDX-License-Identifier: GPL-3.0-or-later
2 * Copyright (C) 2026 Sylvain Labopin
3 */
4
12
17
19
21
23{
24 return (logger_env_t) { .mem = mem_ops };
25}
26
28 logger_t **out,
29 const logger_vtbl_t *vtbl,
30 void *backend,
31 const logger_env_t *env )
32{
33 if (
34 !out
35 || !vtbl
36 || !vtbl->log
37 || !vtbl->destroy
38 || !backend
39 || !env
40 || !env->mem )
42
44
45 logger_t *tmp = env->mem->calloc(1, sizeof(*tmp));
46 if (!tmp)
47 return LOGGER_STATUS_OOM;
48
49 tmp->vtbl = *vtbl;
50 tmp->backend = backend;
51 tmp->mem = env->mem;
52
53 *out = tmp;
54 return LOGGER_STATUS_OK;
55}
56
58{
59 if (!l || !*l)
60 return;
61
62 logger_t *logger = *l;
63 *l = NULL;
64
65 const osal_mem_ops_t *mem = logger->mem;
66 void *backend = logger->backend;
67
68 LEXLEO_ASSERT(logger->vtbl.destroy);
69
70 logger->vtbl.destroy(backend);
71
72 LEXLEO_ASSERT(mem && mem->free);
73
74 mem->free(logger);
75}
76
77logger_status_t logger_log(logger_t *l, const char *message)
78{
79 if (!l || !message) return LOGGER_STATUS_INVALID;
80
83
84 return l->vtbl.log(l->backend, message);
85}
#define LEXLEO_ASSERT(expr)
void logger_destroy(logger_t **l)
Destroy a logger handle.
Definition logger.c:57
logger_env_t logger_default_env(const osal_mem_ops_t *mem_ops)
Build a default logger_env_t from injected memory operations.
Definition logger.c:22
logger_status_t logger_create(logger_t **out, const logger_vtbl_t *vtbl, void *backend, const logger_env_t *env)
Create a generic logger handle from adapter-provided backend bindings.
Definition logger.c:27
logger_status_t logger_log(logger_t *l, const char *message)
Emit a log message through a logger.
Definition logger.c:77
Borrower-facing runtime operations for the logger port.
Adapter-side API for constructing and binding logger_t objects.
Composition Root helpers for the logger port.
Private logger handle definition for the logger port.
Lifecycle services for logger_t handles.
logger_status_t
@ LOGGER_STATUS_OOM
@ LOGGER_STATUS_OK
@ LOGGER_STATUS_INVALID
Runtime environment for the logger port.
Definition logger_env.h:34
const osal_mem_ops_t * mem
Memory operations used by the logger port.
Definition logger_env.h:42
Private handle structure for a logger_t.
logger_vtbl_t vtbl
void * backend
const osal_mem_ops_t * mem
Adapter dispatch table bound to a logger_t instance.
logger_status_t(* log)(void *backend, const char *message)
void(* destroy)(void *backend)
void *(* calloc)(size_t nmemb, size_t size)
void(* free)(void *ptr)