diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-03-24 05:24:58 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-03-24 05:24:58 +0400 |
commit | 3c11379e26b1aad399ecd0afc4d23df12b24f3cd (patch) | |
tree | 0a549fceeaf261e9ca0900711e99f35f6b2b0c24 /source/blender/bmesh/intern/bmesh_operator_api_inline.h | |
parent | 0c898514f0b1536e1b335f24a1408f70c0162c48 (diff) |
code cleanup: move bmesh inline funcs to headers (avoids compiling the C files).
Diffstat (limited to 'source/blender/bmesh/intern/bmesh_operator_api_inline.h')
-rw-r--r-- | source/blender/bmesh/intern/bmesh_operator_api_inline.h | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/source/blender/bmesh/intern/bmesh_operator_api_inline.h b/source/blender/bmesh/intern/bmesh_operator_api_inline.h new file mode 100644 index 00000000000..268736cfe0e --- /dev/null +++ b/source/blender/bmesh/intern/bmesh_operator_api_inline.h @@ -0,0 +1,146 @@ +/* + * ***** 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_operator_api_inline.h + * \ingroup bmesh + * + * BMesh inline operator functions. + */ + +#ifndef __BMESH_OPERATOR_API_INLINE_H__ +#define __BMESH_OPERATOR_API_INLINE_H__ + +/* tool flag API. never, ever ever should tool code put junk in + * header flags (element->head.flag), nor should they use + * element->head.eflag1/eflag2. instead, use this api to set + * flags. + * + * if you need to store a value per element, use a + * ghash or a mapping slot to do it. */ + +/* flags 15 and 16 (1 << 14 and 1 << 15) are reserved for bmesh api use */ +BLI_INLINE short _bmo_elem_flag_test(BMesh *bm, BMFlagLayer *oflags, const short oflag) +{ + return oflags[bm->stackdepth - 1].f & oflag; +} + +BLI_INLINE void _bmo_elem_flag_enable(BMesh *bm, BMFlagLayer *oflags, const short oflag) +{ + oflags[bm->stackdepth - 1].f |= oflag; +} + +BLI_INLINE void _bmo_elem_flag_disable(BMesh *bm, BMFlagLayer *oflags, const short oflag) +{ + oflags[bm->stackdepth - 1].f &= ~oflag; +} + +BLI_INLINE void _bmo_elem_flag_set(BMesh *bm, BMFlagLayer *oflags, const short oflag, int val) +{ + if (val) oflags[bm->stackdepth - 1].f |= oflag; + else oflags[bm->stackdepth - 1].f &= ~oflag; +} + +BLI_INLINE void _bmo_elem_flag_toggle(BMesh *bm, BMFlagLayer *oflags, const short oflag) +{ + oflags[bm->stackdepth - 1].f ^= oflag; +} + +BLI_INLINE void BMO_slot_map_int_insert(BMesh *bm, BMOperator *op, const char *slotname, + void *element, int val) +{ + BMO_slot_map_insert(bm, op, slotname, element, &val, sizeof(int)); +} + +BLI_INLINE void BMO_slot_map_float_insert(BMesh *bm, BMOperator *op, const char *slotname, + void *element, float val) +{ + BMO_slot_map_insert(bm, op, slotname, element, &val, sizeof(float)); +} + + +/* pointer versions of BMO_slot_map_float_get and BMO_slot_map_float_insert. + * + * do NOT use these for non-operator-api-allocated memory! instead + * use BMO_slot_map_data_get and BMO_slot_map_insert, which copies the data. */ + +BLI_INLINE void BMO_slot_map_ptr_insert(BMesh *bm, BMOperator *op, const char *slotname, + void *element, void *val) +{ + BMO_slot_map_insert(bm, op, slotname, element, &val, sizeof(void *)); +} + +BLI_INLINE int BMO_slot_map_contains(BMesh *UNUSED(bm), BMOperator *op, const char *slotname, void *element) +{ + BMOpSlot *slot = BMO_slot_get(op, slotname); + BLI_assert(slot->slottype == BMO_OP_SLOT_MAPPING); + + /* sanity check */ + if (!slot->data.ghash) return 0; + + return BLI_ghash_haskey(slot->data.ghash, element); +} + +BLI_INLINE void *BMO_slot_map_data_get(BMesh *UNUSED(bm), BMOperator *op, const char *slotname, + void *element) +{ + BMOElemMapping *mapping; + BMOpSlot *slot = BMO_slot_get(op, slotname); + BLI_assert(slot->slottype == BMO_OP_SLOT_MAPPING); + + /* sanity check */ + if (!slot->data.ghash) return NULL; + + mapping = (BMOElemMapping *)BLI_ghash_lookup(slot->data.ghash, element); + + if (!mapping) return NULL; + + return mapping + 1; +} + +BLI_INLINE float BMO_slot_map_float_get(BMesh *bm, BMOperator *op, const char *slotname, + void *element) +{ + float *val = (float *) BMO_slot_map_data_get(bm, op, slotname, element); + if (val) return *val; + + return 0.0f; +} + +BLI_INLINE int BMO_slot_map_int_get(BMesh *bm, BMOperator *op, const char *slotname, + void *element) +{ + int *val = (int *) BMO_slot_map_data_get(bm, op, slotname, element); + if (val) return *val; + + return 0; +} + +BLI_INLINE void *BMO_slot_map_ptr_get(BMesh *bm, BMOperator *op, const char *slotname, + void *element) +{ + void **val = (void **) BMO_slot_map_data_get(bm, op, slotname, element); + if (val) return *val; + + return NULL; +} + +#endif /* __BMESH_OPERATOR_API_INLINE_H__ */ |