From 5afa29af59158adf4cfb7bef87405d310575e6c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Zurcher?= Date: Fri, 9 Aug 2013 15:58:55 +0200 Subject: [PATCH] eo: slight speed up --- src/lib/eo/eo.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/lib/eo/eo.c b/src/lib/eo/eo.c index 2852cce20f..b1f2d15d2e 100644 --- a/src/lib/eo/eo.c +++ b/src/lib/eo/eo.c @@ -36,8 +36,9 @@ static const Eo_Op_Description *_eo_op_id_desc_get(Eo_Op op); /* How we search and store the implementations in classes. */ #define DICH_CHAIN_LAST_BITS 5 #define DICH_CHAIN_LAST_SIZE (1 << DICH_CHAIN_LAST_BITS) -#define DICH_CHAIN1(x) ((x) / DICH_CHAIN_LAST_SIZE) -#define DICH_CHAIN_LAST(x) ((x) % DICH_CHAIN_LAST_SIZE) +#define DICH_CHAIN1(x) ((x) >> DICH_CHAIN_LAST_BITS) +#define DICH_CHAIN_LAST(x) ((x) & ((1 << DICH_CHAIN_LAST_BITS) - 1)) + #define OP_CLASS_OFFSET_GET(x) (((x) >> EO_OP_CLASS_OFFSET) & 0xffff) @@ -1259,25 +1260,24 @@ _eo_condtor_done(Eo *obj_id) static inline void * _eo_data_scope_get(const _Eo *obj, const _Eo_Class *klass) { - if (EINA_LIKELY(klass->desc->data_size > 0)) + if (EINA_LIKELY((klass->desc->data_size > 0) && (klass->desc->type != EO_CLASS_TYPE_MIXIN))) + return ((char *) obj) + _eo_sz + klass->data_offset; + + if (EINA_UNLIKELY(klass->desc->data_size == 0)) + return NULL; + else + { - if (EINA_UNLIKELY(klass->desc->type == EO_CLASS_TYPE_MIXIN)) - { - Eo_Extension_Data_Offset *doff_itr = obj->klass->extn_data_off; + Eo_Extension_Data_Offset *doff_itr = obj->klass->extn_data_off; - if (!doff_itr) - return NULL; + if (!doff_itr) + return NULL; - while (doff_itr->klass) - { - if (doff_itr->klass == klass) - return ((char *) obj) + _eo_sz + doff_itr->offset; - doff_itr++; - } - } - else + while (doff_itr->klass) { - return ((char *) obj) + _eo_sz + klass->data_offset; + if (doff_itr->klass == klass) + return ((char *) obj) + _eo_sz + doff_itr->offset; + doff_itr++; } }