3rdparties/software/cl+ssl-20200427-git/src/ffi-buffer.lisp (873 bytes)
1 ;;;; -*- Mode: LISP; Syntax: COMMON-LISP; indent-tabs-mode: nil; coding: utf-8; show-trailing-whitespace: t -*- 2 3 #+xcvb (module (:depends-on ("package"))) 4 5 (in-package :cl+ssl) 6 7 (defun make-buffer (size) 8 (cffi:make-shareable-byte-vector size)) 9 10 (defun buffer-length (buf) 11 (length buf)) 12 13 (defun buffer-elt (buf index) 14 (elt buf index)) 15 (defun set-buffer-elt (buf index val) 16 (setf (elt buf index) val)) 17 (defsetf buffer-elt set-buffer-elt) 18 19 (defun s/b-replace (seq buf &key (start1 0) end1 (start2 0) end2) 20 (replace seq buf :start1 start1 :end1 end1 :start2 start2 :end2 end2)) 21 (defun b/s-replace (buf seq &key (start1 0) end1 (start2 0) end2) 22 (replace buf seq :start1 start1 :end1 end1 :start2 start2 :end2 end2)) 23 24 (defmacro with-pointer-to-vector-data ((ptr buf) &body body) 25 `(cffi:with-pointer-to-vector-data (,ptr ,buf) 26 ,@body))