Coverage report: /home/ellis/comp/core/ffi/rocksdb/prim.lisp

KindCoveredAll%
expression033 0.0
branch00nil
Key
Not instrumented
Conditionalized out
Executed
Not executed
 
Both branches taken
One branch taken
Neither branch taken
1
 ;;; rocksdb/prim.lisp --- RocksDB Primitive FFI Macros
2
 
3
 ;;
4
 
5
 ;;; Code:
6
 (in-package :rocksdb)
7
 
8
 ;;; Early Macros
9
 #|
10
   note: 
11
     unable to
12
       optimize away %SAP-ALIEN
13
     because:
14
       forced to do runtime allocation of alien-value structure
15
     --> STD/ALIEN:DEFAR PROGN LOCALLY DEFINE-ALIEN-ROUTINE PROGN DEFUN 
16
     --> PROGN SB-IMPL::%DEFUN SB-IMPL::%DEFUN SB-INT:NAMED-LAMBDA FUNCTION 
17
     --> BLOCK WITH-ALIEN SYMBOL-MACROLET SYMBOL-MACROLET SYMBOL-MACROLET 
18
     --> VALUES 
19
     ==>
20
       1
21
 
22
   note: 
23
     doing SAP to pointer coercion (cost 20)
24
     --> STD/ALIEN:DEFAR PROGN LOCALLY DEFINE-ALIEN-ROUTINE PROGN DEFUN 
25
     --> PROGN SB-IMPL::%DEFUN SB-IMPL::%DEFUN SB-INT:NAMED-LAMBDA FUNCTION 
26
     --> BLOCK WITH-ALIEN SYMBOL-MACROLET SYMBOL-MACROLET SYMBOL-MACROLET 
27
     --> VALUES 
28
     ==>
29
       1
30
 |#
31
 (defmacro def-with-errptr (name result-type &rest args)
32
   `(progn
33
      (defar ,name ,result-type ,@args (errptr rocksdb-errptr))
34
      (export '(,name) :rocksdb)))
35
 
36
 (defmacro define-opt (name)
37
   (let ((c-fn (symbolicate name '-create))
38
         (d-fn (symbolicate name '-destroy))
39
         (typ (symbolicate name '-t)))
40
     `(progn
41
        (define-alien-type ,name (struct ,typ))
42
        (defar ,c-fn (* ,name))
43
        (defar ,d-fn void
44
          (opt (* ,name)))
45
        (export '(,c-fn ,d-fn ,name) :rocksdb))))
46
 
47
 (defmacro define-opt-accessor (opt name &optional val)
48
   (let* ((g-fn (symbolicate opt '-get- name))
49
          (s-fn (symbolicate opt '-set- name)))
50
     (if val
51
         `(progn
52
            (defar ,s-fn void
53
              (opt (* ,opt))
54
              (val ,val))
55
            (defar ,g-fn ,val
56
              (opt (* ,opt)))
57
            (export '(,g-fn ,s-fn) :rocksdb))
58
         `(progn
59
            (defar ,s-fn void
60
              (opt (* ,opt)) 
61
              (val boolean))
62
            (defar ,g-fn boolean
63
              (opt (* ,opt)))
64
            (export '(,g-fn ,s-fn) :rocksdb)))))
65
 
66
 (defmacro export-opt-accessors (opt &rest names)
67
   (let ((forms
68
           (loop for n in names
69
                 collect `(export (list
70
                                   ',(symbolicate opt '-get- n)
71
                                   ',(symbolicate opt '-set- n)) 
72
                                  :rocksdb))))
73
     `(progn ,@forms)))