Merge branch 'master' into blender2.8
[blender.git] / source / blender / bmesh / intern / bmesh_structure_inline.h
1 /*
2  * ***** BEGIN GPL LICENSE BLOCK *****
3  *
4  * This program is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU General Public License
6  * as published by the Free Software Foundation; either version 2
7  * of the License, or (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software Foundation,
16  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17  *
18  * ***** END GPL LICENSE BLOCK *****
19  */
20
21 /** \file blender/bmesh/intern/bmesh_structure_inline.h
22  *  \ingroup bmesh
23  *
24  * BMesh inline operator functions.
25  */
26
27 #ifndef __BMESH_STRUCTURE_INLINE_H__
28 #define __BMESH_STRUCTURE_INLINE_H__
29
30 ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1, 2)
31 BLI_INLINE BMDiskLink *bmesh_disk_edge_link_from_vert(const BMEdge *e, const BMVert *v)
32 {
33         BLI_assert(BM_vert_in_edge(e, v));
34         return (BMDiskLink *)&(&e->v1_disk_link)[v == e->v2];
35 }
36
37 /**
38  * \brief Next Disk Edge
39  *
40  * Find the next edge in a disk cycle
41  *
42  * \return Pointer to the next edge in the disk cycle for the vertex v.
43  */
44 ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
45 BLI_INLINE BMEdge *bmesh_disk_edge_next_safe(const BMEdge *e, const BMVert *v)
46 {
47         if (v == e->v1)
48                 return e->v1_disk_link.next;
49         if (v == e->v2)
50                 return e->v2_disk_link.next;
51         return NULL;
52 }
53
54 ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
55 BLI_INLINE BMEdge *bmesh_disk_edge_prev_safe(const BMEdge *e, const BMVert *v)
56 {
57         if (v == e->v1)
58                 return e->v1_disk_link.prev;
59         if (v == e->v2)
60                 return e->v2_disk_link.prev;
61         return NULL;
62 }
63
64 ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1, 2)
65 BLI_INLINE BMEdge *bmesh_disk_edge_next(const BMEdge *e, const BMVert *v)
66 {
67         return BM_DISK_EDGE_NEXT(e, v);
68 }
69
70 ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1, 2)
71 BLI_INLINE BMEdge *bmesh_disk_edge_prev(const BMEdge *e, const BMVert *v)
72 {
73         return BM_DISK_EDGE_PREV(e, v);
74 }
75
76 #endif /* __BMESH_STRUCTURE_INLINE_H__ */