Coverage report: /development/source/library/com/dydra/gitlab/dydra-cgi/ffi/lisp/dydra-ndk/term_matrix.lisp
| Kind | Covered | All | % |
| expression | 0 | 275 | 0.0 |
| branch | 0 | 8 | 0.0 |
Key
Not instrumented
Conditionalized out
Executed
Not executed
Both branches taken
One branch taken
Neither branch taken
1
(in-package :dydra-ndk)
3
;;; Term Matrix API: Foreign Symbols
5
(defcvar ("dydra_term_matrix_sizeof" +term-matrix-sizeof+ :read-only t) :ulong)
7
(defcfun ("dydra_term_matrix_parse_from_path" %%term-matrix-parse-from-path) :pointer (pathname :string))
8
(defcfunwi ("dydra_term_matrix_clone" %%term-matrix-clone) :pointer (matrix-pointer :pointer))
9
(defcfunwi ("dydra_term_matrix_construct" %%term-matrix-construct) :void (matrix-pointer :pointer) (row-count :ulong) (column-count :ulong))
10
(defcfunwi ("dydra_term_matrix_destruct" %%term-matrix-destruct) :void (matrix-pointer :pointer))
11
(defcfun ("dydra_term_matrix_retain_count" %%term-matrix-retain-count) :uint32 (matrix-pointer :pointer))
12
(defcfun ("dydra_term_matrix_retain" %%term-matrix-retain) :uint32 (matrix-pointer :pointer))
13
(defcfunwi ("dydra_term_matrix_release" %%term-matrix-release) :uint32 (matrix-pointer :pointer))
15
(defcfun ("dydra_term_matrix_empty" %%term-matrix-empty) (:boolean :int8) (matrix-pointer :pointer))
16
(defcfun ("dydra_term_matrix_size" %%term-matrix-size) :ulong (matrix-pointer :pointer))
17
(defcfun ("dydra_term_matrix_row_capacity" %%term-matrix-row-capacity) :ulong (matrix-pointer :pointer))
18
(defcfun ("dydra_term_matrix_row_count" %%term-matrix-row-count) :ulong (matrix-pointer :pointer))
19
(defcfun ("dydra_term_matrix_row_size" %%term-matrix-row-size) :ulong (matrix-pointer :pointer))
20
(defcfun ("dydra_term_matrix_column_count" %%term-matrix-column-count) :ulong (matrix-pointer :pointer))
21
(defcfun ("dydra_term_matrix_column_name" %%term-matrix-column-name) :string (matrix-pointer :pointer) (column-index :ulong))
22
(defcfun ("dydra_term_matrix_data" %%term-matrix-data) :pointer (matrix-pointer :pointer))
23
(defcfun ("dydra_term_matrix_row_at" %%term-matrix-row-at) :pointer (matrix-pointer :pointer) (row-index :ulong))
24
(defcfun ("dydra_term_matrix_get" %%term-matrix-get) :int64 (matrix-pointer :pointer) (row-index :ulong) (column-index :ulong))
25
(defcfun ("dydra_term_matrix_set" %%term-matrix-set) :void (matrix-pointer :pointer) (row-index :ulong) (column-index :ulong) (element-value :int64))
26
(defcfun ("dydra_term_matrix_resize" %%term-matrix-resize) :void (matrix-pointer :pointer) (row-count :ulong) (column-count :ulong))
27
(defcfun ("dydra_term_matrix_clear" %%term-matrix-clear) :void (matrix-pointer :pointer))
28
(defcfun ("dydra_term_matrix_clear_row" %%term-matrix-clear-row) :void (matrix-pointer :pointer) (row-index :ulong))
29
(defcfun ("dydra_term_matrix_clear_column" %%term-matrix-clear-column) :void (matrix-pointer :pointer) (column-index :ulong))
30
(defcfun ("dydra_term_matrix_fill" %%term-matrix-fill) :void (matrix-pointer :pointer) (element-value :int64))
31
(defcfun ("dydra_term_matrix_fill_row" %%term-matrix-fill-row) :void (matrix-pointer :pointer) (row-index :ulong) (element-value :int64))
32
(defcfun ("dydra_term_matrix_fill_column" %%term-matrix-fill-column) :void (matrix-pointer :pointer) (column-index :ulong) (element-value :int64))
33
(defcfun ("dydra_term_matrix_drop_row" %%term-matrix-drop-row) :void (matrix-pointer :pointer) (row-index :ulong))
34
(defcfun ("dydra_term_matrix_drop_rows" %%term-matrix-drop-rows) :void (matrix-pointer :pointer) (first-row-index :ulong) (last-row-index :ulong))
35
(defcfun ("dydra_term_matrix_drop_column" %%term-matrix-drop-column) :void (matrix-pointer :pointer) (column-index :ulong))
36
(defcfun ("dydra_term_matrix_drop_columns" %%term-matrix-drop-columns) :void (matrix-pointer :pointer) (first-column-index :ulong) (last-column-index :ulong))
37
(defcfun ("dydra_term_matrix_prepend" %%term-matrix-prepend) :void (matrix-pointer :pointer) (other-pointer :pointer))
38
(defcfun ("dydra_term_matrix_prepend_row" %%term-matrix-prepend-row) :long (matrix-pointer :pointer))
39
(defcfun ("dydra_term_matrix_prepend_column" %%term-matrix-prepend-column) :long (matrix-pointer :pointer))
40
(defcfun ("dydra_term_matrix_append" %%term-matrix-append) :void (matrix-pointer :pointer) (other-pointer :pointer))
41
(defcfun ("dydra_term_matrix_append_row" %%term-matrix-append-row) :long (matrix-pointer :pointer))
42
(defcfun ("dydra_term_matrix_append_column" %%term-matrix-append-column) :long (matrix-pointer :pointer))
43
(defcfun ("dydra_term_matrix_rename_column" %%term-matrix-rename-column) :void (matrix-pointer :pointer) (column-index :ulong) (column-name :string))
44
(defcfun ("dydra_term_matrix_sort" %%term-matrix-sort) :void (matrix-pointer :pointer) (reversed :boolean))
45
(defcfun ("dydra_term_matrix_sort_by" %%term-matrix-sort-by) :void (matrix-pointer :pointer) (column-count :ulong) (column-indexes :pointer) (column-ordering :pointer))
46
(defcfun ("dydra_term_matrix_print_to_fd" %%term-matrix-print-to-fd) :void (matrix-pointer :pointer) (fd :int))
48
;;; Term Matrix API: Constructors
50
(defun make-term-matrix (&optional (row-count 0) (column-count 0))
51
"Allocates a new matrix with the given dimensions."
52
(declare (type fixnum row-count column-count))
53
(let ((matrix-pointer (foreign-alloc :uint8 :count +term-matrix-sizeof+)))
54
(declare (type foreign-pointer matrix-pointer))
55
(%%term-matrix-construct matrix-pointer row-count column-count)
58
;;; Term Matrix API: Memory Management
60
(defun term-matrix-construct (matrix-pointer &optional (row-count 0) (column-count 0))
61
(declare (type foreign-pointer matrix-pointer))
62
(with-checked-pointer (matrix-pointer)
63
(%%term-matrix-construct matrix-pointer row-count column-count)))
65
(defun term-matrix-destruct (matrix-pointer)
66
(declare (type foreign-pointer matrix-pointer))
67
(with-checked-pointer (matrix-pointer)
68
(%%term-matrix-destruct matrix-pointer)))
70
(defun term-matrix-clone (matrix-pointer)
71
(declare (type foreign-pointer matrix-pointer))
72
(with-checked-pointer (matrix-pointer)
73
(%%term-matrix-clone matrix-pointer)))
75
(defun term-matrix-dispose (matrix-pointer)
76
(declare (type foreign-pointer matrix-pointer))
77
(with-checked-pointer (matrix-pointer)
78
(when (zerop (%%term-matrix-release matrix-pointer))
79
(%%term-matrix-destruct matrix-pointer)
80
(foreign-free matrix-pointer))))
82
(defun term-matrix-retain (matrix-pointer)
83
(declare (type foreign-pointer matrix-pointer))
84
(with-checked-pointer (matrix-pointer)
85
(%%term-matrix-retain matrix-pointer)))
87
(defun term-matrix-release (matrix-pointer)
88
(declare (type foreign-pointer matrix-pointer))
89
(with-checked-pointer (matrix-pointer)
90
(%%term-matrix-release matrix-pointer)))
92
;;; Term Matrix API: Accessors
94
(declaim (inline term-matrix-empty-p))
95
(defun term-matrix-empty-p (matrix-pointer)
96
(declare (type foreign-pointer matrix-pointer))
97
(with-checked-pointer (matrix-pointer)
98
(zerop (term-matrix-size matrix-pointer))))
99
;(%%term-matrix-empty matrix-pointer)))
101
(declaim (inline term-matrix-size))
102
(defun term-matrix-size (matrix-pointer)
103
"Returns the total byte size of the data contained in the given term matrix."
104
(declare (type foreign-pointer matrix-pointer))
105
(with-checked-pointer (matrix-pointer)
106
(%%term-matrix-size matrix-pointer)))
108
(declaim (inline term-matrix-data-pointer))
109
(defun term-matrix-data-pointer (matrix-pointer)
110
(declare (type foreign-pointer matrix-pointer))
111
(with-checked-pointer (matrix-pointer)
112
(%%term-matrix-data matrix-pointer)))
114
(declaim (inline term-matrix-row-count))
115
(defun term-matrix-row-count (matrix-pointer)
116
"Returns the number of rows in the given term matrix."
117
(declare (type foreign-pointer matrix-pointer))
118
(with-checked-pointer (matrix-pointer)
119
(%%term-matrix-row-count matrix-pointer)))
121
(declaim (inline term-matrix-row-size))
122
(defun term-matrix-row-size (matrix-pointer)
123
"Returns the bytes per row in the given matrix."
124
(declare (type foreign-pointer matrix-pointer))
125
(%%term-matrix-row-size matrix-pointer))
127
(declaim (inline term-matrix-column-count))
128
(defun term-matrix-column-count (matrix-pointer)
129
"Returns the number of columns in the given term matrix."
130
(declare (type foreign-pointer matrix-pointer))
131
(with-checked-pointer (matrix-pointer)
132
(%%term-matrix-column-count matrix-pointer)))
134
(declaim (inline term-matrix-element-count))
135
(defun term-matrix-element-count (matrix-pointer)
136
"Returns (* (TERM-MATRIX-ROW-COUNT) (TERM-MATRIX-COLUMN-COUNT))."
137
(* (term-matrix-row-count matrix-pointer)
138
(term-matrix-column-count matrix-pointer)))
140
(declaim (inline term-matrix-get))
141
(defun term-matrix-get (matrix-pointer row-index column-index)
142
"Returns the value of the specified matrix element."
143
(declare (type foreign-pointer matrix-pointer)
144
(type fixnum row-index column-index))
145
(with-checked-pointer (matrix-pointer)
146
(%%term-matrix-get matrix-pointer row-index column-index)))
148
;;; Term Matrix API: Mutators
150
(declaim (inline term-matrix-set))
151
(defun term-matrix-set (matrix-pointer row-index column-index element-value)
152
"Changes the value of the specified matrix element."
153
(declare (type foreign-pointer matrix-pointer)
154
(type fixnum row-index column-index element-value))
155
(with-checked-pointer (matrix-pointer)
156
(%%term-matrix-set matrix-pointer row-index column-index element-value)))
158
(defun term-matrix-clear (matrix-pointer)
159
"Sets all elements in the term matrix to contain the value zero.
160
Does not change its dimensions."
161
(declare (type foreign-pointer matrix-pointer))
162
(%%term-matrix-clear matrix-pointer))
164
(defun term-matrix-clear-row (matrix-pointer row-index)
165
(declare (type foreign-pointer matrix-pointer)
166
(type fixnum row-index))
167
(%%term-matrix-clear-row matrix-pointer row-index))
169
(defun term-matrix-clear-column (matrix-pointer column-index)
170
(declare (type foreign-pointer matrix-pointer)
171
(type fixnum column-index))
172
(%%term-matrix-clear-column matrix-pointer column-index))
174
(defun term-matrix-fill (matrix-pointer element-value)
175
"Sets all elements in the matrix to contain the value zero. Does not
176
change its dimensions."
177
(declare (type foreign-pointer matrix-pointer)
178
(type fixnum element-value))
179
(with-checked-pointer (matrix-pointer)
180
(%%term-matrix-fill matrix-pointer element-value)))
182
(defun term-matrix-fill-row (matrix-pointer row-index element-value)
183
(declare (type foreign-pointer matrix-pointer)
184
(type fixnum row-index element-value))
185
(with-checked-pointer (matrix-pointer)
186
(%%term-matrix-fill-row matrix-pointer row-index element-value)))
188
(defun term-matrix-fill-column (matrix-pointer column-index element-value)
189
(declare (type foreign-pointer matrix-pointer)
190
(type fixnum column-index element-value))
191
(with-checked-pointer (matrix-pointer)
192
(%%term-matrix-fill-column matrix-pointer column-index element-value)))
194
(defun term-matrix-drop-column (matrix-pointer &optional column-index)
195
(declare (type foreign-pointer matrix-pointer)
196
(type (or fixnum null) column-index))
197
(let ((column-index (or column-index
198
(1- (term-matrix-column-count matrix-pointer)))))
199
(with-checked-pointer (matrix-pointer)
200
(%%term-matrix-drop-column matrix-pointer column-index))
203
(defun term-matrix-drop-columns (matrix-pointer column-indexes)
204
(declare (type foreign-pointer matrix-pointer)
205
(type list column-indexes))
206
(with-checked-pointer (matrix-pointer)
207
(let ((column-indexes (sort column-indexes #'>))) ;; descending order
208
(dolist (column-index column-indexes)
209
(%%term-matrix-drop-column matrix-pointer column-index))))
212
(defun term-matrix-append (matrix-pointer other-pointer)
213
(declare (type foreign-pointer matrix-pointer other-pointer))
214
(with-checked-pointers (matrix-pointer other-pointer)
215
(%%term-matrix-append matrix-pointer other-pointer)))
217
(defun term-matrix-append-row (matrix-pointer)
218
(declare (type foreign-pointer matrix-pointer))
219
(%%term-matrix-append-row matrix-pointer))
221
(defun term-matrix-append-rows (matrix-pointer count)
222
(declare (type foreign-pointer matrix-pointer)
224
(let ((new-row-index (term-matrix-row-count matrix-pointer)))
225
(term-matrix-resize matrix-pointer
226
(+ (term-matrix-row-count matrix-pointer) count)
227
(term-matrix-column-count matrix-pointer))
230
(defun term-matrix-append-column (matrix-pointer)
231
(declare (type foreign-pointer matrix-pointer))
232
(%%term-matrix-append-column matrix-pointer))
234
(defun term-matrix-append-columns (matrix-pointer count)
235
(declare (type foreign-pointer matrix-pointer)
237
(let ((new-column-index (term-matrix-column-count matrix-pointer)))
238
(term-matrix-resize matrix-pointer
239
(term-matrix-row-count matrix-pointer)
240
(+ (term-matrix-column-count matrix-pointer) count))
243
(defun term-matrix-resize (matrix-pointer row-count &optional column-count)
244
"Changes the dimensions of the matrix, non-destructively when possible.
245
New elements will be initialized to the value zero."
246
(declare (type foreign-pointer matrix-pointer)
247
(type fixnum row-count)
248
(type (or fixnum null) column-count))
249
(with-checked-pointer (matrix-pointer)
250
(%%term-matrix-resize matrix-pointer row-count
251
(or column-count (term-matrix-column-count matrix-pointer)))))
253
(defun term-matrix-sort (matrix-pointer &optional reversed)
254
"Sorts all rows in the matrix in ascending or descending order."
255
(declare (type foreign-pointer matrix-pointer)
256
(type boolean reversed))
257
(with-checked-pointer (matrix-pointer)
258
(%%term-matrix-sort matrix-pointer reversed)))
260
(defun term-matrix-sort-by (matrix-pointer column-indexes &optional row-count)
261
"Sorts all rows in the matrix by the specified columns."
262
(declare (type foreign-pointer matrix-pointer)
263
(type list column-indexes)
264
(type (or fixnum null) row-count))
265
(when (null column-indexes)
266
(cl:error "column indexes list cannot be empty"))
268
(term-matrix-resize matrix-pointer row-count
269
(term-matrix-column-count matrix-pointer)))
270
(with-checked-pointer (matrix-pointer)
271
(let ((column-count (term-matrix-column-count matrix-pointer))
272
(column-indexes-count (length column-indexes)))
273
(with-foreign-object (column-indexes-array :ulong column-indexes-count)
274
(dotimes (i column-indexes-count)
275
(let ((column-index (nth i column-indexes)))
276
(cond ((< column-index 0)
277
(cl:error "column index out of bounds: ~d < 0"
279
((>= column-index column-count)
280
(cl:error "column index out of bounds: ~d > ~d"
281
column-index (1- column-count))))
282
(setf (mem-aref column-indexes-array :ulong i)
284
(%%term-matrix-sort-by matrix-pointer
289
;;; Term Matrix API: I/O
291
;;; Term Matrix API: Debugging
293
(defun print-term-matrix (matrix-pointer &optional (stream *standard-output*))
294
(declare (type foreign-pointer matrix-pointer))
295
(print-unreadable-object (matrix-pointer stream :type nil :identity t)
296
(format stream "DYDRA-NDK:TERM-MATRIX ~s x ~s"
297
(term-matrix-row-count matrix-pointer)
298
(term-matrix-column-count matrix-pointer))))