Enlightenment CVS committal
Author : englebass
Project : e17
Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore
Modified Files:
Ecore_Data.h ecore_hash.c ecore_list.c
Log Message:
Functions to join lists and hashes.
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore/Ecore_Data.h,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -3 -r1.28 -r1.29
--- Ecore_Data.h 16 Jan 2007 01:27:01 -0000 1.28
+++ Ecore_Data.h 17 Jan 2007 13:41:08 -0000 1.29
@@ -89,6 +89,8 @@
EAPI int ecore_list_append(Ecore_List * list, void *_data);
EAPI int ecore_list_prepend(Ecore_List * list, void *_data);
EAPI int ecore_list_insert(Ecore_List * list, void *_data);
+ EAPI int ecore_list_append_list(Ecore_List * list, Ecore_List * append);
+ EAPI int ecore_list_prepend_list(Ecore_List * list, Ecore_List * prepend);
/* Removing items from the list */
EAPI int ecore_list_remove_destroy(Ecore_List *list);
@@ -153,6 +155,8 @@
EAPI int ecore_dlist_append(Ecore_DList * _e_dlist, void *_data);
EAPI int ecore_dlist_prepend(Ecore_DList * _e_dlist, void *_data);
EAPI int ecore_dlist_insert(Ecore_DList * _e_dlist, void *_data);
+ EAPI int ecore_dlist_append_list(Ecore_DList * _e_dlist, Ecore_DList *
append);
+ EAPI int ecore_dlist_prepend_list(Ecore_DList * _e_dlist, Ecore_DList *
prepend);
/* Info about list's state */
EAPI void *ecore_dlist_current(Ecore_DList *list);
@@ -246,6 +250,7 @@
/* Retrieve and store data into the hash */
EAPI void *ecore_hash_get(Ecore_Hash *hash, const void *key);
EAPI int ecore_hash_set(Ecore_Hash *hash, void *key, void *value);
+ EAPI int ecore_hash_set_hash(Ecore_Hash *hash, Ecore_Hash *set);
EAPI void *ecore_hash_remove(Ecore_Hash *hash, const void *key);
EAPI void ecore_hash_dump_graph(Ecore_Hash *hash);
EAPI void ecore_hash_dump_stats(Ecore_Hash *hash);
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore/ecore_hash.c,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -3 -r1.33 -r1.34
--- ecore_hash.c 16 Jan 2007 01:27:01 -0000 1.33
+++ ecore_hash.c 17 Jan 2007 13:41:08 -0000 1.34
@@ -170,6 +170,49 @@
}
/**
+ * Sets all key-value pairs from set in the given hash table.
+ * @param hash The given hash table.
+ * @param set The hash table to import.
+ * @return @c TRUE if successful, @c FALSE if not.
+ * @ingroup Ecore_Data_Hash_ADT_Data_Group
+ */
+EAPI int
+ecore_hash_set_hash(Ecore_Hash *hash, Ecore_Hash *set)
+{
+ unsigned int i;
+ Ecore_Hash_Node *node, *old;
+
+ CHECK_PARAM_POINTER_RETURN("hash", hash, FALSE);
+ CHECK_PARAM_POINTER_RETURN("set", set, FALSE);
+
+ for (i = 0; i < ecore_prime_table[set->size]; i++)
+ {
+ /* Hash into a new list to avoid loops of rehashing the same nodes */
+ while ((old = set->buckets[i]))
+ {
+ set->buckets[i] = old->next;
+ old->next = NULL;
+ node = _ecore_hash_get_node(hash, old->key);
+ if (node)
+ {
+ /* This key already exists. Delete the old and add the new
+ * value */
+ if (hash->free_key) hash->free_key(node->key);
+ if (hash->free_value) hash->free_key(node->value);
+ node->key = old->key;
+ node->value = old->value;
+ free(old);
+ }
+ else
+ _ecore_hash_add_node(hash, old);
+ }
+ }
+ FREE(set->buckets);
+ ecore_hash_init(set, set->hash_func, set->compare);
+ return TRUE;
+}
+
+/**
* Frees the hash table and the data contained inside it.
* @param hash The hash table to destroy.
* @return @c TRUE on success, @c FALSE on error.
@@ -694,7 +737,7 @@
* @brief Rehash the nodes of a table into the hash table
* @param hash: the hash to place the nodes of the table
* @param table: the table to remove the nodes from and place in hash
- * @return Returns TRUE on success, FALSE on success
+ * @return Returns TRUE on success, FALSE on error
*/
inline int
_ecore_hash_rehash(Ecore_Hash *hash, Ecore_Hash_Node **old_table, int old_size)
===================================================================
RCS file: /cvs/e/e17/libs/ecore/src/lib/ecore/ecore_list.c,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -3 -r1.30 -r1.31
--- ecore_list.c 13 Jan 2007 17:51:10 -0000 1.30
+++ ecore_list.c 17 Jan 2007 13:41:08 -0000 1.31
@@ -494,6 +494,71 @@
return TRUE;
}
+/**
+ * Append a list to the list.
+ * @param list The list.
+ * @param append The list to append.
+ * @return @c FALSE if an error occurs, @c TRUE if appended successfully
+ * @ingroup Ecore_Data_List_Add_Item_Group
+ */
+
+EAPI int
+ecore_list_append_list(Ecore_List *list, Ecore_List *append)
+{
+ CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
+ CHECK_PARAM_POINTER_RETURN("append", append, FALSE);
+
+ if (ecore_list_is_empty(append)) return TRUE;
+
+ if (ecore_list_is_empty(list))
+ {
+ list->first = append->first;
+ list->current = NULL;
+ list->last = append->last;
+ list->nodes = append->nodes;
+ }
+ else
+ {
+ list->last->next = append->first;
+ list->last = append->last;
+ list->nodes += append->nodes;
+ }
+ ecore_list_init(append);
+ return TRUE;
+}
+
+/**
+ * Prepend a list to the beginning of the list.
+ * @param list The list.
+ * @param prepend The list to prepend.
+ * @return @c FALSE if an error occurs, @c TRUE if prepended successfully.
+ * @ingroup Ecore_Data_List_Add_Item_Group
+ */
+EAPI int
+ecore_list_prepend_list(Ecore_List *list, Ecore_List *prepend)
+{
+ CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
+ CHECK_PARAM_POINTER_RETURN("prepend", prepend, FALSE);
+
+ if (ecore_list_is_empty(prepend)) return TRUE;
+
+ if (ecore_list_is_empty(list))
+ {
+ list->first = prepend->first;
+ list->current = NULL;
+ list->last = prepend->last;
+ list->nodes = prepend->nodes;
+ }
+ else
+ {
+ prepend->last->next = list->first;
+ list->first = prepend->first;
+ list->nodes += prepend->nodes;
+ list->index += prepend->nodes;
+ }
+ ecore_list_init(prepend);
+ return TRUE;
+}
/**
@defgroup Ecore_Data_List_Remove_Item_Group List Item Removing Functions
@@ -1327,6 +1392,73 @@
ECORE_LIST(list)->nodes++;
return ret;
+}
+
+/**
+ * Appends a list to the given doubly linked list.
+ * @param list The given doubly linked list.
+ * @param append The list to append.
+ * @return @c TRUE if the data is successfully appended, @c FALSE otherwise.
+ * @ingroup Ecore_Data_DList_Add_Item_Group
+ */
+EAPI int
+ecore_dlist_append_list(Ecore_DList *list, Ecore_DList *append)
+{
+ CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
+ CHECK_PARAM_POINTER_RETURN("append", append, FALSE);
+
+ if (ecore_dlist_is_empty(append)) return TRUE;
+
+ if (ecore_dlist_is_empty(list))
+ {
+ list->first = append->first;
+ list->current = NULL;
+ list->last = append->last;
+ list->nodes = append->nodes;
+ }
+ else
+ {
+ list->last->next = append->first;
+ ECORE_DLIST_NODE(append->first)->previous =
ECORE_DLIST_NODE(list->last);
+ list->last = append->last;
+ list->nodes += append->nodes;
+ }
+ ecore_dlist_init(append);
+ return TRUE;
+}
+
+/**
+ * Adds a list to the very beginning of the given doubly linked list.
+ * @param list The given doubly linked list.
+ * @param prepend The list to prepend.
+ * @return @c TRUE if the data is successfully prepended, @c FALSE otherwise.
+ * @ingroup Ecore_Data_DList_Add_Item_Group
+ */
+EAPI int
+ecore_dlist_prepend_list(Ecore_DList *list, Ecore_DList *prepend)
+{
+ CHECK_PARAM_POINTER_RETURN("list", list, FALSE);
+ CHECK_PARAM_POINTER_RETURN("prepend", prepend, FALSE);
+
+ if (ecore_dlist_is_empty(prepend)) return TRUE;
+
+ if (ecore_dlist_is_empty(list))
+ {
+ list->first = prepend->first;
+ list->current = NULL;
+ list->last = prepend->last;
+ list->nodes = prepend->nodes;
+ }
+ else
+ {
+ prepend->last->next = list->first;
+ ECORE_DLIST_NODE(list->first)->previous =
ECORE_DLIST_NODE(prepend->last);
+ list->first = prepend->first;
+ list->nodes += prepend->nodes;
+ list->index += prepend->nodes;
+ }
+ ecore_dlist_init(prepend);
+ return TRUE;
}
/**
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs