aboutsummaryrefslogtreecommitdiffstats
path: root/e-util/e-util.c
diff options
context:
space:
mode:
authorChristopher James Lahey <clahey@ximian.com>2001-03-20 12:51:11 +0800
committerChris Lahey <clahey@src.gnome.org>2001-03-20 12:51:11 +0800
commit79aed0f7f042554d54c1504f7401624163499c36 (patch)
treeff1f5bb3cad92531c8ca332689ddde7466b98b45 /e-util/e-util.c
parent68a731e0a02290edf039d419bc36582023624726 (diff)
downloadgsoc2013-evolution-79aed0f7f042554d54c1504f7401624163499c36.tar
gsoc2013-evolution-79aed0f7f042554d54c1504f7401624163499c36.tar.gz
gsoc2013-evolution-79aed0f7f042554d54c1504f7401624163499c36.tar.bz2
gsoc2013-evolution-79aed0f7f042554d54c1504f7401624163499c36.tar.lz
gsoc2013-evolution-79aed0f7f042554d54c1504f7401624163499c36.tar.xz
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.c244
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
+}