Skip to content

Commit 21ae7b3

Browse files
authored
Merge pull request #614 from JohnSanpe/refactor-bitflags
refactor bitflags: unified structure and variable macros
2 parents 2f3dad1 + 7302980 commit 21ae7b3

File tree

11 files changed

+71
-182
lines changed

11 files changed

+71
-182
lines changed

include/bfdev/bitflags.h

Lines changed: 24 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -11,167 +11,60 @@
1111

1212
BFDEV_BEGIN_DECLS
1313

14-
#define BFDEV_BITFLAGS_STRUCT(name, type, member) \
14+
#define BFDEV_GENERIC_BITFLAGS(name, func, type, member, index) \
1515
static __bfdev_always_inline void \
16-
name##_##member##_clr(type *ptr, unsigned int bit) \
16+
name##_clr(type *ptr) \
1717
{ \
18-
bfdev_bit_clr(&ptr->member, bit); \
18+
bfdev_bit##func##_clr(member, index); \
1919
} \
2020
\
2121
static __bfdev_always_inline void \
22-
name##_##member##_set(type *ptr, unsigned int bit) \
22+
name##_set(type *ptr) \
2323
{ \
24-
bfdev_bit_set(&ptr->member, bit); \
24+
bfdev_bit##func##_set(member, index); \
2525
} \
2626
\
2727
static __bfdev_always_inline void \
28-
name##_##member##_flip(type *ptr, unsigned int bit) \
28+
name##_flip(type *ptr) \
2929
{ \
30-
bfdev_bit_flip(&ptr->member, bit); \
30+
bfdev_bit##func##_flip(member, index); \
3131
} \
3232
\
3333
static __bfdev_always_inline bool \
34-
name##_##member##_test(const type *ptr, unsigned int bit) \
34+
name##_test(const type *ptr) \
3535
{ \
36-
return bfdev_bit_test(&ptr->member, bit); \
36+
return bfdev_bit##func##_test(member, index); \
3737
} \
3838
\
3939
static __bfdev_always_inline bool \
40-
name##_##member##_test_clr(type *ptr, unsigned int bit) \
40+
name##_test_clr(type *ptr) \
4141
{ \
42-
return bfdev_bit_test_clr(&ptr->member, bit); \
42+
return bfdev_bit##func##_test_clr(member, index); \
4343
} \
4444
\
4545
static __bfdev_always_inline bool \
46-
name##_##member##_test_set(type *ptr, unsigned int bit) \
46+
name##_test_set(type *ptr) \
4747
{ \
48-
return bfdev_bit_test_set(&ptr->member, bit); \
48+
return bfdev_bit##func##_test_set(member, index); \
4949
} \
5050
\
5151
static __bfdev_always_inline bool \
52-
name##_##member##_test_flip(type *ptr, unsigned int bit) \
52+
name##_test_flip(type *ptr) \
5353
{ \
54-
return bfdev_bit_test_flip(&ptr->member, bit); \
54+
return bfdev_bit##func##_test_flip(member, index); \
5555
}
5656

57-
#define BFDEV_BITFLAGS_STRUCT_ATOMIC(name, type, member) \
58-
static __bfdev_always_inline void \
59-
name##_##member##_atomic_clr(type *ptr, unsigned int bit) \
60-
{ \
61-
bfdev_bit_atomic_clr(&ptr->member, bit); \
62-
} \
63-
\
64-
static __bfdev_always_inline void \
65-
name##_##member##_atomic_set(type *ptr, unsigned int bit) \
66-
{ \
67-
bfdev_bit_atomic_set(&ptr->member, bit); \
68-
} \
69-
\
70-
static __bfdev_always_inline void \
71-
name##_##member##_atomic_flip(type *ptr, unsigned int bit) \
72-
{ \
73-
bfdev_bit_atomic_flip(&ptr->member, bit); \
74-
} \
75-
\
76-
static __bfdev_always_inline bool \
77-
name##_##member##_atomic_test(const type *ptr, unsigned int bit) \
78-
{ \
79-
return bfdev_bit_atomic_test(&ptr->member, bit); \
80-
} \
81-
\
82-
static __bfdev_always_inline bool \
83-
name##_##member##_atomic_test_clr(type *ptr, unsigned int bit) \
84-
{ \
85-
return bfdev_bit_atomic_test_clr(&ptr->member, bit); \
86-
} \
87-
\
88-
static __bfdev_always_inline bool \
89-
name##_##member##_atomic_test_set(type *ptr, unsigned int bit) \
90-
{ \
91-
return bfdev_bit_atomic_test_set(&ptr->member, bit); \
92-
} \
93-
\
94-
static __bfdev_always_inline bool \
95-
name##_##member##_atomic_test_flip(type *ptr, unsigned int bit) \
96-
{ \
97-
return bfdev_bit_atomic_test_flip(&ptr->member, bit); \
98-
}
57+
#define BFDEV_BITFLAGS(name, index) \
58+
BFDEV_GENERIC_BITFLAGS(name, /* None */, unsigned long, ptr, index)
9959

