bldc/include/lbm_flat_value.h

65 lines
2.2 KiB
C
Raw Normal View History

Squashed 'lispBM/lispBM/' changes from 1267d006..8dc4c6d9 8dc4c6d9 added updated version of test_lisp_code.c that can produce events with lists of float 49dd1d31 added event tests to punish flat_values a bit. 9a2e004a fix flat_value bug, removed dead code and correctly labeled write_word static c9ee2c2d actually adding the flat_value files 215f3ba1 flat value implementation. A lot of testing needed 24d5184e experimental alternative way to transport values from C to LBM safely and with no need to pause. Work in progress 6d98ff61 restructuring for readability of GC and added queue locks. blocked context unblocking is done by the evaluator in a safe state. Safe state unblocking makes a bit harder to relay information about wether or not it was successful back to the thread issuing the unblock. So it may be a bad idea. It also makes the event queue obligatory 55ca904d added another arith stress test 87d21426 added another arith stress test f64d4c04 small tweaks to the runtime-extensions ab055958 added an arithmetic stresstest2 a802ed13 fundamentals have been unified with apply_funs. All tests pass but probably a period of bugginess ahead f00d6b46 added lbm-version extension to runtime extensions and changed return value on allocate_list_init in case there is not enough memory 2445974a preparations for unification of apply_fun and fundamentals 114b9a60 removed rot-vector function from Math extensions and added exp 6e1e7ee0 changed return value of define and added loop extensions from Benjamin BLDC 79622417 added loop extensions. todo: add tests git-subtree-dir: lispBM/lispBM git-subtree-split: 8dc4c6d9c16f7fce9753737423b8700f477f75f0
2023-02-11 01:20:37 -08:00
/*
Copyright 2023 Joel Svensson svenssonjoel@yahoo.se
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef LBM_FLAT_VALUE_H_
#define LBM_FLAT_VALUE_H_
#include <heap.h>
#include <symrepr.h>
#include <lbm_memory.h>
typedef struct {
uint8_t *buf;
lbm_uint buf_size;
lbm_uint buf_pos;
Squashed 'lispBM/lispBM/' changes from 1267d006..8dc4c6d9 8dc4c6d9 added updated version of test_lisp_code.c that can produce events with lists of float 49dd1d31 added event tests to punish flat_values a bit. 9a2e004a fix flat_value bug, removed dead code and correctly labeled write_word static c9ee2c2d actually adding the flat_value files 215f3ba1 flat value implementation. A lot of testing needed 24d5184e experimental alternative way to transport values from C to LBM safely and with no need to pause. Work in progress 6d98ff61 restructuring for readability of GC and added queue locks. blocked context unblocking is done by the evaluator in a safe state. Safe state unblocking makes a bit harder to relay information about wether or not it was successful back to the thread issuing the unblock. So it may be a bad idea. It also makes the event queue obligatory 55ca904d added another arith stress test 87d21426 added another arith stress test f64d4c04 small tweaks to the runtime-extensions ab055958 added an arithmetic stresstest2 a802ed13 fundamentals have been unified with apply_funs. All tests pass but probably a period of bugginess ahead f00d6b46 added lbm-version extension to runtime extensions and changed return value on allocate_list_init in case there is not enough memory 2445974a preparations for unification of apply_fun and fundamentals 114b9a60 removed rot-vector function from Math extensions and added exp 6e1e7ee0 changed return value of define and added loop extensions from Benjamin BLDC 79622417 added loop extensions. todo: add tests git-subtree-dir: lispBM/lispBM git-subtree-split: 8dc4c6d9c16f7fce9753737423b8700f477f75f0
2023-02-11 01:20:37 -08:00
} lbm_flat_value_t;
// Arity
#define S_CONS 0x1 // 2 car, cdr
#define S_SYM_VALUE 0x2 // 1 value
#define S_BYTE_VALUE 0x3
#define S_I_VALUE 0x4
#define S_U_VALUE 0x5
#define S_I32_VALUE 0x6
#define S_U32_VALUE 0x7
#define S_FLOAT_VALUE 0x8
#define S_I64_VALUE 0x9
#define S_U64_VALUE 0xA
#define S_DOUBLE_VALUE 0xB
#define S_LBM_ARRAY 0xC // 3 size, type, ptr
bool lbm_start_flatten(lbm_flat_value_t *v, size_t buffer_size);
bool lbm_finish_flatten(lbm_flat_value_t *v);
bool f_cons(lbm_flat_value_t *v);
bool f_sym(lbm_flat_value_t *v, lbm_uint sym);
bool f_i(lbm_flat_value_t *v, lbm_int i);
bool f_b(lbm_flat_value_t *v, uint8_t b);
bool f_i32(lbm_flat_value_t *v, int32_t w);
bool f_u32(lbm_flat_value_t *v, uint32_t w);
bool f_float(lbm_flat_value_t *v, float f);
bool f_i64(lbm_flat_value_t *v, int64_t w);
bool f_u64(lbm_flat_value_t *v, uint64_t w);
bool f_lbm_array(lbm_flat_value_t *v, uint32_t num_bytes, uint8_t *data);
Squashed 'lispBM/lispBM/' changes from 1267d006..8dc4c6d9 8dc4c6d9 added updated version of test_lisp_code.c that can produce events with lists of float 49dd1d31 added event tests to punish flat_values a bit. 9a2e004a fix flat_value bug, removed dead code and correctly labeled write_word static c9ee2c2d actually adding the flat_value files 215f3ba1 flat value implementation. A lot of testing needed 24d5184e experimental alternative way to transport values from C to LBM safely and with no need to pause. Work in progress 6d98ff61 restructuring for readability of GC and added queue locks. blocked context unblocking is done by the evaluator in a safe state. Safe state unblocking makes a bit harder to relay information about wether or not it was successful back to the thread issuing the unblock. So it may be a bad idea. It also makes the event queue obligatory 55ca904d added another arith stress test 87d21426 added another arith stress test f64d4c04 small tweaks to the runtime-extensions ab055958 added an arithmetic stresstest2 a802ed13 fundamentals have been unified with apply_funs. All tests pass but probably a period of bugginess ahead f00d6b46 added lbm-version extension to runtime extensions and changed return value on allocate_list_init in case there is not enough memory 2445974a preparations for unification of apply_fun and fundamentals 114b9a60 removed rot-vector function from Math extensions and added exp 6e1e7ee0 changed return value of define and added loop extensions from Benjamin BLDC 79622417 added loop extensions. todo: add tests git-subtree-dir: lispBM/lispBM git-subtree-split: 8dc4c6d9c16f7fce9753737423b8700f477f75f0
2023-02-11 01:20:37 -08:00
/** Unflatten a flat value stored in an lbm_memory array onto the heap
*
* \param v Flat value to unflatten.
* \param res Pointer to where the result lbm_value should be stored.
* \return True on success and false otherwise.
*/
bool lbm_unflatten_value(lbm_flat_value_t *v, lbm_value *res);
#endif