use LIKELY/UNLIKELY macros for operations that run a lot.

This commit is contained in:
2012-02-26 23:59:08 +00:00
parent 3ba37b65a3
commit c62a462997
6 changed files with 49 additions and 30 deletions

View File

@@ -244,7 +244,7 @@ PyDoc_STRVAR(bpy_bm_is_valid_doc,
);
static PyObject *bpy_bm_is_valid_get(BPy_BMGeneric *self)
{
return PyBool_FromLong(self->bm != NULL);
return PyBool_FromLong(BPY_BM_IS_VALID(self));
}
@@ -2453,13 +2453,15 @@ PyObject *BPy_BMElem_CreatePyObject(BMesh *bm, BMHeader *ele)
int bpy_bm_generic_valid_check(BPy_BMGeneric *self)
{
if (self->bm) {
if (LIKELY(self->bm)) {
return 0;
}
PyErr_Format(PyExc_ReferenceError,
"BMesh data of type %.200s has been removed",
Py_TYPE(self)->tp_name);
return -1;
else {
PyErr_Format(PyExc_ReferenceError,
"BMesh data of type %.200s has been removed",
Py_TYPE(self)->tp_name);
return -1;
}
}
void bpy_bm_generic_invalidate(BPy_BMGeneric *self)
@@ -2513,7 +2515,7 @@ void *BPy_BMElem_PySeq_As_Array(BMesh **r_bm, PyObject *seq, Py_ssize_t min, Py_
error_prefix, type->tp_name, Py_TYPE(item)->tp_name);
goto err_cleanup;
}
else if (item->bm == NULL) {
else if (!BPY_BM_IS_VALID(item)) {
PyErr_Format(PyExc_TypeError,
"%s: %d %s has been removed",
error_prefix, i, type->tp_name);

View File

@@ -137,8 +137,10 @@ void *BPy_BMElem_PySeq_As_Array(BMesh **r_bm, PyObject *seq, Py_ssize_t min, Py_
const char do_unique_check, const char do_bm_check,
const char *error_prefix);
#define BPY_BM_CHECK_OBJ(obj) if (bpy_bm_generic_valid_check((BPy_BMGeneric *)obj) == -1) { return NULL; } (void)NULL
#define BPY_BM_CHECK_INT(obj) if (bpy_bm_generic_valid_check((BPy_BMGeneric *)obj) == -1) { return -1; } (void)NULL
#define BPY_BM_CHECK_OBJ(obj) if (UNLIKELY(bpy_bm_generic_valid_check((BPy_BMGeneric *)obj) == -1)) { return NULL; } (void)0
#define BPY_BM_CHECK_INT(obj) if (UNLIKELY(bpy_bm_generic_valid_check((BPy_BMGeneric *)obj) == -1)) { return -1; } (void)0
#define BPY_BM_IS_VALID(obj) (LIKELY((obj)->bm != NULL))
#define BM_ITER_BPY_BM_SEQ(ele, iter, bpy_bmelemseq) \
BM_ITER(ele, iter, (bpy_bmelemseq)->bm, (bpy_bmelemseq)->itype, \