LispBM
Loading...
Searching...
No Matches
lbm_flat_value.h
Go to the documentation of this file.
1/*
2 Copyright 2023, 2024 Joel Svensson svenssonjoel@yahoo.se
3
4 This program is free software: you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation, either version 3 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program. If not, see <http://www.gnu.org/licenses/>.
16*/
17
18#ifndef LBM_FLAT_VALUE_H_
19#define LBM_FLAT_VALUE_H_
20
21#include <heap.h>
22#include <symrepr.h>
23#include <lbm_memory.h>
24
30 // Arity
31#define S_CONS 0x01 // 2 car, cdr
32#define S_SYM_VALUE 0x02 // 1 value
33#define S_SYM_STRING 0x03
34#define S_BYTE_VALUE 0x04
35#define S_I28_VALUE 0x05
36#define S_U28_VALUE 0x06
37#define S_I32_VALUE 0x07
38#define S_U32_VALUE 0x08
39#define S_FLOAT_VALUE 0x09
40#define S_I64_VALUE 0x0A
41#define S_U64_VALUE 0x0B
42#define S_DOUBLE_VALUE 0x0C
43#define S_LBM_ARRAY 0x0D
44#define S_I56_VALUE 0x0E
45#define S_U56_VALUE 0x0F
46#define S_CONSTANT_REF 0x10
47#define S_LBM_LISP_ARRAY 0x1F
48
49
50// Maximum number of recursive calls
51#define FLATTEN_VALUE_MAXIMUM_DEPTH 2000
52
53#define FLATTEN_VALUE_OK 0
54#define FLATTEN_VALUE_ERROR_CANNOT_BE_FLATTENED -1
55#define FLATTEN_VALUE_ERROR_BUFFER_TOO_SMALL -2
56#define FLATTEN_VALUE_ERROR_ARRAY -3
57#define FLATTEN_VALUE_ERROR_CIRCULAR -4
58#define FLATTEN_VALUE_ERROR_MAXIMUM_DEPTH -5
59#define FLATTEN_VALUE_ERROR_NOT_ENOUGH_MEMORY -6
60#define FLATTEN_VALUE_ERROR_FATAL -7
61
62#define UNFLATTEN_MALFORMED -2
63#define UNFLATTEN_GC_RETRY -1
64#define UNFLATTEN_OK 0
65
66
67bool lbm_start_flatten(lbm_flat_value_t *v, size_t buffer_size);
70bool f_lisp_array(lbm_flat_value_t *v, uint32_t num_elt);
71bool f_sym(lbm_flat_value_t *v, lbm_uint sym_id);
72bool f_sym_string(lbm_flat_value_t *v, char *str);
73bool f_i(lbm_flat_value_t *v, lbm_int i);
74bool f_u(lbm_flat_value_t *v, lbm_uint u);
75bool f_b(lbm_flat_value_t *v, uint8_t b);
76bool f_i32(lbm_flat_value_t *v, int32_t w);
77bool f_u32(lbm_flat_value_t *v, uint32_t w);
78bool f_float(lbm_flat_value_t *v, float f);
79bool f_i64(lbm_flat_value_t *v, int64_t w);
80bool f_u64(lbm_flat_value_t *v, uint64_t w);
81bool f_lbm_array(lbm_flat_value_t *v, uint32_t num_bytes, uint8_t *data);
84int flatten_value_size(lbm_value v, bool image);
85void lbm_set_max_flatten_depth(int depth);
87
95#endif
bool lbm_finish_flatten(lbm_flat_value_t *v)
Definition lbm_flat_value.c:44
bool f_u64(lbm_flat_value_t *v, uint64_t w)
Definition lbm_flat_value.c:228
int flatten_value_size(lbm_value v, bool image)
Definition lbm_flat_value.c:338
void lbm_set_max_flatten_depth(int depth)
Definition lbm_flat_value.c:245
bool f_lbm_array(lbm_flat_value_t *v, uint32_t num_bytes, uint8_t *data)
Definition lbm_flat_value.c:236
bool f_sym(lbm_flat_value_t *v, lbm_uint sym_id)
Definition lbm_flat_value.c:120
bool f_sym_string(lbm_flat_value_t *v, char *str)
Definition lbm_flat_value.c:131
bool f_b(lbm_flat_value_t *v, uint8_t b)
Definition lbm_flat_value.c:182
bool f_i(lbm_flat_value_t *v, lbm_int i)
Definition lbm_flat_value.c:158
bool f_i32(lbm_flat_value_t *v, int32_t w)
Definition lbm_flat_value.c:189
bool lbm_start_flatten(lbm_flat_value_t *v, size_t buffer_size)
Definition lbm_flat_value.c:32
bool lbm_unflatten_value(lbm_flat_value_t *v, lbm_value *res)
Definition lbm_flat_value.c:899
bool f_u32(lbm_flat_value_t *v, uint32_t w)
Definition lbm_flat_value.c:196
int flatten_value_c(lbm_flat_value_t *fv, lbm_value v)
Definition lbm_flat_value.c:347
bool f_lisp_array(lbm_flat_value_t *v, uint32_t num_elt)
Definition lbm_flat_value.c:112
bool f_i64(lbm_flat_value_t *v, int64_t w)
Definition lbm_flat_value.c:221
bool f_u(lbm_flat_value_t *v, lbm_uint u)
Definition lbm_flat_value.c:170
bool f_float(lbm_flat_value_t *v, float f)
Definition lbm_flat_value.c:203
bool f_cons(lbm_flat_value_t *v)
Definition lbm_flat_value.c:103
lbm_value flatten_value(lbm_value v)
Definition lbm_flat_value.c:471
int lbm_get_max_flatten_depth(void)
Definition lbm_flat_value.c:249
int32_t lbm_int
Definition lbm_types.h:49
uint32_t lbm_uint
Definition lbm_types.h:48
uint32_t lbm_value
Definition lbm_types.h:44
Definition lbm_flat_value.h:25
lbm_uint buf_size
Definition lbm_flat_value.h:27
lbm_uint buf_pos
Definition lbm_flat_value.h:28
uint8_t * buf
Definition lbm_flat_value.h:26