CMR  1.3.0
Loading...
Searching...
No Matches
densematrix.h
Go to the documentation of this file.
1#ifndef CMR_DENSEMATRIX_INTERNAL_H
2#define CMR_DENSEMATRIX_INTERNAL_H
3
4#include "env_internal.h"
5
6#include <cmr/matrix.h>
7
8#ifdef __cplusplus
9extern "C" {
10#endif
11
16typedef struct
17{
18 size_t* data;
19 size_t numRows;
20 size_t numColumns;
22
24 CMR* cmr,
25 size_t numRows,
26 size_t numColumns,
27 DenseBinaryMatrix** presult
28);
29
31 CMR* cmr,
32 DenseBinaryMatrix** pmatrix
33);
34
35static inline
37 DenseBinaryMatrix* matrix,
38 size_t row,
39 size_t column
40)
41{
42 size_t index = row * matrix->numColumns + column;
43 size_t block = matrix->data[index / (8 * sizeof(size_t))];
44// CMRdbgMsg(8, "CMRdensebinmatrixGet(%zu,%zu) uses index %zu in block %zu at %zu -> %d\n", row, column, index,
45// index / (8 * sizeof(size_t)), (index % (8 * sizeof(size_t))),
46// (block & (1UL << (index % (8 * sizeof(size_t))))) ? 1 : 0);
47 return block & (1UL << (index % (8 * sizeof(size_t))));
48}
49
50static inline
52 DenseBinaryMatrix* matrix,
53 size_t row,
54 size_t column
55)
56{
57 size_t index = row * matrix->numColumns + column;
58// CMRdbgMsg(8, "CMRdensebinmatrixSet0(%zu,%zu) uses index %zu in block %zu at %zu.\n", row, column, index,
59// index / (8 * sizeof(size_t)), (index % (8 * sizeof(size_t))));
60 size_t* pblock = &matrix->data[index / (8 * sizeof(size_t))];
61 *pblock &= ~(1UL << (index % (8 * sizeof(size_t))));
62}
63
64static inline
66 DenseBinaryMatrix* matrix,
67 size_t row,
68 size_t column
69)
70{
71 size_t index = row * matrix->numColumns + column;
72// CMRdbgMsg(8, "CMRdensebinmatrixSet1(%zu,%zu) uses index %zu in block %zu at %zu.\n", row, column, index,
73// index / (8 * sizeof(size_t)), (index % (8 * sizeof(size_t))));
74 size_t* pblock = &matrix->data[index / (8 * sizeof(size_t))];
75 *pblock |= (1UL << (index % (8 * sizeof(size_t))));
76}
77
78static inline
80 DenseBinaryMatrix* matrix,
81 size_t row,
82 size_t column,
83 bool value
84)
85{
86 size_t index = row * matrix->numColumns + column;
87 CMRdbgMsg(8, "CMRdensebinmatrixSet(%zu,%zu,%d) uses index %zu in block %zu at %zu.\n", row, column, value ? 1 : 0, index,
88 index / (8 * sizeof(size_t)), (index % (8 * sizeof(size_t))));
89 size_t* pblock = &matrix->data[index / (8 * sizeof(size_t))];
90 size_t mask = (1UL << (index % (8 * sizeof(size_t))));
91 if (value)
92 *pblock |= mask;
93 else
94 *pblock &= ~mask;
95}
96
97
98static inline
100 DenseBinaryMatrix* matrix,
101 size_t row,
102 size_t column
103)
104{
105 size_t index = row * matrix->numColumns + column;
106// CMRdbgMsg(8, "CMRdensebinmatrixFlip(%zu,%zu) uses index %zu in block %zu at %zu.\n", row, column, index,
107// index / (8 * sizeof(size_t)), (index % (8 * sizeof(size_t))));
108 size_t* pblock = &matrix->data[index / (8 * sizeof(size_t))];
109 size_t mask = (1UL << (index % (8 * sizeof(size_t))));
110 if (*pblock & mask)
111 *pblock &= ~mask;
112 else
113 *pblock |= mask;
114}
115
116#ifdef __cplusplus
117}
118#endif
119
120#endif /* CMR_LISTMATRIX_INTERNAL_H */
static bool CMRdensebinmatrixGet(DenseBinaryMatrix *matrix, size_t row, size_t column)
Definition densematrix.h:36
static void CMRdensebinmatrixFlip(DenseBinaryMatrix *matrix, size_t row, size_t column)
Definition densematrix.h:99
CMR_ERROR CMRdensebinmatrixCreate(CMR *cmr, size_t numRows, size_t numColumns, DenseBinaryMatrix **presult)
Definition densematrix.c:10
static void CMRdensebinmatrixSet0(DenseBinaryMatrix *matrix, size_t row, size_t column)
Definition densematrix.h:51
CMR_ERROR CMRdensebinmatrixFree(CMR *cmr, DenseBinaryMatrix **pmatrix)
Definition densematrix.c:30
static void CMRdensebinmatrixSet1(DenseBinaryMatrix *matrix, size_t row, size_t column)
Definition densematrix.h:65
static void CMRdensebinmatrixSet(DenseBinaryMatrix *matrix, size_t row, size_t column, bool value)
Definition densematrix.h:79
CMR_ERROR
Type for return codes of library functions.
Definition env.h:32
static void CMRdbgMsg(int indent, const char *format,...)
Definition env_internal.h:28
Functionality for sparse matrices.
Definition env_internal.h:45
Dense matrix.
Definition densematrix.h:17
size_t numRows
Definition densematrix.h:19
size_t * data
Definition densematrix.h:18
size_t numColumns
Definition densematrix.h:20