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