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#include <lbm_image.h>
25
31 // Arity
32#define S_CONS 0x01 // 2 car, cdr
33#define S_SYM_VALUE 0x02 // 1 value
34#define S_SYM_STRING 0x03
35#define S_BYTE_VALUE 0x04
36#define S_I28_VALUE 0x05
37#define S_U28_VALUE 0x06
38#define S_I32_VALUE 0x07
39#define S_U32_VALUE 0x08
40#define S_FLOAT_VALUE 0x09
41#define S_I64_VALUE 0x0A
42#define S_U64_VALUE 0x0B
43#define S_DOUBLE_VALUE 0x0C
44#define S_LBM_ARRAY 0x0D
45#define S_I56_VALUE 0x0E
46#define S_U56_VALUE 0x0F
47#define S_CONSTANT_REF 0x10
48#define S_LBM_LISP_ARRAY 0x1F
49
50#define S_SHARED 0x20
51#define S_REF 0x21
52
53
54// Maximum number of recursive calls
55#define FLATTEN_VALUE_MAXIMUM_DEPTH 2000
56
57#define FLATTEN_VALUE_OK 0
58#define FLATTEN_VALUE_ERROR_CANNOT_BE_FLATTENED -1
59#define FLATTEN_VALUE_ERROR_BUFFER_TOO_SMALL -2
60#define FLATTEN_VALUE_ERROR_ARRAY -3
61#define FLATTEN_VALUE_ERROR_CIRCULAR -4
62#define FLATTEN_VALUE_ERROR_MAXIMUM_DEPTH -5
63#define FLATTEN_VALUE_ERROR_NOT_ENOUGH_MEMORY -6
64#define FLATTEN_VALUE_ERROR_FATAL -7
65
66#define UNFLATTEN_SHARING_TABLE_ERROR -4
67#define UNFLATTEN_SHARING_TABLE_REQUIRED -3
68#define UNFLATTEN_MALFORMED -2
69#define UNFLATTEN_GC_RETRY -1
70#define UNFLATTEN_OK 0
71
72
73bool lbm_start_flatten(lbm_flat_value_t *v, size_t buffer_size);
76bool f_lisp_array(lbm_flat_value_t *v, uint32_t num_elt);
77bool f_sym(lbm_flat_value_t *v, lbm_uint sym_id);
78bool f_sym_string(lbm_flat_value_t *v, char *str);
79bool f_i(lbm_flat_value_t *v, lbm_int i);
80bool f_u(lbm_flat_value_t *v, lbm_uint u);
81bool f_b(lbm_flat_value_t *v, uint8_t b);
82bool f_i32(lbm_flat_value_t *v, int32_t w);
83bool f_u32(lbm_flat_value_t *v, uint32_t w);
84bool f_float(lbm_flat_value_t *v, float f);
85bool f_i64(lbm_flat_value_t *v, int64_t w);
86bool f_u64(lbm_flat_value_t *v, uint64_t w);
87bool f_lbm_array(lbm_flat_value_t *v, uint32_t num_bytes, uint8_t *data);
90int flatten_value_size(lbm_value v, bool image);
91void lbm_set_max_flatten_depth(int depth);
93
102#endif
bool lbm_finish_flatten(lbm_flat_value_t *v)
Definition lbm_flat_value.c:48
bool f_u64(lbm_flat_value_t *v, uint64_t w)
Definition lbm_flat_value.c:232
int flatten_value_size(lbm_value v, bool image)
Definition lbm_flat_value.c:365
void lbm_set_max_flatten_depth(int depth)
Definition lbm_flat_value.c:249
bool f_lbm_array(lbm_flat_value_t *v, uint32_t num_bytes, uint8_t *data)
Definition lbm_flat_value.c:240
bool f_sym(lbm_flat_value_t *v, lbm_uint sym_id)
Definition lbm_flat_value.c:124
bool f_sym_string(lbm_flat_value_t *v, char *str)
Definition lbm_flat_value.c:135
bool f_b(lbm_flat_value_t *v, uint8_t b)
Definition lbm_flat_value.c:186
bool f_i(lbm_flat_value_t *v, lbm_int i)
Definition lbm_flat_value.c:162
bool f_i32(lbm_flat_value_t *v, int32_t w)
Definition lbm_flat_value.c:193
bool lbm_start_flatten(lbm_flat_value_t *v, size_t buffer_size)
Definition lbm_flat_value.c:36
bool lbm_unflatten_value(lbm_flat_value_t *v, lbm_value *res)
Definition lbm_flat_value.c:1052
bool f_u32(lbm_flat_value_t *v, uint32_t w)
Definition lbm_flat_value.c:200
int flatten_value_c(lbm_flat_value_t *fv, lbm_value v)
Definition lbm_flat_value.c:374
bool f_lisp_array(lbm_flat_value_t *v, uint32_t num_elt)
Definition lbm_flat_value.c:116
bool lbm_unflatten_value_sharing(sharing_table *st, lbm_uint *target_map, lbm_flat_value_t *v, lbm_value *res)
Definition lbm_flat_value.c:1081
bool f_i64(lbm_flat_value_t *v, int64_t w)
Definition lbm_flat_value.c:225
bool f_u(lbm_flat_value_t *v, lbm_uint u)
Definition lbm_flat_value.c:174
bool f_float(lbm_flat_value_t *v, float f)
Definition lbm_flat_value.c:207
bool f_cons(lbm_flat_value_t *v)
Definition lbm_flat_value.c:107
lbm_value flatten_value(lbm_value v)
Definition lbm_flat_value.c:498
int lbm_get_max_flatten_depth(void)
Definition lbm_flat_value.c:253
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:26
lbm_uint buf_size
Definition lbm_flat_value.h:28
lbm_uint buf_pos
Definition lbm_flat_value.h:29
uint8_t * buf
Definition lbm_flat_value.h:27
Definition lbm_image.h:149