VSF Documented
vsf_bitmap.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __VSF_BITMAP_H__
19#define __VSF_BITMAP_H__
20
21/* example:
22
23 // 0. Include vsf header file
24 #include "vsf.h"
25
26 // 1. Declare the bitmap with bit_size
27 // IMPORTANT: DANGER: RED: can not access bits larger than bit_size
28 dcl_vsf_bitmap(xxx_bitmap, 32);
29
30 // 2. Defining bitmap variable
31 static vsf_bitmap(xxxx_bitmap) usr_xxxx_bitmap;
32
33 void user_example_task(void)
34 {
35 ......
36
37 ......
38
39 // 3. Set bit in bitmap
40 vsf_bitmap_set(&usr_xxxx_bitmap, 10);
41 // 4. Clear bit in bitmap
42 vsf_bitmap_clear(&usr_xxxx_bitmap, 12);
43 // 5. TODO: Find First Set/Zero bit in bitmap
44 vsf_bitmap_ffs(&usr_xxxx_bitmap, 32);
45 vsf_bitmap_ffz(&usr_xxxx_bitmap, 32);
46
47 ......
48 }
49 */
50
51/*============================ INCLUDES ======================================*/
52
53#include "../compiler/compiler.h"
54
55#ifdef __cplusplus
56extern "C" {
57#endif
58
59/*============================ MACROS ========================================*/
60
61#define __vsf_bitmap(__name) __name##_bitmap_t
62
63#define __vsf_declare_bitmap_ex(__name, __bit_size) \
64 typedef uintalu_t \
65 __name[((__bit_size) + __optimal_bit_sz - 1) / __optimal_bit_sz];
66
67#define __vsf_declare_bitmap(__name, __bit_size) \
68 __vsf_declare_bitmap_ex(__vsf_bitmap(__name), __bit_size)
69
70
71
72#define __vsf_bitmap_get0(__bitmap_ptr, __bit) \
73 (((uintalu_t *)__bitmap_ptr)[(__bit) / __optimal_bit_sz] & ((uintalu_t)1 << ((__bit) & __optimal_bit_msk)))
74#define __vsf_bitmap_get1(__bitmap_ptr, __bit, __pbit_val) \
75 do { \
76 *(&(__bit_val)) = __vsf_bitmap_get0(__bitmap_ptr, __bit); \
77 } while (0)
78
79#define __vsf_bitmap_set(__bitmap_ptr, __bit) \
80 do { \
81 (__bitmap_ptr)[(__bit) / __optimal_bit_sz] |= \
82 ((uintalu_t)1 << ((__bit) & __optimal_bit_msk)); \
83 } while (0)
84
85#define __vsf_bitmap_clear(__bitmap_ptr, __bit) \
86 do { \
87 (__bitmap_ptr)[(__bit) / __optimal_bit_sz] &= \
88 ~((uintalu_t)1 << ((__bit) & __optimal_bit_msk)); \
89 } while (0)
90
93#define vsf_bitmap(__name) __vsf_bitmap(__name)
94
95#define vsf_declare_bitmap(__name, __bit_size) \
96 __vsf_declare_bitmap(__name, __bit_size)
97
98#define dcl_vsf_bitmap(__name, __bit_size) \
99 vsf_declare_bitmap(__name, __bit_size)
100
101#define declare_vsf_bitmap(__name, __bit_size) \
102 vsf_declare_bitmap(__name, __bit_size)
103
104#define vsf_bitmap_get(__bitmap_ptr, __bit, ...) \
105 __PLOOC_EVAL(__vsf_bitmap_get, __VA_ARGS__)((__bitmap_ptr), (__bit), ##__VA_ARGS__)
106
107#define vsf_bitmap_set(__bitmap_ptr, __bit) \
108 __vsf_bitmap_set((uintalu_t *)(__bitmap_ptr), (__bit))
109
110#define vsf_bitmap_clear(__bitmap_ptr, __bit) \
111 __vsf_bitmap_clear((uintalu_t *)(__bitmap_ptr), (__bit))
112
113#define vsf_bitmap_set_range(__bitmap_ptr, __begin_bit, __end_bit) \
114 __vsf_bitmap_range_assign((uintalu_t *)(__bitmap_ptr), (__begin_bit), (__end_bit), 1)
115
116#define vsf_bitmap_clear_range(__bitmap_ptr, __begin_bit, __end_bit) \
117 __vsf_bitmap_range_assign((uintalu_t *)(__bitmap_ptr), (__begin_bit), (__end_bit), 0)
118
119#define vsf_bitmap_reset(__bitmap_ptr, __bit_size) \
120 memset(__bitmap_ptr, 0, ((uint_fast32_t)__bit_size + 7) >> 3)
121
122#define vsf_bitmap_ffz(__bitmap_ptr, __bit_size) \
123 __vsf_bitmap_ffz((uintalu_t *)(__bitmap_ptr), (__bit_size))
124
125#define vsf_bitmap_ffs(__bitmap_ptr, __bit_size) \
126 __vsf_bitmap_ffs((uintalu_t *)(__bitmap_ptr), (__bit_size))
128
129/*============================ TYPES =========================================*/
130/*============================ GLOBAL VARIABLES ==============================*/
131/*============================ PROTOTYPES ====================================*/
132
133extern void __vsf_bitmap_range_assign(uintalu_t *bitmap_ptr, int_fast32_t begin_bit, int_fast32_t end_bit, int_fast32_t value);
134extern int_fast32_t __vsf_bitmap_ffz(uintalu_t *bitmap_ptr, int_fast32_t bit_size);
135extern int_fast32_t __vsf_bitmap_ffs(uintalu_t *bitmap_ptr, int_fast32_t bit_size);
136
137#ifdef __cplusplus
138}
139#endif
140
141#endif
uint_fast8_t uintalu_t
Definition type.h:88
int int_fast32_t
Definition stdint.h:26
vk_av_control_value_t value
Definition vsf_audio.h:171
int_fast32_t __vsf_bitmap_ffz(uintalu_t *bitmap_ptr, int_fast32_t bit_size)
Definition vsf_bitmap.c:55
int_fast32_t __vsf_bitmap_ffs(uintalu_t *bitmap_ptr, int_fast32_t bit_size)
Definition vsf_bitmap.c:72
void __vsf_bitmap_range_assign(uintalu_t *bitmap_ptr, int_fast32_t begin_bit, int_fast32_t end_bit, int_fast32_t value)
Definition vsf_bitmap.c:36