Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2012-03-24 05:24:58 +0400
committerCampbell Barton <ideasman42@gmail.com>2012-03-24 05:24:58 +0400
commit3c11379e26b1aad399ecd0afc4d23df12b24f3cd (patch)
tree0a549fceeaf261e9ca0900711e99f35f6b2b0c24 /source/blender/bmesh/intern/bmesh_inline.h
parent0c898514f0b1536e1b335f24a1408f70c0162c48 (diff)
code cleanup: move bmesh inline funcs to headers (avoids compiling the C files).
Diffstat (limited to 'source/blender/bmesh/intern/bmesh_inline.h')
-rw-r--r--source/blender/bmesh/intern/bmesh_inline.h114
1 files changed, 114 insertions, 0 deletions
diff --git a/source/blender/bmesh/intern/bmesh_inline.h b/source/blender/bmesh/intern/bmesh_inline.h
new file mode 100644
index 00000000000..6b529326607
--- /dev/null
+++ b/source/blender/bmesh/intern/bmesh_inline.h
@@ -0,0 +1,114 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Joseph Eagar, Geoffrey Bantle, Campbell Barton
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/bmesh/intern/bmesh_inline.h
+ * \ingroup bmesh
+ *
+ * BM Inline functions.
+ */
+
+#ifndef __BMESH_INLINE_H__
+#define __BMESH_INLINE_H__
+
+/* stuff for dealing with header flags */
+#define BM_elem_flag_test( ele, hflag) _bm_elem_flag_test (&(ele)->head, hflag)
+#define BM_elem_flag_enable( ele, hflag) _bm_elem_flag_enable (&(ele)->head, hflag)
+#define BM_elem_flag_disable(ele, hflag) _bm_elem_flag_disable (&(ele)->head, hflag)
+#define BM_elem_flag_set( ele, hflag, val) _bm_elem_flag_set (&(ele)->head, hflag, val)
+#define BM_elem_flag_toggle( ele, hflag) _bm_elem_flag_toggle (&(ele)->head, hflag)
+#define BM_elem_flag_merge( ele_a, ele_b) _bm_elem_flag_merge (&(ele_a)->head, &(ele_b)->head)
+
+BLI_INLINE char _bm_elem_flag_test(const BMHeader *head, const char hflag)
+{
+ return head->hflag & hflag;
+}
+
+BLI_INLINE void _bm_elem_flag_enable(BMHeader *head, const char hflag)
+{
+ head->hflag |= hflag;
+}
+
+BLI_INLINE void _bm_elem_flag_disable(BMHeader *head, const char hflag)
+{
+ head->hflag &= ~hflag;
+}
+
+BLI_INLINE void _bm_elem_flag_set(BMHeader *head, const char hflag, const int val)
+{
+ if (val) _bm_elem_flag_enable(head, hflag);
+ else _bm_elem_flag_disable(head, hflag);
+}
+
+BLI_INLINE void _bm_elem_flag_toggle(BMHeader *head, const char hflag)
+{
+ head->hflag ^= hflag;
+}
+
+BLI_INLINE void _bm_elem_flag_merge(BMHeader *head_a, BMHeader *head_b)
+{
+ head_a->hflag = head_b->hflag = head_a->hflag | head_b->hflag;
+}
+
+
+/* notes on BM_elem_index_set(...) usage,
+ * Set index is sometimes abused as temp storage, other times we cant be
+ * sure if the index values are valid because certain operations have modified
+ * the mesh structure.
+ *
+ * To set the elements to valid indices 'BM_mesh_elem_index_ensure' should be used
+ * rather then adding inline loops, however there are cases where we still
+ * set the index directly
+ *
+ * In an attempt to manage this, here are 3 tags Im adding to uses of
+ * 'BM_elem_index_set'
+ *
+ * - 'set_inline' -- since the data is already being looped over set to a
+ * valid value inline.
+ *
+ * - 'set_dirty!' -- intentionally sets the index to an invalid value,
+ * flagging 'bm->elem_index_dirty' so we don't use it.
+ *
+ * - 'set_ok' -- this is valid use since the part of the code is low level.
+ *
+ * - 'set_ok_invalid' -- set to -1 on purpose since this should not be
+ * used without a full array re-index, do this on
+ * adding new vert/edge/faces since they may be added at
+ * the end of the array.
+ *
+ * - 'set_loop' -- currently loop index values are not used used much so
+ * assume each case they are dirty.
+ * - campbell */
+
+#define BM_elem_index_get(ele) _bm_elem_index_get(&(ele)->head)
+#define BM_elem_index_set(ele, index) _bm_elem_index_set(&(ele)->head, index)
+
+BLI_INLINE void _bm_elem_index_set(BMHeader *head, const int index)
+{
+ head->index = index;
+}
+
+BLI_INLINE int _bm_elem_index_get(const BMHeader *head)
+{
+ return head->index;
+}
+
+#endif /* __BMESH_INLINE_H__ */