100-
#define BFDEV_BITFLAGS_STRUCT_FLAG(name, type, member, \
101-
flag, index) \
102-
static __bfdev_always_inline void \
103-
name##_clr_##flag(type *ptr) \
104-
{ \
105-
name##_##member##_clr(ptr, index); \
106-
} \
107-
\
108-
static __bfdev_always_inline void \
109-
name##_set_##flag(type *ptr) \
110-
{ \
111-
name##_##member##_set(ptr, index); \
112-
} \
113-
\
114-
static __bfdev_always_inline bool \
115-
name##_test_##flag(const type *ptr) \
116-
{ \
117-
return name##_##member##_test(ptr, index); \
118-
} \
119-
\
120-
static __bfdev_always_inline bool \
121-
name##_test_clr_##flag(type *ptr) \
122-
{ \
123-
return name##_##member##_test_clr(ptr, index); \
124-
} \
125-
\
126-
static __bfdev_always_inline bool \
127-
name##_test_set_##flag(type *ptr) \
128-
{ \
129-
return name##_##member##_test_set(ptr, index); \
130-
} \
131-
\
132-
static __bfdev_always_inline bool \
133-
name##_test_flip_##flag(type *ptr) \
134-
{ \
135-
return name##_##member##_test_flip(ptr, index); \
136-
}
60+
#define BFDEV_BITFLAGS_ATOMIC(name, index) \
61+
BFDEV_GENERIC_BITFLAGS(name, _atomic, unsigned long, ptr, index)
13762

138-
#define BFDEV_BITFLAGS_STRUCT_ATOMIC_FLAG(name, type, member, \
139-
flag, index) \
140-
static __bfdev_always_inline void \
141-
name##_atomic_clr_##flag(type *ptr) \
142-
{ \
143-
name##_##member##_atomic_clr(ptr, index); \
144-
} \
145-
\
146-
static __bfdev_always_inline void \
147-
name##_atomic_set_##flag(type *ptr) \
148-
{ \
149-
name##_##member##_atomic_set(ptr, index); \
150-
} \
151-
\
152-
static __bfdev_always_inline bool \
153-
name##_atomic_test_##flag(const type *ptr) \
154-
{ \
155-
return name##_##member##_atomic_test(ptr, index); \
156-
} \
157-
\
158-
static __bfdev_always_inline bool \
159-
name##_atomic_test_clr_##flag(type *ptr) \
160-
{ \
161-
return name##_##member##_atomic_test_clr(ptr, index); \
162-
} \
163-
\
164-
static __bfdev_always_inline bool \
165-
name##_atomic_test_set_##flag(type *ptr) \
166-
{ \
167-
return name##_##member##_atomic_test_set(ptr, index); \
168-
} \
169-
\
170-
static __bfdev_always_inline bool \
171-
name##_atomic_test_flip_##flag(type *ptr) \
172-
{ \
173-
return name##_##member##_atomic_test_flip(ptr, index); \
174-
}
63+
#define BFDEV_BITFLAGS_STRUCT(name, type, member, index) \
64+
BFDEV_GENERIC_BITFLAGS(name, /* None */, type, &ptr->member, index)
65+
66+
#define BFDEV_BITFLAGS_STRUCT_ATOMIC(name, type, member, index) \
67+
BFDEV_GENERIC_BITFLAGS(name, _atomic, type, &ptr->member, index)
17568

