CMR  1.3.0
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
9 extern "C" {
10 #endif
11 
16 typedef 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 
35 static 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 
50 static 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 
64 static 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 
78 static 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 
98 static 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