jeyzu pushed a commit to branch master.

commit 5afa29af59158adf4cfb7bef87405d310575e6c3
Author: Jérémy Zurcher <[email protected]>
Date:   Fri Aug 9 15:58:55 2013 +0200

    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 2852cce..b1f2d15 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++;
           }
      }
 

-- 

------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead. 
Download for free and get started troubleshooting in minutes. 
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk

Reply via email to