diff options
author | Christopher James Lahey <clahey@ximian.com> | 2001-03-20 12:51:11 +0800 |
---|---|---|
committer | Chris Lahey <clahey@src.gnome.org> | 2001-03-20 12:51:11 +0800 |
commit | 79aed0f7f042554d54c1504f7401624163499c36 (patch) | |
tree | ff1f5bb3cad92531c8ca332689ddde7466b98b45 /e-util/e-util.c | |
parent | 68a731e0a02290edf039d419bc36582023624726 (diff) | |
download | gsoc2013-evolution-79aed0f7f042554d54c1504f7401624163499c36.tar.gz gsoc2013-evolution-79aed0f7f042554d54c1504f7401624163499c36.tar.zst gsoc2013-evolution-79aed0f7f042554d54c1504f7401624163499c36.zip |
Upped the version number to 0.5.99.4.
2001-03-19 Christopher James Lahey <clahey@ximian.com>
* configure.in: Upped the version number to 0.5.99.4.
* Merged branch:
2001-03-18 Christopher James Lahey <clahey@ximian.com>
* gal/widgets/e-selection-model.c,
gal/widgets/e-selection-model.h: Added another semi-private
function (e_selection_model_change_cursor.)
2001-03-18 Christopher James Lahey <clahey@ximian.com>
* gal/widgets/e-selection-model.c,
gal/widgets/e-selection-model.h: Added a couple of semi-private
functions (e_selection_model_change_one_row and
e_selection_model_confirm_row_count.)
2001-03-18 Christopher James Lahey <clahey@ximian.com>
* tests/test-tree-1.c, tests/test-tree-3.c: Added arguments for
e_tree_memory_callbacks_new of get_save_id and has_save_id to
NULL.
2001-03-17 Christopher James Lahey <clahey@ximian.com>
* gal/util/e-util.c (e_sort): Switched to just using qsort
directly here.
2001-03-17 Christopher James Lahey <clahey@ximian.com>
* gal/util/e-util.c, gal/util/e-util.h (e_bsearch, e_sort): Added e_sort and
e_bsearch. They both take a closure. e_sort guarantees a stable
sort. e_bsearch returns the range of matching elements including
the position where an object would be if there are no matching
elements.
2001-03-16 Christopher James Lahey <clahey@ximian.com>
* gal/Makefile.am (libgal_la_LIBADD): Added e-tree-sorted.lo.
2001-03-14 Christopher James Lahey <clahey@ximian.com>
* gal/widgets/e-selection-model-simple.c,
gal/widgets/e-selection-model-simple.h: Replaced the methods
insert_row and delete_row with insert_rows and delete_rows.
* gal/widgets/e-selection-model.c,
gal/widgets/e-selection-model.h: Replaced the methods insert_row
and delete_row with insert_rows and delete_rows.
2001-03-08 Christopher James Lahey <clahey@ximian.com>
* Makefile.am: Added e-table/e-table-utils.lo,
e-table/e-tree-memory-callbacks.lo, e-table/e-tree-memory.lo,
e-table/e-tree-scrolled.lo, e-table/e-tree-table-adapter.lo, and
e-table/e-tree.lo. Removed e-table/e-tree-simple.lo.
* gal/util/e-util.c, gal/util/e-util.h: Added a whole bunch of
e_marshal functions for ETree.
* tests/test-tree-1.c, tests/test-tree-3.c: Reworked these to use
the new tree stuff.
End of branch
svn path=/trunk/; revision=8840
Diffstat (limited to 'e-util/e-util.c')
-rw-r--r-- | e-util/e-util.c | 244 |
1 files changed, 244 insertions, 0 deletions
diff --git a/e-util/e-util.c b/e-util/e-util.c index 02092041f0..436e11b141 100644 --- a/e-util/e-util.c +++ b/e-util/e-util.c @@ -30,6 +30,7 @@ #include <string.h> #include <locale.h> #include <stdio.h> +#include <stdlib.h> #include "e-util.h" #if 0 @@ -269,6 +270,30 @@ e_marshal_INT__INT_INT_POINTER (GtkObject * object, func_data); } +typedef gint (*GtkSignal_INT__INT_POINTER_INT_POINTER) (GtkObject * object, + gint arg1, + gpointer arg2, + gint arg3, + gpointer arg4, + gpointer user_data); + +void +e_marshal_INT__INT_POINTER_INT_POINTER (GtkObject * object, + GtkSignalFunc func, + gpointer func_data, GtkArg * args) +{ + GtkSignal_INT__INT_POINTER_INT_POINTER rfunc; + gint *return_val; + return_val = GTK_RETLOC_INT (args[3]); + rfunc = (GtkSignal_INT__INT_POINTER_INT_POINTER) func; + *return_val = (*rfunc) (object, + GTK_VALUE_INT (args[0]), + GTK_VALUE_POINTER (args[1]), + GTK_VALUE_INT (args[2]), + GTK_VALUE_POINTER (args[3]), + func_data); +} + typedef void (*GtkSignal_NONE__OBJECT_DOUBLE_DOUBLE_BOOL) (GtkObject * object, GtkObject *arg1, gdouble arg2, @@ -361,6 +386,29 @@ e_marshal_NONE__INT_INT_POINTER_POINTER_INT_INT (GtkObject * object, GTK_VALUE_INT (args[4]), GTK_VALUE_INT (args[5]), func_data); } +typedef void (*GtkSignal_NONE__INT_POINTER_INT_POINTER_POINTER_INT_INT) (GtkObject * object, + gint arg1, + gpointer arg2, + gint arg3, + gpointer arg4, + gpointer arg5, + gint arg6, + gint arg7, + gpointer user_data); +void +e_marshal_NONE__INT_POINTER_INT_POINTER_POINTER_INT_INT (GtkObject * object, + GtkSignalFunc func, + gpointer func_data, GtkArg * args) +{ + GtkSignal_NONE__INT_POINTER_INT_POINTER_POINTER_INT_INT rfunc; + rfunc = (GtkSignal_NONE__INT_POINTER_INT_POINTER_POINTER_INT_INT) func; + (*rfunc) (object, + GTK_VALUE_INT (args[0]), GTK_VALUE_POINTER (args[1]), GTK_VALUE_INT (args[2]), + GTK_VALUE_POINTER (args[3]), + GTK_VALUE_POINTER (args[4]), + GTK_VALUE_INT (args[5]), GTK_VALUE_INT (args[6]), func_data); +} + typedef void (*GtkSignal_NONE__INT_INT_POINTER_INT) (GtkObject * object, gint arg1, gint arg2, @@ -378,6 +426,24 @@ e_marshal_NONE__INT_INT_POINTER_INT (GtkObject * object, GTK_VALUE_POINTER (args[2]), GTK_VALUE_INT (args[3]), func_data); } +typedef void (*GtkSignal_NONE__INT_POINTER_INT_POINTER_INT) (GtkObject * object, + gint arg1, + gpointer arg2, + gint arg3, + gpointer arg4, + gint arg5, gpointer user_data); +void +e_marshal_NONE__INT_POINTER_INT_POINTER_INT (GtkObject * object, + GtkSignalFunc func, + gpointer func_data, GtkArg * args) +{ + GtkSignal_NONE__INT_POINTER_INT_POINTER_INT rfunc; + rfunc = (GtkSignal_NONE__INT_POINTER_INT_POINTER_INT) func; + (*rfunc) (object, + GTK_VALUE_INT (args[0]), GTK_VALUE_POINTER (args[1]), GTK_VALUE_INT (args[2]), + GTK_VALUE_POINTER (args[3]), GTK_VALUE_INT (args[4]), func_data); +} + typedef gboolean (*GtkSignal_BOOL__INT_INT_POINTER_INT_INT_INT) (GtkObject * object, gint arg1, gint arg2, @@ -404,6 +470,34 @@ e_marshal_BOOL__INT_INT_POINTER_INT_INT_INT (GtkObject * object, GTK_VALUE_INT (args[5]), func_data); } +typedef gboolean (*GtkSignal_BOOL__INT_POINTER_INT_POINTER_INT_INT_INT) (GtkObject * object, + gint arg1, + gpointer arg2, + gint arg3, + gpointer arg4, + gint arg5, + gint arg6, + gint arg7, + gpointer user_data); +void +e_marshal_BOOL__INT_POINTER_INT_POINTER_INT_INT_INT (GtkObject * object, + GtkSignalFunc func, + gpointer func_data, GtkArg * args) +{ + GtkSignal_BOOL__INT_POINTER_INT_POINTER_INT_INT_INT rfunc; + gboolean *return_val; + return_val = GTK_RETLOC_BOOL (args[6]); + rfunc = (GtkSignal_BOOL__INT_POINTER_INT_POINTER_INT_INT_INT) func; + *return_val = (*rfunc) (object, + GTK_VALUE_INT (args[0]), + GTK_VALUE_POINTER (args[1]), + GTK_VALUE_INT (args[2]), + GTK_VALUE_POINTER (args[3]), + GTK_VALUE_INT (args[4]), + GTK_VALUE_INT (args[5]), + GTK_VALUE_INT (args[6]), func_data); +} + typedef void (*GtkSignal_NONE__INT_INT_POINTER_INT_INT_POINTER_INT_INT) (GtkObject * object, gint arg1, @@ -436,6 +530,38 @@ e_marshal_NONE__INT_INT_POINTER_INT_INT_POINTER_INT_INT (GtkObject * object, GTK_VALUE_INT (args[6]), GTK_VALUE_INT (args[7]), func_data); } +typedef void (*GtkSignal_NONE__INT_POINTER_INT_POINTER_INT_INT_POINTER_INT_INT) (GtkObject * + object, + gint arg1, + gpointer arg2, + gint arg3, + gpointer arg4, + gint arg5, + gint arg6, + gpointer arg7, + gint arg8, + gint arg9, + gpointer user_data); + +void +e_marshal_NONE__INT_POINTER_INT_POINTER_INT_INT_POINTER_INT_INT (GtkObject * object, + GtkSignalFunc func, + gpointer func_data, + GtkArg * args) +{ + GtkSignal_NONE__INT_POINTER_INT_POINTER_INT_INT_POINTER_INT_INT rfunc; + rfunc = (GtkSignal_NONE__INT_POINTER_INT_POINTER_INT_INT_POINTER_INT_INT) func; + (*rfunc) (object, + GTK_VALUE_INT (args[0]), + GTK_VALUE_POINTER (args[1]), + GTK_VALUE_INT (args[2]), + GTK_VALUE_POINTER (args[3]), + GTK_VALUE_INT (args[4]), + GTK_VALUE_INT (args[5]), + GTK_VALUE_POINTER (args[6]), + GTK_VALUE_INT (args[7]), GTK_VALUE_INT (args[8]), func_data); +} + typedef void (*GtkSignal_NONE__POINTER_POINTER_INT) (GtkObject *, gpointer, gpointer, gint, gpointer); @@ -449,6 +575,19 @@ e_marshal_NONE__POINTER_POINTER_INT (GtkObject * object, GtkSignalFunc func, GTK_VALUE_INT (args[2]), func_data); } +typedef void (*GtkSignal_NONE__INT_POINTER_INT_POINTER) (GtkObject *, gint, gpointer, + gint, gpointer, gpointer); + +void +e_marshal_NONE__INT_POINTER_INT_POINTER (GtkObject * object, GtkSignalFunc func, + gpointer func_data, GtkArg * args) +{ + GtkSignal_NONE__INT_POINTER_INT_POINTER rfunc; + rfunc = (GtkSignal_NONE__INT_POINTER_INT_POINTER) func; + (*rfunc) (object, GTK_VALUE_INT (args[0]), GTK_VALUE_POINTER (args[1]), + GTK_VALUE_INT (args[2]), GTK_VALUE_POINTER (args[3]), func_data); +} + typedef int (*GtkSignal_INT__POINTER_POINTER) (GtkObject *, gpointer, gpointer, gpointer user_data); @@ -740,3 +879,108 @@ e_create_directory (gchar *directory) return (return_value); } + + +/* Perform a binary search for key in base which has nmemb elements + of size bytes each. The comparisons are done by (*compare)(). */ +void e_bsearch (const void *key, + const void *base, + size_t nmemb, + size_t size, + ESortCompareFunc compare, + gpointer closure, + size_t *start, + size_t *end) +{ + size_t l, u, idx; + const void *p; + int comparison; + if (!(start || end)) + return; + + l = 0; + u = nmemb; + while (l < u) { + idx = (l + u) / 2; + p = (void *) (((const char *) base) + (idx * size)); + comparison = (*compare) (key, p, closure); + if (comparison < 0) + u = idx; + else if (comparison > 0) + l = idx + 1; + else { + size_t lsave, usave; + lsave = l; + usave = u; + if (start) { + while (l < u) { + idx = (l + u) / 2; + p = (void *) (((const char *) base) + (idx * size)); + comparison = (*compare) (key, p, closure); + if (comparison <= 0) + u = idx; + else + l = idx + 1; + } + *start = l; + + l = lsave; + u = usave; + } + if (end) { + while (l < u) { + idx = (l + u) / 2; + p = (void *) (((const char *) base) + (idx * size)); + comparison = (*compare) (key, p, closure); + if (comparison < 0) + u = idx; + else + l = idx + 1; + } + *end = l; + } + return; + } + } + + if (start) + *start = l; + if (end) + *end = l; +} + +static gpointer closure_closure; +static ESortCompareFunc compare_closure; + +static int +qsort_callback(const void *data1, const void *data2) +{ + return (*compare_closure) (data1, data2, closure_closure); +} + +/* Forget it. We're just going to use qsort. I lost the need for a stable sort. */ +void +e_sort (void *base, + size_t nmemb, + size_t size, + ESortCompareFunc compare, + gpointer closure) +{ + closure_closure = closure; + compare_closure = compare; + qsort(base, nmemb, size, qsort_callback); +#if 0 + void *base_copy; + int i; + base_copy = g_malloc(nmemb * size); + + for (i = 0; i < nmemb; i++) { + int position; + e_bsearch(base + (i * size), base_copy, i, size, compare, closure, NULL, &position); + memmove(base_copy + (position + 1) * size, base_copy + position * size, (i - position) * size); + memcpy(base_copy + position * size, base + i * size, size); + } + memcpy(base, base_copy, nmemb * size); + g_free(base_copy); +#endif +} |