17669
BFDEV_END_DECLS
17770

include/bfdev/cache.h

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -99,21 +99,26 @@ struct bfdev_cache_algo {
9999
void (*destroy)(bfdev_cache_head_t *head);
100100
};
101101

102-
BFDEV_BITFLAGS_STRUCT(
103-
bfdev_cache,
104-
bfdev_cache_head_t, flags
102+
BFDEV_BITFLAGS(
103+
bfdev_cache_change,
104+
__BFDEV_CACHE_CHANGE
105+
);
106+
107+
BFDEV_BITFLAGS(
108+
bfdev_cache_uncommitted,
109+
__BFDEV_CACHE_UNCOMMITTED
105110
);
106111

107-
BFDEV_BITFLAGS_STRUCT_FLAG(
108-
bfdev_cache,
112+
BFDEV_BITFLAGS_STRUCT(
113+
bfdev_cache_dirty,
109114
bfdev_cache_head_t, flags,
110-
dirty, __BFDEV_CACHE_DIRTY
115+
__BFDEV_CACHE_DIRTY
111116
);
112117

113-
BFDEV_BITFLAGS_STRUCT_FLAG(
114-
bfdev_cache,
118+
BFDEV_BITFLAGS_STRUCT(
119+
bfdev_cache_starving,
115120
bfdev_cache_head_t, flags,
116-
starving, __BFDEV_CACHE_STARVING
121+
__BFDEV_CACHE_STARVING
117122
);
118123

119124
extern bfdev_cache_node_t *
@@ -161,7 +166,8 @@ bfdev_cache_try_get(bfdev_cache_head_t *head, unsigned long tag)
161166
static inline bfdev_cache_node_t *
162167
bfdev_cache_cumulative(bfdev_cache_head_t *head, unsigned long tag)
163168
{
164-
return bfdev_cache_obtain(head, tag, BFDEV_CACHE_CHANGE | BFDEV_CACHE_UNCOMMITTED);
169+
return bfdev_cache_obtain(head, tag, BFDEV_CACHE_CHANGE |
170+
BFDEV_CACHE_UNCOMMITTED);
165171
}
166172

167173
extern int

include/bfdev/log.h

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -65,20 +65,15 @@ struct bfdev_log_message {
6565
bfdev_log_t name = BFDEV_LOG_INIT(&name, default, record, flags, write, pdata)
6666

6767
BFDEV_BITFLAGS_STRUCT(
68-
bfdev_log,
69-
struct bfdev_log, flags
70-
)
71-
72-
BFDEV_BITFLAGS_STRUCT_FLAG(
73-
bfdev_log,
68+
bfdev_log_color,
7469
struct bfdev_log, flags,
75-
color, __BFDEV_LOG_COLOR
70+
__BFDEV_LOG_COLOR
7671
)
7772

78-
BFDEV_BITFLAGS_STRUCT_FLAG(
79-
bfdev_log,
73+
BFDEV_BITFLAGS_STRUCT(
74+
bfdev_log_level,
8075
struct bfdev_log, flags,
81-
level, __BFDEV_LOG_LEVEL
76+
__BFDEV_LOG_LEVEL
8277
)
8378

8479
extern bfdev_log_t

include/bfdev/notifier.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ enum bfdev_notifier_ret {
2323
__BFDEV_NOTIFI_RET_REMOVE = 0,
2424
__BFDEV_NOTIFI_RET_STOP,
2525

26-
BFDEV_NOTIFI_RET_DONE = 0,
26+
BFDEV_NOTIFI_RET_DONE = 0,
2727
BFDEV_NOTIFI_RET_REMOVE = BFDEV_BIT(__BFDEV_NOTIFI_RET_REMOVE),
28-
BFDEV_NOTIFI_RET_STOP = BFDEV_BIT(__BFDEV_NOTIFI_RET_STOP),
28+
BFDEV_NOTIFI_RET_STOP = BFDEV_BIT(__BFDEV_NOTIFI_RET_STOP),
2929
};
3030

3131
/**

include/bfdev/textsearch.h

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -129,14 +129,9 @@ struct bfdev_ts_algorithm {
129129
};
130130

131131
BFDEV_BITFLAGS_STRUCT(
132-
bfdev_ts,
133-
bfdev_ts_context_t, flags
134-
)
135-
136-
BFDEV_BITFLAGS_STRUCT_FLAG(
137-
bfdev_ts,
132+
bfdev_ts_igcase,
138133
bfdev_ts_context_t, flags,
139-
igcase, __BFDEV_TS_IGCASE
134+
__BFDEV_TS_IGCASE
140135
)
141136

142137
/**

src/cache/cache.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ bfdev_cache_obtain(bfdev_cache_head_t *head, unsigned long tag,
111111
if (bfdev_unlikely(tag == BFDEV_CACHE_FREE_TAG))
112112
return NULL;
113113

114-
if (bfdev_unlikely(bfdev_cache_test_starving(head))) {
114+
if (bfdev_unlikely(bfdev_cache_starving_test(head))) {
115115
head->starve++;
116116
return NULL;
117117
}
@@ -121,7 +121,7 @@ bfdev_cache_obtain(bfdev_cache_head_t *head, unsigned long tag,
121121
head->hits++;
122122

123123
if (node->status == BFDEV_CACHE_PENDING) {
124-
if (!(flags & BFDEV_CACHE_UNCOMMITTED))
124+
if (!bfdev_cache_uncommitted_test(&flags))
125125
return NULL;
126126

127127
node->refcnt++;
@@ -145,20 +145,20 @@ bfdev_cache_obtain(bfdev_cache_head_t *head, unsigned long tag,
145145
}
146146

147147
head->misses++;
148-
if (!(flags & BFDEV_CACHE_CHANGE))
148+
if (!bfdev_cache_change_test(&flags))
149149
return NULL;
150150

151-
bfdev_cache_set_dirty(head);
151+
bfdev_cache_dirty_set(head);
152152
if (bfdev_unlikely(cache_starving(head))) {
153-
bfdev_cache_set_starving(head);
153+
bfdev_cache_starving_set(head);
154154
return NULL;
155155
}
156156

157157
if (bfdev_unlikely(head->pending >= head->maxpend))
158158
return NULL;
159159

160160
node = cache_obtain(head, tag);
161-
bfdev_cache_clr_starving(head);
161+
bfdev_cache_starving_clr(head);
162162

163163
node->refcnt++;
164164
head->pending++;
@@ -174,7 +174,7 @@ bfdev_cache_put(bfdev_cache_head_t *head, bfdev_cache_node_t *node)
174174
return -BFDEV_EINVAL;
175175

176176
if (!--node->refcnt) {
177-
bfdev_cache_clr_starving(head);
177+
bfdev_cache_starving_clr(head);
178178
bfdev_list_del_init(&node->list);
179179

180180
head->algo->put(head, node);

src/log/color.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ level_color[] = {
3232
static void
3333
log_color_prefix(bfdev_log_t *log, bfdev_log_message_t *msg)
3434
{
35-
if (!bfdev_log_test_color(log))
35+
if (!bfdev_log_color_test(log))
3636
return;
3737

3838
log_scnprintf(msg, "\e[%dm", level_color[msg->level]);
@@ -41,7 +41,7 @@ log_color_prefix(bfdev_log_t *log, bfdev_log_message_t *msg)
4141
static void
4242
log_color_suffix(bfdev_log_t *log, bfdev_log_message_t *msg)
4343
{
44-
if (!bfdev_log_test_color(log))
44+
if (!bfdev_log_color_test(log))
4545
return;
4646

4747
log_scnprintf(msg, "\e[0m");

src/log/level.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ level_name[] = {
1919
static void
2020
log_level(bfdev_log_t *log, bfdev_log_message_t *msg)
2121
{
22-
if (!bfdev_log_test_level(log))
22+
if (!bfdev_log_level_test(log))
2323
return;
2424

2525
log_scnprintf(msg, "[%s] ", level_name[msg->level]);

0 commit comments

Comments
 (0)