← Архив: Common Lisp

sbcl: bit-vector

Author: · 13.01.2016 06:34
· original author: yyk
Всем здрасьте.
Попытался порыться в инете и в потрохах sbcl, но так и не понял, есть ли какая возможность работать с bit-vector не побитно? В первую очередь - для сохранения/загрузки данных. Можно ли как-то получить доступ напрямую к области памяти?
· original author: Love5an
Можешь использовать cffi.
(let ((bv (make-array 100 :element-type 'bit :initial-element 1)))
  (cffi:with-pointer-to-vector-data (p bv)
    (cffi:mem-ref p :uint32)
)
)

;; ==> 4294967295
· original author: Love5an
Но это работает только для SBCL и других лиспов, которые позволяют брать указатель на данные у битового вектора.Касательно других видов массивов - CFFI гарантирует что это работает с (simple-array (unsigned-byte 8)) массивами, но тот же SBCL позволяет это и для скажем строк или single-float/double-float итд. Где-то в интернете была статья на эту тему.