Вложенные структуры и объединения с Common Lisp CFFI

Я хочу написать небольшую библиотеку-оболочку для библиотеки C (точнее, ZeroMQ v3).

Однако мне интересно, как объявить иностранные вложенные структуры и объединения в CFFI.

Заголовочный файл C, содержащий соответствующую комбинацию структуры/объединения, можно найти здесь.

Документация CFFI пока не помогла, и я также не смог найти похожие вопросы в Интернете.

Буду рад любой помощи!


person Sammy S.    schedule 27.12.2012    source источник
comment
Прежде чем сделать это, взгляните на lisp-zmq и cl-zmq   -  person Vsevolod Dyomkin    schedule 27.12.2012
comment
Я сделал это уже. Как сказано в моем вопросе, я явно нацелен только на ZeroMQ v3, который не поддерживается ни lisp-zmq, ни cl-zmq. Лично я считаю, что новые проекты следует начинать с последней стабильной версии библиотек. Вот почему я хочу портировать lisp-zmq на ZeroMQ v3.   -  person Sammy S.    schedule 27.12.2012


Ответы (1)


defcstruct можно использовать в этом случае. Кроме того, в документах вы найдете примеры определения внешняя структура, а также два возможных типа слотов: простые (такие типы, как :int) и совокупные (имя другой структуры), так что ничто не мешает вам определить различные структуры, которые формируют это большое объединение, а затем составляют объединение. (также есть конструкция defcunion).

В собственной реализации CFFI есть примеры и тесты для таких структур:

(defcstruct s-short
  (a-char :char)
  (another-char :char)
  (a-short :short))

(defcstruct s-s-short
  (yet-another-char :char)
  (a-s-short s-short))

Обратите внимание, что a-s-short имеет тип s-short, определенный выше.

person Diego Sevilla    schedule 27.12.2012
comment
Спасибо! У меня была похожая идея, но я не был уверен, что этот подход будет самым элегантным. Мне было интересно, смогу ли я найти решение, близкое к коду C, даже если оно менее гибкое (например, вложение макросов defc*). - person Sammy S.; 27.12.2012