CCSDS 124.0-B-1 C 1.0.0
CCSDS 124.0-B-1 Lossless Compression
Loading...
Searching...
No Matches
mask.c
Go to the documentation of this file.
1
27#include "ccsds124.h"
28
44 bitvector_t *build,
45 const bitvector_t *input,
46 const bitvector_t *prev_input,
47 int new_mask_flag,
48 size_t t
49) {
50 /* Case 1: t=0 or new_mask_flag set → reset build to 0 */
51 if ((t == 0U) || (new_mask_flag != 0)) {
52 bitvector_zero(build);
53 } else {
54 /* Case 2: Normal operation (t > 0 and new_mask_flag = 0)
55 * Bₜ = (Iₜ XOR Iₜ₋₁) OR Bₜ₋₁
56 */
57
58 /* Create temporary vector for changes */
59 bitvector_t changes;
60 (void)bitvector_init(&changes, build->length);
61
62 /* Calculate changes: Iₜ XOR Iₜ₋₁ */
63 bitvector_xor(&changes, input, prev_input);
64
65 /* Update build: Bₜ = changes OR Bₜ₋₁ */
66 bitvector_or(build, &changes, build);
67 }
68}
69
/* End of Build Vector Functions */
71
86 bitvector_t *mask,
87 const bitvector_t *input,
88 const bitvector_t *prev_input,
89 const bitvector_t *build_prev,
90 int new_mask_flag
91) {
92 /* Create temporary vector for changes */
93 bitvector_t changes;
94 (void)bitvector_init(&changes, mask->length);
95
96 /* Calculate changes: Iₜ XOR Iₜ₋₁ */
97 bitvector_xor(&changes, input, prev_input);
98
99 if (new_mask_flag != 0) {
100 /* Case 1: new_mask_flag set → Mₜ = (Iₜ XOR Iₜ₋₁) OR Bₜ₋₁ */
101 bitvector_or(mask, &changes, build_prev);
102 } else {
103 /* Case 2: Normal operation → Mₜ = (Iₜ XOR Iₜ₋₁) OR Mₜ₋₁ */
104 bitvector_or(mask, &changes, mask);
105 }
106}
107
/* End of Mask Vector Functions */
109
126 bitvector_t *change,
127 const bitvector_t *mask,
128 const bitvector_t *prev_mask,
129 size_t t
130) {
131 (void)t; /* Always use XOR — caller sets prev_mask appropriately */
132 /* Dₜ = Mₜ XOR Mₜ₋₁ */
133 bitvector_xor(change, mask, prev_mask);
134}
135
/* End of Change Vector Functions */
CCSDS 124.0-B-1 Compression Library - Public API.
void bitvector_xor(bitvector_t *result, const bitvector_t *a, const bitvector_t *b)
Bitwise XOR operation.
Definition bitvector.c:93
int bitvector_init(bitvector_t *bv, size_t num_bits)
Initialize a bit vector with specified length.
Definition bitvector.c:44
void bitvector_zero(bitvector_t *bv)
Set all bits to zero.
Definition bitvector.c:65
void bitvector_or(bitvector_t *result, const bitvector_t *a, const bitvector_t *b)
Bitwise OR operation.
Definition bitvector.c:110
void ccsds124_compute_change(bitvector_t *change, const bitvector_t *mask, const bitvector_t *prev_mask, size_t t)
Compute change vector (CCSDS Equation 8).
Definition mask.c:125
void ccsds124_update_build(bitvector_t *build, const bitvector_t *input, const bitvector_t *prev_input, int new_mask_flag, size_t t)
Update build vector (CCSDS Equation 6).
Definition mask.c:43
void ccsds124_update_mask(bitvector_t *mask, const bitvector_t *input, const bitvector_t *prev_input, const bitvector_t *build_prev, int new_mask_flag)
Update mask vector (CCSDS Equation 7).
Definition mask.c:85
Fixed-length bit vector structure.
Definition ccsds124.h:133
size_t length
Definition ccsds124.h:135