#include <dk.h>
#include <dktypes.h>
Go to the source code of this file.
Functions | |
dk_bitfield_t * | dkbf_open (size_t n) |
Create a bit field. | |
void | dkbf_close (dk_bitfield_t *f) |
Close bit field created by dkbf_open() and release the memory. | |
void | dkbf_set (dk_bitfield_t *f, size_t n, int v) |
Set or reset a bit. | |
int | dkbf_get (dk_bitfield_t *f, size_t n) |
Get bit value. | |
void | dkbf_reset (dk_bitfield_t *f) |
Reset a bit field (reset all bits). | |
dk_bitmatrix_t * | dkbf_matrix_open (size_t c, size_t r) |
Create a bit matrix. | |
void | dkbf_matrix_close (dk_bitmatrix_t *m) |
Destroy bit matrix created by dkbf_matrix_open() and release memory. | |
void | dkbf_matrix_set (dk_bitmatrix_t *m, size_t x, size_t y, int v) |
Set or reset bit in matrix. | |
int | dkbf_matrix_get (dk_bitmatrix_t *m, size_t x, size_t y) |
Get bit from matrix. | |
void | dkbf_matrix_reset (dk_bitmatrix_t *m) |
Reset all bits in the matrix. | |
int | dkbf_matrix_expand (dk_bitmatrix_t *m) |
Expand a bit matrix. |
Example 1: Setting and requesting bits in a field.
int i; dk_bitfield_t *bf; bf = dkbf_open(3210); if(bf) { for(i = 0; i < 3210; i++) { if(i % 2) { dkbf_set(bf, i); } } for(i = 0; i < 3210; i++) { if(dkbf_get(bf, i)) { printf("Bit %04d is set.\n"); } else { printf("Bit %04d is not set.\n"); } } dkbf_close(bf); }
Example 2: Given is a graph with 4 nodes A, B, C and D. There is a directed edge from A to B, and a directed edge from B to C. Is there a path from A to C and a path from A to D?
dk_bitmatrix_t *bm; bm = dkbf_matrix_open(4, 4); if(bm) { dkbf_matrix_set(0, 1); // A (0) to B (1) dkbf_matrix_set(1, 2); // B (1) to C (2) dkbf_matrix_expand(bm); if(dkbf_matrix_get(0, 2)) { printf("There is a directed path from A to C.\n"); } else { printf("There is no directed path from A to C.\n"); } if(dkbf_matrix_get(0, 3)) { printf("There is a directed path from A to D.\n"); } else { printf("There is no directed path from A to D.\n"); } dkbf_matrix_close(bm); }
void dkbf_close | ( | dk_bitfield_t * | f | ) |
Close bit field created by dkbf_open() and release the memory.
f | Pointer to bit field structure. |
int dkbf_get | ( | dk_bitfield_t * | f, | |
size_t | n | |||
) |
Get bit value.
f | Pointer to bit field structure. | |
n | Number of the bit to get. |
void dkbf_matrix_close | ( | dk_bitmatrix_t * | m | ) |
Destroy bit matrix created by dkbf_matrix_open() and release memory.
m | Pointer to bit matrix structure to close. |
int dkbf_matrix_expand | ( | dk_bitmatrix_t * | m | ) |
Expand a bit matrix.
To find indirect followers in a graph containing N nodes create a square bit matrix having N rows and N columns. For each directed edge from node i to node j set the bit in column i, row j by calling dkbf_matrix_set(m, j, i, 1); After calling dkbf_matrix_expand(m); you can use dkbf_matrix_get(m, v, u) to check whether or not there is any (direct or indirect) connection from node u to node v.
m | Pointer to bit matrix structure. |
int dkbf_matrix_get | ( | dk_bitmatrix_t * | m, | |
size_t | x, | |||
size_t | y | |||
) |
Get bit from matrix.
m | Pointer to bit matrix structure. | |
x | X-position (column) of the bit. | |
y | Y-position (row) of the bit. |
dk_bitmatrix_t* dkbf_matrix_open | ( | size_t | c, | |
size_t | r | |||
) |
Create a bit matrix.
The bit matrix is created in dynamically allocated memory. Call dkbf_matrix_close() to destroy the bit matrix and release the memory after usage.
c | Number of columns in the matrix. | |
r | Number of rows in the bit matrix. |
void dkbf_matrix_reset | ( | dk_bitmatrix_t * | m | ) |
Reset all bits in the matrix.
m | Pointer to bit matrix structure. |
void dkbf_matrix_set | ( | dk_bitmatrix_t * | m, | |
size_t | x, | |||
size_t | y, | |||
int | v | |||
) |
Set or reset bit in matrix.
m | Pointer to bit matrix structure. | |
x | X-position (column) of the bit. | |
y | Y-position (row) of the bit. | |
v | Flag to indicate whether to set (v!=0) or reset (v=0) the bit. |
dk_bitfield_t* dkbf_open | ( | size_t | n | ) |
Create a bit field.
The bit field structure is created in dynamically allocated memory. Use dkbf_close() to close the bit field and release the memory after usage.
n | Number of bits in the field. |
void dkbf_reset | ( | dk_bitfield_t * | f | ) |
Reset a bit field (reset all bits).
f | Pointer to bit field structure. |
void dkbf_set | ( | dk_bitfield_t * | f, | |
size_t | n, | |||
int | v | |||
) |
Set or reset a bit.
f | Pointer to bit field structure. | |
n | Number of bit to set/reset. | |
v | Flag to set the bit (v!=0) or reset the bit (v=0). |