Coverage report: /development/source/library/com/dydra/gitlab/dydra-cgi/ffi/lisp/rdfcache/matrix.lisp

KindCoveredAll%
expression0291 0.0
branch012 0.0
Key
Not instrumented
Conditionalized out
Executed
Not executed
 
Both branches taken
One branch taken
Neither branch taken
1
 (in-package :rdfcache)
2
 
3
 ;;; Matrix API: Constructors
4
 
5
 (defun cursor-to-matrix (transaction-pointer cursor-pointer &key (row-offset 0) (row-limit 0))
6
   (declare (type foreign-pointer transaction-pointer cursor-pointer)
7
            (type fixnum row-offset row-limit))
8
   (with-checked-pointer (cursor-pointer)
9
     (let* ((row-count row-limit)
10
            (column-count 4)
11
            (matrix-pointer (dydra-ndk::make-term-matrix row-count column-count)))
12
       (when (and row-offset (> row-offset 0))
13
         (%skip cursor-pointer row-offset))
14
       (loop (when (or (not (next cursor-pointer))
15
                       (and row-limit (= (decf row-limit) -1)))
16
                   (return))
17
             (let ((context-number   (cursor-context-number cursor-pointer))
18
                   (subject-number   (cursor-subject-number cursor-pointer))
19
                   (predicate-number (cursor-predicate-number cursor-pointer))
20
                   (object-number    (cursor-object-number cursor-pointer))
21
                   (row-index        (1- (cursor-slot-value cursor-pointer 'position))))
22
               (dydra-ndk::%%term-matrix-set matrix-pointer row-index 0 context-number)
23
               (dydra-ndk::%%term-matrix-set matrix-pointer row-index 1 subject-number)
24
               (dydra-ndk::%%term-matrix-set matrix-pointer row-index 2 predicate-number)
25
               (dydra-ndk::%%term-matrix-set matrix-pointer row-index 3 object-number)))
26
       ;; FIXME: shrink matrix if returned rows were < ROW-LIMIT. not needed
27
       ;; at the moment, as SPOCQ always passes an accurate figure for ROW-LIMIT.
28
       matrix-pointer)))
29
 
30
 ;;; this is a dumb implementation
31
 ;;; better is, to modify cursor-to-matrix to accept a matrix to append to directly
32
 (defun cursor-append-matrix (transaction-pointer cursor-pointer %matrix &key (row-offset nil) (row-limit nil))
33
   (declare (type foreign-pointer transaction-pointer cursor-pointer %matrix)
34
            (type (or fixnum null) row-offset row-limit))
35
   (with-checked-pointer (cursor-pointer)
36
     (multiple-value-bind (%cursor-matrix count)
37
                          (cursor-to-matrix transaction-pointer cursor-pointer :row-offset row-offset :row-limit row-limit)
38
       (unless count
39
         (setf count (dydra-ndk::term-matrix-row-count %cursor-matrix)))
40
       (cond ((or (null-pointer-p %matrix)
41
                  (dydra-ndk::term-matrix-empty-p %matrix))
42
              (values %cursor-matrix count))
43
             (t
44
              (dydra-ndk::term-matrix-append %matrix %cursor-matrix)
45
              (matrix-free %cursor-matrix)
46
              (values %matrix count))))))
47
 
48
 (defun list-to-matrix (data)
49
   (let ((matrix-pointer (make-matrix (length data) (length (car data)))))
50
     (declare (type foreign-pointer matrix-pointer))
51
     (loop for row in data
52
           for row-index from 0
53
           do (loop for value in row
54
                    for column-index from 0
55
                    do (dydra-ndk::term-matrix-set matrix-pointer row-index column-index value)))
56
     matrix-pointer))
57
 
58
 ;(declaim (inline make-matrix))
59
 (defun make-matrix (&optional (row-count 0) (column-count 0))
60
   (dydra-ndk::make-term-matrix row-count column-count))
61
 
62
 ;;; Matrix API: Memory management
63
 
64
 ;(declaim (inline matrix-free))
65
 (defun matrix-free (matrix-pointer)
66
   (dydra-ndk::term-matrix-dispose matrix-pointer)
67
   (values))
68
 
69
 ;(declaim (inline matrix-release))
70
 (defun matrix-release (matrix-pointer)
71
   (dydra-ndk::term-matrix-dispose matrix-pointer)
72
   (values))
73
 
74
 (defun/deprecated matrix-clone (matrix-pointer)
75
   (dydra-ndk::term-matrix-clone matrix-pointer))
76
 
77
 (defun matrix-concatenate (matrix1-pointer matrix2-pointer)
78
   "Returns a new matrix which catenates the given data."
79
   (declare (type foreign-pointer matrix1-pointer matrix2-pointer))
80
   (with-checked-pointers (matrix1-pointer matrix2-pointer)
81
     (cond ((or (null-pointer-p matrix1-pointer)
82
                (dydra-ndk::term-matrix-empty-p matrix1-pointer))
83
            (dydra-ndk::term-matrix-clone matrix2-pointer))
84
           ((or (null-pointer-p matrix2-pointer)
85
                (dydra-ndk::term-matrix-empty-p matrix2-pointer))
86
            (dydra-ndk::term-matrix-clone matrix1-pointer))
87
           (t
88
            (let ((result-pointer (dydra-ndk::term-matrix-clone matrix1-pointer)))
89
              (dydra-ndk::term-matrix-append result-pointer matrix2-pointer)
90
              result-pointer)))))
91
 
92
 ;;; Matrix API: Accessors
93
 
94
 ;; NOTE: all remaining call sites in SPOCQ are as follows:
95
 ;;   (rdfcache::matrix-slot-value solutions 'rdfcache::data)
96
 (defmacro matrix-slot-value (matrix-var slot-name)
97
   (declare (ignore slot-name))
98
   (deprecation-warning 'matrix-slot-value 'matrix-data-pointer)
99
   `(dydra-ndk::term-matrix-data-pointer ,matrix-var))
100
 
101
 ;(declaim (inline matrix-size))
102
 (defun matrix-size (matrix-pointer)
103
   (dydra-ndk::term-matrix-size matrix-pointer))
104
 
105
 ;(declaim (inline matrix-data-pointer))
106
 (defun matrix-data-pointer (matrix-pointer)
107
   (dydra-ndk::term-matrix-data-pointer matrix-pointer))
108
 
109
 (defun matrix-to-list (matrix-pointer)
110
   (declare (type foreign-pointer matrix-pointer))
111
   (let ((rows nil))
112
     (dotimes (row-index (dydra-ndk::term-matrix-row-count matrix-pointer))
113
       (let ((row nil))
114
         (dotimes (column-index (dydra-ndk::term-matrix-column-count matrix-pointer))
115
           (push (dydra-ndk::term-matrix-get matrix-pointer row-index column-index) row))
116
         (push (reverse row) rows)))
117
     (reverse rows)))
118
 
119
 ;(declaim (inline matrix-row-count))
120
 (defun matrix-row-count (matrix-pointer)
121
   (dydra-ndk::term-matrix-row-count matrix-pointer))
122
 
123
 (defun matrix-row-to-list (matrix-pointer row-index)
124
   (declare (type foreign-pointer matrix-pointer)
125
            (type fixnum row-index))
126
   ;(deprecation-warning 'matrix-row-to-list 'dydra-ndk::term-matrix-row-to-list)
127
   (let ((result nil))
128
     (dotimes (column-index (dydra-ndk::term-matrix-column-count matrix-pointer))
129
       (push (dydra-ndk::term-matrix-get matrix-pointer row-index column-index) result))
130
     (reverse result)))
131
 
132
 ;(declaim (inline matrix-column-count))
133
 (defun matrix-column-count (matrix-pointer)
134
   (dydra-ndk::term-matrix-column-count matrix-pointer))
135
 
136
 (defun matrix-column-to-list (matrix-pointer column-index)
137
   (declare (type foreign-pointer matrix-pointer)
138
            (type fixnum column-index))
139
   ;(deprecation-warning 'matrix-column-to-list 'dydra-ndk::term-matrix-column-to-list)
140
   (let ((result nil))
141
     (dotimes (row-index (dydra-ndk::term-matrix-row-count matrix-pointer))
142
       (push (dydra-ndk::term-matrix-get matrix-pointer row-index column-index) result))
143
     (reverse result)))
144
 
145
 ;(declaim (inline matrix-element-count))
146
 (defun matrix-element-count (matrix-pointer)
147
   (dydra-ndk::term-matrix-element-count matrix-pointer))
148
 
149
 ;(declaim (inline matrix-row-size))
150
 (defun matrix-row-size (matrix-pointer)
151
   (dydra-ndk::term-matrix-row-size matrix-pointer))
152
 
153
 ;(declaim (inline matrix-get))
154
 (defun matrix-get (matrix-pointer row-index column-index)
155
   (dydra-ndk::term-matrix-get matrix-pointer row-index column-index))
156
 
157
 ;;; Matrix API: Mutators
158
 
159
 ;(declaim (inline matrix-set))
160
 (defun matrix-set (matrix-pointer row-index column-index element-value)
161
   (dydra-ndk::term-matrix-set matrix-pointer row-index column-index element-value))
162
 
163
 (defun/deprecated matrix-clear (matrix-pointer)
164
   (dydra-ndk::term-matrix-clear matrix-pointer))
165
 
166
 (defun/deprecated matrix-clear-row (matrix-pointer row-index)
167
   (dydra-ndk::term-matrix-clear-row matrix-pointer row-index))
168
 
169
 (defun/deprecated matrix-clear-column (matrix-pointer column-index)
170
   (dydra-ndk::term-matrix-clear-column matrix-pointer column-index))
171
 
172
 ;(declaim (inline matrix-fill))
173
 (defun matrix-fill (matrix-pointer element-value)
174
   (dydra-ndk::term-matrix-fill matrix-pointer element-value))
175
 
176
 (defun/deprecated matrix-fill-row (matrix-pointer row-index element-value)
177
   (dydra-ndk::term-matrix-fill-row matrix-pointer row-index element-value))
178
 
179
 (defun/deprecated matrix-fill-column (matrix-pointer column-index element-value)
180
   (dydra-ndk::term-matrix-fill-column matrix-pointer column-index element-value))
181
 
182
 (defun/deprecated matrix-drop-column (matrix-pointer &optional column-index)
183
   (dydra-ndk::term-matrix-drop-column matrix-pointer column-index))
184
 
185
 (defun/deprecated matrix-drop-columns (matrix-pointer column-indexes)
186
   (dydra-ndk::term-matrix-drop-columns matrix-pointer column-indexes))
187
 
188
 (defun/deprecated matrix-append-row (matrix-pointer)
189
   (dydra-ndk::term-matrix-append-row matrix-pointer))
190
 
191
 ;(declaim (inline matrix-append-rows))
192
 (defun matrix-append-rows (matrix-pointer count)
193
   (dydra-ndk::term-matrix-append-rows matrix-pointer count))
194
 
195
 (defun/deprecated matrix-append-column (matrix-pointer)
196
   (dydra-ndk::term-matrix-append-column matrix-pointer))
197
 
198
 (defun/deprecated matrix-append-columns (matrix-pointer count)
199
   (dydra-ndk::term-matrix-append-columns matrix-pointer count))
200
 
201
 ;(declaim (inline matrix-resize))
202
 (defun matrix-resize (matrix-pointer row-count &optional column-count)
203
   (dydra-ndk::term-matrix-resize matrix-pointer row-count column-count))
204
 
205
 (defun/deprecated matrix-sort (matrix-pointer &optional reversed)
206
   (dydra-ndk::term-matrix-sort matrix-pointer reversed))
207
 
208
 ;(declaim (inline matrix-sort-by))
209
 (defun matrix-sort-by (matrix-pointer column-indexes &optional row-count)
210
   (dydra-ndk::term-matrix-sort-by matrix-pointer column-indexes row-count))
211
 
212
 ;;; Matrix API: Debugging
213
 
214
 (defun print-matrix (matrix-pointer &optional (stream *standard-output*))
215
   (dydra-ndk::print-term-matrix matrix-pointer stream))
216
 
217
 ;;; a place-holder for index operations
218
 (defun index-match (transaction result-matrix context subject predicate-vector index-expression &optional (score-p nil))
219
   (declare (ignore transaction context subject predicate-vector index-expression score-p))
220
   result-matrix)