New gcompat.h header file as recommended by Havoc.
[platform/upstream/glib.git] / garray.c
index 285e4fe..c50d643 100644 (file)
--- a/garray.c
+++ b/garray.c
  * MT safe
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
 #include <string.h>
+#include <stdlib.h>
 #include "glib.h"
 
 
@@ -55,7 +60,7 @@ struct _GRealArray
     g_array_elt_zero ((array), (array)->len, 1);                       \
 }G_STMT_END
 
-static gint g_nearest_pow        (gint        num);
+static gint g_nearest_pow        (gint        num) G_GNUC_CONST;
 static void g_array_maybe_expand (GRealArray *array,
                                  gint        len);
 
@@ -264,6 +269,39 @@ g_array_remove_index_fast (GArray* farray,
   return farray;
 }
 
+void
+g_array_sort (GArray       *farray,
+             GCompareFunc  compare_func)
+{
+  GRealArray *array = (GRealArray*) farray;
+
+  g_return_if_fail (array != NULL);
+  g_return_if_fail (array->data != NULL);
+
+  qsort (array->data,
+        array->len,
+        array->elt_size,
+        compare_func);
+}
+
+void
+g_array_sort_with_data (GArray           *farray,
+                       GCompareFuncData  compare_func,
+                       gpointer          user_data)
+{
+  GRealArray *array = (GRealArray*) farray;
+
+  g_return_if_fail (array != NULL);
+  g_return_if_fail (array->data != NULL);
+
+  g_qsort_with_data (array->data,
+                    array->len,
+                    array->elt_size,
+                    compare_func,
+                    user_data);
+}
+
+
 static gint
 g_nearest_pow (gint num)
 {
@@ -527,6 +565,34 @@ g_ptr_array_add (GPtrArray* farray,
   array->pdata[array->len++] = data;
 }
 
+void
+g_ptr_array_sort (GPtrArray    *array,
+                 GCompareFunc  compare_func)
+{
+  g_return_if_fail (array != NULL);
+  g_return_if_fail (array->pdata != NULL);
+
+  qsort (array->pdata,
+        array->len,
+        sizeof (gpointer),
+        compare_func);
+}
+
+void
+g_ptr_array_sort_with_data (GPtrArray        *array,
+                           GCompareFuncData  compare_func,
+                           gpointer          user_data)
+{
+  g_return_if_fail (array != NULL);
+  g_return_if_fail (array->pdata != NULL);
+
+  g_qsort_with_data (array->pdata,
+                    array->len,
+                    sizeof (gpointer),
+                    compare_func,
+                    user_data);
+}
+
 /* Byte arrays 
  */
 
@@ -581,9 +647,24 @@ GByteArray* g_byte_array_remove_index (GByteArray *array,
 }
 
 GByteArray* g_byte_array_remove_index_fast (GByteArray *array,
-                                                  guint index)
+                                           guint index)
 {
   g_array_remove_index_fast((GArray*) array, index);
 
   return array;
 }
+
+void
+g_byte_array_sort (GByteArray   *array,
+                  GCompareFunc  compare_func)
+{
+  g_array_sort ((GArray *) array, compare_func);
+}
+
+void
+g_byte_array_sort_with_data (GByteArray       *array,
+                            GCompareFuncData  compare_func,
+                            gpointer          user_data)
+{
+  g_array_sort_with_data ((GArray *) array, compare_func, user_data);
+}