jeyzu pushed a commit to branch master.
commit 5244c20118214d4786a0c78e6025b18005cbc6ff
Author: Jérémy Zurcher <[email protected]>
Date: Thu May 16 14:56:41 2013 +0200
eo ptr ind: store partial Eo Id in the table
- very small speed up
- maybe later use this to avoid table indexes not NULL checks
in _eo_id_release and _eo_obj_pointer_get
---
src/lib/eo/eo_ptr_indirection.c | 58 ++++++++++++++++++-----------------------
1 file changed, 25 insertions(+), 33 deletions(-)
diff --git a/src/lib/eo/eo_ptr_indirection.c b/src/lib/eo/eo_ptr_indirection.c
index 4440409..9afa175 100644
--- a/src/lib/eo/eo_ptr_indirection.c
+++ b/src/lib/eo/eo_ptr_indirection.c
@@ -212,42 +212,36 @@ typedef struct
Table_Index fifo_head;
/* Indicates where to add an entry to recycle */
Table_Index fifo_tail;
+ /* Packed mid table and table indexes */
+ Eo_Id partial_id;
/* Entries of the table holding real pointers and generations */
_Eo_Id_Entry entries[MAX_ENTRY_ID];
} _Eo_Ids_Table;
-/* Table Info */
-typedef struct
-{
- /* Table pointer */
- _Eo_Ids_Table *table;
- /* Index of mid table in top table */
- Table_Index mid_table_id;
- /* Index of table in mid table */
- Table_Index table_id;
-} _Eo_Table_Info;
-
/* Tables handling pointers indirection */
static _Eo_Ids_Table **_eo_ids_tables[MAX_MID_TABLE_ID] = { NULL };
/* Current table used for following allocations */
-static _Eo_Table_Info current_table = { NULL, 0, 0 };
+static _Eo_Ids_Table *current_table = NULL;
/* Next generation to use when assigning a new entry to a Eo pointer */
Generation_Counter _eo_generation_counter = 0;
/* Macro used to compose an Eo id */
-#define EO_COMPOSE_ID(TABLE, INTER_TABLE, ENTRY, GENERATION) \
- (((Eo_Id)(TABLE & MASK_MID_TABLE_ID) << SHIFT_MID_TABLE_ID) | \
- ((Eo_Id)(INTER_TABLE & MASK_TABLE_ID) << SHIFT_TABLE_ID) | \
- ((ENTRY & MASK_ENTRY_ID) << SHIFT_ENTRY_ID) | \
- (GENERATION & MASK_GENERATIONS ))
+#define EO_COMPOSE_PARTIAL_ID(MID_TABLE, TABLE) \
+ (((Eo_Id)(MID_TABLE & MASK_MID_TABLE_ID) << SHIFT_MID_TABLE_ID) | \
+ ((Eo_Id)(TABLE & MASK_TABLE_ID) << SHIFT_TABLE_ID))
+
+#define EO_COMPOSE_FINAL_ID(PARTIAL_ID, ENTRY, GENERATION) \
+ (PARTIAL_ID | \
+ ((ENTRY & MASK_ENTRY_ID) << SHIFT_ENTRY_ID) | \
+ (GENERATION & MASK_GENERATIONS ))
/* Macro to extract from an Eo id the indexes of the tables */
-#define EO_DECOMPOSE_ID(ID, TABLE, INTER_TABLE, ENTRY, GENERATION) \
- TABLE = (ID >> SHIFT_MID_TABLE_ID) & MASK_MID_TABLE_ID; \
- INTER_TABLE = (ID >> SHIFT_TABLE_ID) & MASK_TABLE_ID; \
- ENTRY = (ID >> SHIFT_ENTRY_ID) & MASK_ENTRY_ID; \
+#define EO_DECOMPOSE_ID(ID, MID_TABLE, TABLE, ENTRY, GENERATION) \
+ MID_TABLE = (ID >> SHIFT_MID_TABLE_ID) & MASK_MID_TABLE_ID; \
+ TABLE = (ID >> SHIFT_TABLE_ID) & MASK_TABLE_ID; \
+ ENTRY = (ID >> SHIFT_ENTRY_ID) & MASK_ENTRY_ID; \
GENERATION = ID & MASK_GENERATIONS;
/* Macro used for readability */
@@ -330,6 +324,7 @@ _search_tables()
table = _eo_id_mem_calloc(1, sizeof(_Eo_Ids_Table));
table->start = 1;
table->fifo_head = table->fifo_tail = -1;
+ table->partial_id = EO_COMPOSE_PARTIAL_ID(mid_table_id,
table_id);
entry = &(table->entries[0]);
UNPROTECT(_eo_ids_tables[mid_table_id]);
TABLE_FROM_IDS = table;
@@ -341,16 +336,14 @@ _search_tables()
if (entry)
{
/* Store table info into current table */
- current_table.table = table;
- current_table.mid_table_id = mid_table_id;
- current_table.table_id = table_id;
+ current_table = table;
return entry;
}
}
}
ERR("no more available entries to store eo objects");
- current_table.table = NULL;
+ current_table = NULL;
return NULL;
}
@@ -360,8 +353,8 @@ _eo_id_allocate(const _Eo *obj)
#ifdef HAVE_EO_ID
_Eo_Id_Entry *entry = NULL;
- if (current_table.table)
- entry = _get_available_entry(current_table.table);
+ if (current_table)
+ entry = _get_available_entry(current_table);
if (!entry)
{
@@ -378,11 +371,10 @@ _eo_id_allocate(const _Eo *obj)
entry->ptr = (_Eo *)obj;
entry->active = 1;
entry->generation = _eo_generation_counter;
- PROTECT(current_table.table);
- return EO_COMPOSE_ID(current_table.mid_table_id,
- current_table.table_id,
- (entry - current_table.table->entries),
- entry->generation);
+ PROTECT(current_table);
+ return EO_COMPOSE_FINAL_ID(current_table->partial_id,
+ (entry - current_table->entries),
+ entry->generation);
#else
return (Eo_Id)obj;
#endif
@@ -447,7 +439,7 @@ _eo_free_ids_tables()
}
_eo_ids_tables[mid_table_id] = NULL;
}
- current_table.table = NULL;
+ current_table = NULL;
}
#ifdef EFL_DEBUG
--
------------------------------------------------------------------------------
AlienVault Unified Security Management (USM) platform delivers complete
security visibility with the essential security capabilities. Easily and
efficiently configure, manage, and operate all of your security controls
from a single console and one unified framework. Download a free trial.
http://p.sf.net/sfu/alienvault_d2d