Blender V4.3
bmesh_inline.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
11#pragma once
12
13/* stuff for dealing with header flags */
14#define BM_elem_flag_test(ele, hflag) _bm_elem_flag_test(&(ele)->head, hflag)
15#define BM_elem_flag_test_bool(ele, hflag) _bm_elem_flag_test_bool(&(ele)->head, hflag)
16#define BM_elem_flag_enable(ele, hflag) _bm_elem_flag_enable(&(ele)->head, hflag)
17#define BM_elem_flag_disable(ele, hflag) _bm_elem_flag_disable(&(ele)->head, hflag)
18#define BM_elem_flag_set(ele, hflag, val) _bm_elem_flag_set(&(ele)->head, hflag, val)
19#define BM_elem_flag_toggle(ele, hflag) _bm_elem_flag_toggle(&(ele)->head, hflag)
20#define BM_elem_flag_merge(ele_a, ele_b) _bm_elem_flag_merge(&(ele_a)->head, &(ele_b)->head)
21#define BM_elem_flag_merge_ex(ele_a, ele_b, hflag_and) \
22 _bm_elem_flag_merge_ex(&(ele_a)->head, &(ele_b)->head, hflag_and)
23#define BM_elem_flag_merge_into(ele, ele_a, ele_b) \
24 _bm_elem_flag_merge_into(&(ele)->head, &(ele_a)->head, &(ele_b)->head)
25
27BLI_INLINE char _bm_elem_flag_test(const BMHeader *head, const char hflag)
28{
29 return head->hflag & hflag;
30}
31
33BLI_INLINE bool _bm_elem_flag_test_bool(const BMHeader *head, const char hflag)
34{
35 return (head->hflag & hflag) != 0;
36}
37
38BLI_INLINE void _bm_elem_flag_enable(BMHeader *head, const char hflag)
39{
40 head->hflag |= hflag;
41}
42
43BLI_INLINE void _bm_elem_flag_disable(BMHeader *head, const char hflag)
44{
45 head->hflag &= (char)~hflag;
46}
47
48BLI_INLINE void _bm_elem_flag_set(BMHeader *head, const char hflag, const int val)
49{
50 if (val) {
51 _bm_elem_flag_enable(head, hflag);
52 }
53 else {
54 _bm_elem_flag_disable(head, hflag);
55 }
56}
57
58BLI_INLINE void _bm_elem_flag_toggle(BMHeader *head, const char hflag)
59{
60 head->hflag ^= hflag;
61}
62
64{
65 head_a->hflag = head_b->hflag = head_a->hflag | head_b->hflag;
66}
67
68BLI_INLINE void _bm_elem_flag_merge_ex(BMHeader *head_a, BMHeader *head_b, const char hflag_and)
69{
70 if (((head_a->hflag & head_b->hflag) & hflag_and) == 0) {
71 head_a->hflag &= ~hflag_and;
72 head_b->hflag &= ~hflag_and;
73 }
74 _bm_elem_flag_merge(head_a, head_b);
75}
76
78 const BMHeader *head_a,
79 const BMHeader *head_b)
80{
81 head->hflag = head_a->hflag | head_b->hflag;
82}
83
112#define BM_elem_index_get(ele) _bm_elem_index_get(&(ele)->head)
113#define BM_elem_index_set(ele, index) _bm_elem_index_set(&(ele)->head, index)
114
115BLI_INLINE void _bm_elem_index_set(BMHeader *head, const int index)
116{
117 head->index = index;
118}
119
122{
123 return head->index;
124}
#define ATTR_WARN_UNUSED_RESULT
#define BLI_INLINE
BLI_INLINE void _bm_elem_flag_disable(BMHeader *head, const char hflag)
ATTR_WARN_UNUSED_RESULT BLI_INLINE bool _bm_elem_flag_test_bool(const BMHeader *head, const char hflag)
BLI_INLINE void _bm_elem_flag_set(BMHeader *head, const char hflag, const int val)
ATTR_WARN_UNUSED_RESULT BLI_INLINE int _bm_elem_index_get(const BMHeader *head)
BLI_INLINE void _bm_elem_flag_merge(BMHeader *head_a, BMHeader *head_b)
ATTR_WARN_UNUSED_RESULT BLI_INLINE char _bm_elem_flag_test(const BMHeader *head, const char hflag)
BLI_INLINE void _bm_elem_flag_toggle(BMHeader *head, const char hflag)
BLI_INLINE void _bm_elem_flag_merge_ex(BMHeader *head_a, BMHeader *head_b, const char hflag_and)
BLI_INLINE void _bm_elem_index_set(BMHeader *head, const int index)
BLI_INLINE void _bm_elem_flag_enable(BMHeader *head, const char hflag)
BLI_INLINE void _bm_elem_flag_merge_into(BMHeader *head, const BMHeader *head_a, const BMHeader *head_b)