Lines Matching refs:mask
72 MASK_INLINE void snd_mask_none(snd_mask_t *mask)
74 memset(mask, 0, sizeof(*mask));
77 MASK_INLINE void snd_mask_any(snd_mask_t *mask)
79 memset(mask, 0xff, MASK_SIZE * sizeof(uint32_t));
82 MASK_INLINE int snd_mask_empty(const snd_mask_t *mask)
86 if (mask->bits[i])
91 MASK_INLINE int snd_mask_full(const snd_mask_t *mask)
95 if (mask->bits[i] != 0xffffffff)
100 MASK_INLINE unsigned int snd_mask_count(const snd_mask_t *mask)
104 w += hweight32(mask->bits[i]);
108 MASK_INLINE unsigned int snd_mask_min(const snd_mask_t *mask)
111 assert(!snd_mask_empty(mask));
113 if (mask->bits[i])
114 return ffs(mask->bits[i]) - 1 + (i << 5);
119 MASK_INLINE unsigned int snd_mask_max(const snd_mask_t *mask)
122 assert(!snd_mask_empty(mask));
124 if (mask->bits[i])
125 return ld2(mask->bits[i]) + (i << 5);
130 MASK_INLINE void snd_mask_set(snd_mask_t *mask, unsigned int val)
133 mask->bits[MASK_OFS(val)] |= MASK_BIT(val);
136 MASK_INLINE void snd_mask_reset(snd_mask_t *mask, unsigned int val)
139 mask->bits[MASK_OFS(val)] &= ~MASK_BIT(val);
142 MASK_INLINE void snd_mask_set_range(snd_mask_t *mask, unsigned int from, unsigned int to)
147 mask->bits[MASK_OFS(i)] |= MASK_BIT(i);
150 MASK_INLINE void snd_mask_reset_range(snd_mask_t *mask, unsigned int from, unsigned int to)
155 mask->bits[MASK_OFS(i)] &= ~MASK_BIT(i);
158 MASK_INLINE void snd_mask_leave(snd_mask_t *mask, unsigned int val)
162 v = mask->bits[MASK_OFS(val)] & MASK_BIT(val);
163 snd_mask_none(mask);
164 mask->bits[MASK_OFS(val)] = v;
167 MASK_INLINE void snd_mask_intersect(snd_mask_t *mask, const snd_mask_t *v)
171 mask->bits[i] &= v->bits[i];
174 MASK_INLINE void snd_mask_union(snd_mask_t *mask, const snd_mask_t *v)
178 mask->bits[i] |= v->bits[i];
181 MASK_INLINE int snd_mask_eq(const snd_mask_t *mask, const snd_mask_t *v)
183 return ! memcmp(mask, v, MASK_SIZE * 4);
186 MASK_INLINE void snd_mask_copy(snd_mask_t *mask, const snd_mask_t *v)
188 *mask = *v;
191 MASK_INLINE int snd_mask_test(const snd_mask_t *mask, unsigned int val)
194 return mask->bits[MASK_OFS(val)] & MASK_BIT(val);
197 MASK_INLINE int snd_mask_single(const snd_mask_t *mask)
200 assert(!snd_mask_empty(mask));
202 if (! mask->bits[i])
204 if (mask->bits[i] & (mask->bits[i] - 1))
213 MASK_INLINE int snd_mask_refine(snd_mask_t *mask, const snd_mask_t *v)
216 if (snd_mask_empty(mask))
218 snd_mask_copy(&old, mask);
219 snd_mask_intersect(mask, v);
220 if (snd_mask_empty(mask))
222 return !snd_mask_eq(mask, &old);
225 MASK_INLINE int snd_mask_refine_first(snd_mask_t *mask)
227 if (snd_mask_empty(mask))
229 if (snd_mask_single(mask))
231 snd_mask_leave(mask, snd_mask_min(mask));
235 MASK_INLINE int snd_mask_refine_last(snd_mask_t *mask)
237 if (snd_mask_empty(mask))
239 if (snd_mask_single(mask))
241 snd_mask_leave(mask, snd_mask_max(mask));
245 MASK_INLINE int snd_mask_refine_min(snd_mask_t *mask, unsigned int val)
247 if (snd_mask_empty(mask))
249 if (snd_mask_min(mask) >= val)
251 snd_mask_reset_range(mask, 0, val - 1);
252 if (snd_mask_empty(mask))
257 MASK_INLINE int snd_mask_refine_max(snd_mask_t *mask, unsigned int val)
259 if (snd_mask_empty(mask))
261 if (snd_mask_max(mask) <= val)
263 snd_mask_reset_range(mask, val + 1, SND_MASK_MAX);
264 if (snd_mask_empty(mask))
269 MASK_INLINE int snd_mask_refine_set(snd_mask_t *mask, unsigned int val)
272 if (snd_mask_empty(mask))
274 changed = !snd_mask_single(mask);
275 snd_mask_leave(mask, val);
276 if (snd_mask_empty(mask))
281 MASK_INLINE int snd_mask_value(const snd_mask_t *mask)
283 assert(!snd_mask_empty(mask));
284 return snd_mask_min(mask);