Mercurial > core / lisp/ffi/rocksdb/macs.lisp
changeset 698: |
96958d3eb5b0 |
parent: |
12287fab15d0
|
author: |
Richard Westhaver <ellis@rwest.io> |
date: |
Fri, 04 Oct 2024 22:04:59 -0400 |
permissions: |
-rw-r--r-- |
description: |
fixes |
1 ;;; macs.lisp --- RocksDB Alien Macros 3 ;; Convenience Macros for working with RocksDB Alien types 8 (deftype rocksdb-mergeoperator-function () 9 '(function (octet-vector (or octet-vector null) &rest t) (or null octet-vector))) 11 (deftype rocksdb-comparator-function () 12 '(function (octet-vector octet-vector) (integer -1 1))) 14 (deftype rocksdb-compactionfilter-function () 15 ;; level key val new changed 16 '(function ((unsigned-byte 32) octet-vector octet-vector octet-vector) boolean)) 18 (deftype rocksdb-logger-function () 19 '(function (unsigned-byte string) (values))) 22 (defmacro with-latest-options (db-path (db-opts-var cf-names-var cf-opts-var) &body body) 23 ;; TODO 2024-09-26: ignore unknown? 24 (with-gensyms (db-opts cf-names cf-opts) 25 `(with-alien ((,db-opts (* rocksdb-options)) 26 (,cf-names (* c-string)) 27 (,cf-opts (* (* rocksdb-options))) 29 (errptr rocksdb-errptr)) 30 (rocksdb-load-latest-options 32 (rocksdb-create-default-env) 34 (rocksdb-cache-create-lru 1080) 40 (let ((,db-opts-var ,db-opts) 41 (,cf-names-var (coerce 42 (loop for i below ncols 43 collect (deref ,cf-names i)) 46 (loop for i below ncols 47 collect (deref ,cf-opts i)) 49 (unwind-protect ,@body 50 (rocksdb-load-latest-options-destroy ,db-opts ,cf-names ,cf-opts ncols)))))) 53 (defmacro define-full-merge-op (name &body body) 54 `(define-alien-callable ,name (* t) 55 ,*rocksdb-full-merge-lambda-list* 58 (defmacro define-partial-merge-op (name &body body) 59 `(define-alien-callable ,name (* t) 60 ,*rocksdb-partial-merge-lambda-list* 63 (defmacro define-merge-operator (name state &key full 65 (destructor 'rocksdb-destructor) 66 (delete 'rocksdb-delete-value)) 67 (with-gensyms (fmerge pmerge mcreate mname) 68 (setf fmerge (symbolicate name "-FULL-MERGE") 69 pmerge (symbolicate name "-PARTIAL-MERGE") 70 mcreate (symbolicate "CREATE-" name "-MERGEOPERATOR") 71 mname (symbolicate name "-MERGEOPERATOR-NAME")) 73 (define-full-merge-op ,fmerge ,@full) 74 (define-partial-merge-op ,pmerge ,@partial) 75 (define-alien-callable ,mname c-string () (string ',name)) 77 (rocksdb-mergeoperator-create ,state 78 (alien-sap (alien-callable-function ',destructor)) 79 (alien-sap (alien-callable-function ',fmerge)) 80 (alien-sap (alien-callable-function ',pmerge)) 81 (alien-sap (alien-callable-function ',delete)) 82 (alien-sap (alien-callable-function ',mname)))))))