lexLeo
Loading...
Searching...
No Matches
lexer_legacy_ctx.h
1// src/ports/lexer/include/internal/lexer_ctx.h
2
3#ifndef LEXLEO_LEXER_CTX_H
4#define LEXLEO_LEXER_CTX_H
5
6#include "lexer.h"
7
8#include "internal/osal_mem_ctx.h"
9
10#ifdef __cplusplus
11extern "C" {
12#endif
13
14// ----------------------------------------------------------------------------
15// CTX
16// ----------------------------------------------------------------------------
17
18typedef lexer_next_rc_t (*lexer_next_fn_t)(
19 void *backend,
20 struct lexleo_token_t *out);
21
22typedef void (*lexer_destroy_fn_t) (void *backend);
23
24typedef struct lexer_ctx_t {
25 const osal_mem_ops_t *mem;
27
28typedef struct lexer_vtbl_t {
29 lexer_next_fn_t next;
30 lexer_destroy_fn_t destroy;
32
33typedef enum {
34 LEXER_STATUS_OK = 0,
35 LEXER_STATUS_ERROR = 1
36} lexer_status_t;
37
38lexer_status_t lexer_create(
39 lexer_t **out,
40 const lexer_vtbl_t *vtbl,
41 void *backend,
42 const lexer_ctx_t *ctx );
43
44void lexer_destroy(lexer_t *lx);
45
46/*
47lexer_status_t lexer_create(
48 lexer_t **out,
49 const lexer_vtbl_t *vtbl,
50 void *backend,
51 const lexer_ctx_t *ctx)
52{
53 if (!out || !vtbl || !vtbl->next || !ctx || !ctx->mem)
54 return LEXER_STATUS_ERROR;
55
56 lexer_t *lx = ctx->mem->malloc(sizeof(*lx));
57 if (!lx) return LEXER_STATUS_ERROR;
58
59 lx->vtbl = *vtbl;
60 lx->backend = backend;
61 lx->mem = ctx->mem;
62
63 *out = lx;
64 return LEXER_STATUS_OK;
65}
66
67void lexer_destroy(lexer_t *lx)
68{
69 if (!lx) return;
70 if (lx->vtbl.destroy) lx->vtbl.destroy(lx->backend);
71 lx->mem->free(lx);
72}
73*/
74
75#ifdef __cplusplus
76}
77#endif
78
79#endif //LEXLEO_LEXER_CTX_H
Definition lexer_ctx.h:15
Definition lexer_internal.h:8
Definition lexer_ctx.h:25
Definition lexleo_token.h:67
Definition osal_mem_ops.h:12