Никакая потребность в многомерной таблице. С 4 битами => 4 побитовых отображения, у Вас может быть единственное отображение массива u8[16] исходные данные к выводам. Поиски состояния будут намного более дешевыми, и можно извлечь отдельные биты с некоторой операцией в секунду shift-and-mask.
Если алгоритм для заполнения строк легко шифровать, Вы могли #define макрос для заполнения каждой строки индексом.
Я предложил бы любого (предпочтенные подходы сначала):
Лично, я считал его из конфигурационного файла. CSV, возможно, в который легко экспортировать от Excel. Или Вы могли просто скопировать и вставить от Excel в простой текст, который дает Вам разделенные пробелом значения, который одинаково легко импортировать.
Это также означает, учитывая, что Вы работаете с C, что Вы не должны будете перекомпилировать свой код каждый раз изменения таблицы решений.
если Ваша таблица истинности является всеми булевскими переменными, Вы могли бы просто свернуть ее к списку пар, например.
1111,0000
1110,0110
...
для сжатия данных представьте значения как байты (два откусывания)...
где/как сохранить его для мягкого кодирования в Вашей конкретной конфигурации встроенной системы, только можно сказать ;-)
Если бы таблица истинности действительно только 4x4x4x4 затем, я использовал бы макросы. Если бы это когда-либо собирается вырасти, мимо которого, я использовал бы Ragel. Возможности - это, сделает меньшим, быстрее C код, чем Вы будете.
Я не вижу ссылки на текущее состояние для получения состояния вывода. Это означает, что это не конечный автомат, но только таблица истинности. Существует четыре исходных данных, таким образом, существует только 16 возможных входных комбинаций. Так, таблица с 16 положениями должна сделать это.
Обычно, когда у Вас есть проблема как это, каждый пытается уменьшить ее до простой булевой формулы. Я не вижу, почему это не было бы лучшим подходом здесь. Это было бы намного более компактным и более читаемым, плюс он имеет потенциал, чтобы быть быстрее (я воображаю горстку ANDs, и ORs выполнился бы более быстро, чем набор умножается/смещает + доступ к памяти, необходимый для подхода справочной таблицы). Самый легкий способ уменьшить эту таблицу до булевой формулы с K-картой.