changelog shortlog graph tags branches changeset files revisions annotate raw help

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

changeset 87: 8203bd080c77
child: 17bdf95bc114
author: ellis <ellis@rwest.io>
date: Fri, 08 Dec 2023 23:38:55 -0500
permissions: -rw-r--r--
description: refactoring of ffi/rocksdb, tests
1 (in-package :rocksdb)
2 
3 ;;; Macros
4 (defmacro def-with-errptr (name result-type &rest args)
5  `(define-alien-routine ,name ,result-type ,@args (errptr rocksdb-errptr)))
6 
7 (defmacro define-opt (name &rest fields)
8  `(progn
9  (define-alien-type ,name (struct ,(symbolicate name '-t)))
10  (define-alien-routine ,(symbolicate name '-create) (* ,name))
11  (define-alien-routine ,(symbolicate name '-destroy) void
12  (opt (* ,name)))
13  ,@(dolist (f fields)
14  (if (listp f)
15  (eval
16  (nconc
17  (list
18  'define-alien-routine
19  (symbolicate name '-set- (car f))
20  'void
21  `(opt (* ,name)))
22  (cdr f)))
23  (eval
24  (list
25  'define-alien-routine
26  (symbolicate name '-set- f)
27  'void
28  `(opt (* ,name))
29  '(val boolean)))))))
30 
31 (defmacro define-opaque (ty) `(define-alien-type ,ty (struct ,(symbolicate ty '-t))))