Я работаю над простым языком препроцессора в стиле lisp.
В API я хочу, чтобы пользователи могли передавать массивы любого размера и размера в препроцессор, которыми можно управлять с помощью языка.
В настоящее время у меня есть перечисление типов;
typedef enum LISP_TYPE
{
LT_UINT,
LT_FLOAT,
LT_ARRAY
...,
...
} _LISP_TYPE;
У меня проблемы с поиском эффективного и простого метода хранения массивов, а также доступа к ним.
Есть еще одна структура, которую я использую специально для массивов;
typedef struct _lisp_array
{
LISP_TYPE type;
unsigned int length;
void* data;
} lisp_array;
Когда препроцессор See представляет собой список атомов с типом LT_ARRAY, он преобразует его void*
(cdr в терминах lisp) в указанную выше структуру. Где у меня возникли проблемы, так это выяснить, как получить доступ к многомерным массивам. Я думал о вычислении значения шага для обхода массива, но могу ли я гарантировать, что все переданные массивы будут распределены непрерывно?
Любая помощь приветствуется.