changelog shortlog graph tags branches changeset files revisions annotate raw help

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

changeset 607: 1a5828267b90
parent: 6fc04c4d465c
child: 57813b8ee029
author: Richard Westhaver <ellis@rwest.io>
date: Sun, 18 Aug 2024 21:37:07 -0400
permissions: -rw-r--r--
description: rocksdb logger function and callback macros
1 ;;; macs.lisp --- RocksDB Alien Macros
2 
3 ;; Convenience Macros for working with RocksDB Alien types
4 
5 ;;; Code:
6 (in-package :rocksdb)
7 
8 (defmacro define-full-merge-op (name &body body)
9  `(define-alien-callable ,name (* t)
10  ,*rocksdb-full-merge-lambda-list*
11  ,@body))
12 
13 (defmacro define-partial-merge-op (name &body body)
14  `(define-alien-callable ,name (* t)
15  ,*rocksdb-partial-merge-lambda-list*
16  ,@body))
17 
18 (defvar *rocksdb-destructor-callback* (alien-callable-function 'rocksdb-destructor))
19 (defvar *rocksdb-delete-callback* (alien-callable-function 'rocksdb-delete-value))
20 
21 (defmacro define-merge-operator (name state &key full
22  partial
23  (destructor 'rocksdb-destructor)
24  (delete 'rocksdb-delete-value))
25  (with-gensyms (fmerge pmerge mcreate mname)
26  (setf fmerge (symbolicate name "-FULL-MERGE")
27  pmerge (symbolicate name "-PARTIAL-MERGE")
28  mcreate (symbolicate "CREATE-" name "-MERGEOPERATOR")
29  mname (symbolicate name "-MERGEOPERATOR-NAME"))
30  `(progn
31  (define-full-merge-op ,fmerge ,@full)
32  (define-partial-merge-op ,pmerge ,@partial)
33  (define-alien-callable ,mname c-string () ,name)
34  (defun ,mcreate ()
35  (rocksdb-mergeoperator-create ,state
36  (alien-sap (alien-callable-function ',destructor))
37  (alien-sap (alien-callable-function ',fmerge))
38  (alien-sap (alien-callable-function ',pmerge))
39  (alien-sap (alien-callable-function ',delete))
40  (alien-sap (alien-callable-function ',mname)))))))
41 
42