changelog shortlog graph tags branches changeset files revisions annotate raw help

Mercurial > core / lisp/ffi/rocksdb/prim.lisp

changeset 698: 96958d3eb5b0
parent: 6fc04c4d465c
author: Richard Westhaver <ellis@rwest.io>
date: Fri, 04 Oct 2024 22:04:59 -0400
permissions: -rw-r--r--
description: fixes
1 ;;; rocksdb/prim.lisp --- RocksDB Primitive FFI Macros
2 
3 ;;
4 
5 ;;; Code:
6 (in-package :rocksdb)
7 
8 ;;; Early Macros
9 (defmacro def-with-errptr (name result-type &rest args)
10  `(progn
11  (define-alien-routine ,name ,result-type ,@args (errptr rocksdb-errptr))
12  (export '(,name) :rocksdb)))
13 
14 (defmacro define-opt (name)
15  (let ((c-fn (symbolicate name '-create))
16  (d-fn (symbolicate name '-destroy))
17  (typ (symbolicate name '-t)))
18  `(progn
19  (define-alien-type ,name (struct ,typ))
20  (define-alien-routine ,c-fn (* ,name))
21  (define-alien-routine ,d-fn void
22  (opt (* ,name)))
23  (export '(,c-fn ,d-fn ,name) :rocksdb))))
24 
25 (defmacro define-opt-accessor (opt name &optional val)
26  (let* ((g-fn (symbolicate opt '-get- name))
27  (s-fn (symbolicate opt '-set- name)))
28  (if val
29  `(progn
30  (define-alien-routine ,s-fn void
31  (opt (* ,opt))
32  (val ,val))
33  (define-alien-routine ,g-fn ,val
34  (opt (* ,opt)))
35  (export '(,g-fn ,s-fn) :rocksdb))
36  `(progn
37  (define-alien-routine ,s-fn void
38  (opt (* ,opt))
39  (val boolean))
40  (define-alien-routine ,g-fn boolean
41  (opt (* ,opt)))
42  (export '(,g-fn ,s-fn) :rocksdb)))))
43 
44 (defmacro export-opt-accessors (opt &rest names)
45  (let ((forms
46  (loop for n in names
47  collect `(export (list
48  ',(symbolicate opt '-get- n)
49  ',(symbolicate opt '-set- n)) :rocksdb))))
50  `(progn ,@forms)))