[evolution] ETableSortInfo: Move arrays to private section.



commit caa26aeb6b119616c9ebe22bd91fc749411be18a
Author: Matthew Barnes <mbarnes redhat com>
Date:   Thu Jun 27 00:29:22 2013 -0400

    ETableSortInfo: Move arrays to private section.
    
    And convert them to GArrays internally.

 e-util/e-table-sort-info.c |  134 +++++++++++++++++++++----------------------
 e-util/e-table-sort-info.h |    3 -
 2 files changed, 65 insertions(+), 72 deletions(-)
---
diff --git a/e-util/e-table-sort-info.c b/e-util/e-table-sort-info.c
index d6fadfd..3f1f928 100644
--- a/e-util/e-table-sort-info.c
+++ b/e-util/e-table-sort-info.c
@@ -29,8 +29,8 @@
 
 struct _ETableSortInfoPrivate {
        GWeakRef specification;
-       guint group_count;
-       guint sort_count;
+       GArray *groupings;
+       GArray *sortings;
        gboolean can_group;
 };
 
@@ -102,6 +102,9 @@ table_sort_info_dispose (GObject *object)
 
        g_weak_ref_set (&priv->specification, NULL);
 
+       g_array_set_size (priv->groupings, 0);
+       g_array_set_size (priv->sortings, 0);
+
        /* Chain up to parent's dispose() method. */
        G_OBJECT_CLASS (e_table_sort_info_parent_class)->dispose (object);
 }
@@ -109,10 +112,12 @@ table_sort_info_dispose (GObject *object)
 static void
 table_sort_info_finalize (GObject *object)
 {
-       ETableSortInfo *sort_info = E_TABLE_SORT_INFO (object);
+       ETableSortInfoPrivate *priv;
+
+       priv = E_TABLE_SORT_INFO_GET_PRIVATE (object);
 
-       g_free (sort_info->groupings);
-       g_free (sort_info->sortings);
+       g_array_free (priv->groupings, TRUE);
+       g_array_free (priv->sortings, TRUE);
 
        /* Chain up to parent's finalize() method. */
        G_OBJECT_CLASS (e_table_sort_info_parent_class)->finalize (object);
@@ -167,6 +172,11 @@ e_table_sort_info_init (ETableSortInfo *sort_info)
 {
        sort_info->priv = E_TABLE_SORT_INFO_GET_PRIVATE (sort_info);
 
+       sort_info->priv->groupings = g_array_new (
+               FALSE, TRUE, sizeof (ETableSortColumn));
+       sort_info->priv->sortings = g_array_new (
+               FALSE, TRUE, sizeof (ETableSortColumn));
+
        sort_info->priv->can_group = TRUE;
 }
 
@@ -241,26 +251,11 @@ e_table_sort_info_grouping_get_count (ETableSortInfo *sort_info)
        g_return_val_if_fail (E_IS_TABLE_SORT_INFO (sort_info), 0);
 
        if (e_table_sort_info_get_can_group (sort_info))
-               count = sort_info->priv->group_count;
+               count = sort_info->priv->groupings->len;
 
        return count;
 }
 
-static void
-table_sort_info_grouping_real_truncate (ETableSortInfo *sort_info,
-                                        guint length)
-{
-       if (length < sort_info->priv->group_count)
-               sort_info->priv->group_count = length;
-
-       if (length > sort_info->priv->group_count) {
-               sort_info->groupings = g_realloc (
-                       sort_info->groupings,
-                       length * sizeof (ETableSortColumn));
-               sort_info->priv->group_count = length;
-       }
-}
-
 /**
  * e_table_sort_info_grouping_truncate:
  * @sort_info: an #ETableSortInfo
@@ -275,7 +270,7 @@ e_table_sort_info_grouping_truncate (ETableSortInfo *sort_info,
 {
        g_return_if_fail (E_IS_TABLE_SORT_INFO (sort_info));
 
-       table_sort_info_grouping_real_truncate (sort_info, length);
+       g_array_set_size (sort_info->priv->groupings, length);
 
        g_signal_emit (sort_info, signals[GROUP_INFO_CHANGED], 0);
 }
@@ -291,17 +286,20 @@ ETableSortColumn
 e_table_sort_info_grouping_get_nth (ETableSortInfo *sort_info,
                                     guint n)
 {
-       ETableSortColumn fake = {0, 0};
+       ETableSortColumn column = { 0, 0 };
+       GArray *array;
+
+       g_return_val_if_fail (E_IS_TABLE_SORT_INFO (sort_info), column);
 
-       g_return_val_if_fail (E_IS_TABLE_SORT_INFO (sort_info), fake);
+       array = sort_info->priv->groupings;
 
        if (!e_table_sort_info_get_can_group (sort_info))
-               return fake;
+               return column;
 
-       if (n >= e_table_sort_info_grouping_get_count (sort_info))
-               return fake;
+       if (n < array->len)
+               column = g_array_index (array, ETableSortColumn, n);
 
-       return sort_info->groupings[n];
+       return column;
 }
 
 /**
@@ -318,12 +316,16 @@ e_table_sort_info_grouping_set_nth (ETableSortInfo *sort_info,
                                     guint n,
                                     ETableSortColumn column)
 {
+       ETableSortColumn *array_element;
+       GArray *array;
+
        g_return_if_fail (E_IS_TABLE_SORT_INFO (sort_info));
 
-       if (n >= sort_info->priv->group_count)
-               table_sort_info_grouping_real_truncate (sort_info, n + 1);
+       array = sort_info->priv->groupings;
+       g_array_set_size (array, MAX (n + 1, array->len));
 
-       sort_info->groupings[n] = column;
+       array_element = &g_array_index (array, ETableSortColumn, n);
+       *array_element = column;
 
        g_signal_emit (sort_info, signals[GROUP_INFO_CHANGED], 0);
 }
@@ -339,22 +341,7 @@ e_table_sort_info_sorting_get_count (ETableSortInfo *sort_info)
 {
        g_return_val_if_fail (E_IS_TABLE_SORT_INFO (sort_info), 0);
 
-       return sort_info->priv->sort_count;
-}
-
-static void
-table_sort_info_sorting_real_truncate (ETableSortInfo *sort_info,
-                                       guint length)
-{
-       if (length < sort_info->priv->sort_count)
-               sort_info->priv->sort_count = length;
-
-       if (length > sort_info->priv->sort_count) {
-               sort_info->sortings = g_realloc (
-                       sort_info->sortings,
-                       length * sizeof (ETableSortColumn));
-               sort_info->priv->sort_count = length;
-       }
+       return sort_info->priv->sortings->len;
 }
 
 /**
@@ -371,7 +358,7 @@ e_table_sort_info_sorting_truncate (ETableSortInfo *sort_info,
 {
        g_return_if_fail (E_IS_TABLE_SORT_INFO (sort_info));
 
-       table_sort_info_sorting_real_truncate  (sort_info, length);
+       g_array_set_size (sort_info->priv->sortings, length);
 
        g_signal_emit (sort_info, signals[SORT_INFO_CHANGED], 0);
 }
@@ -387,14 +374,17 @@ ETableSortColumn
 e_table_sort_info_sorting_get_nth (ETableSortInfo *sort_info,
                                    guint n)
 {
-       ETableSortColumn fake = {0, 0};
+       ETableSortColumn column = { 0, 0 };
+       GArray *array;
+
+       g_return_val_if_fail (E_IS_TABLE_SORT_INFO (sort_info), column);
 
-       g_return_val_if_fail (E_IS_TABLE_SORT_INFO (sort_info), fake);
+       array = sort_info->priv->sortings;
 
-       if (n >= e_table_sort_info_sorting_get_count (sort_info))
-               return fake;
+       if (n < array->len)
+               column = g_array_index (array, ETableSortColumn, n);
 
-       return sort_info->sortings[n];
+       return column;
 }
 
 /**
@@ -411,12 +401,16 @@ e_table_sort_info_sorting_set_nth (ETableSortInfo *sort_info,
                                    guint n,
                                    ETableSortColumn column)
 {
+       ETableSortColumn *array_element;
+       GArray *array;
+
        g_return_if_fail (E_IS_TABLE_SORT_INFO (sort_info));
 
-       if (n >= sort_info->priv->sort_count)
-               table_sort_info_sorting_real_truncate (sort_info, n + 1);
+       array = sort_info->priv->sortings;
+       g_array_set_size (array, MAX (n + 1, array->len));
 
-       sort_info->sortings[n] = column;
+       array_element = &g_array_index (array, ETableSortColumn, n);
+       *array_element = column;
 
        g_signal_emit (sort_info, signals[SORT_INFO_CHANGED], 0);
 }
@@ -542,21 +536,23 @@ e_table_sort_info_duplicate (ETableSortInfo *sort_info)
        new_info = e_table_sort_info_new (specification);
        g_object_unref (specification);
 
-       new_info->priv->group_count = sort_info->priv->group_count;
-       new_info->groupings = g_new (
-               ETableSortColumn, new_info->priv->group_count);
+       g_array_set_size (
+               new_info->priv->groupings,
+               sort_info->priv->groupings->len);
        memmove (
-               new_info->groupings,
-               sort_info->groupings,
-               sizeof (ETableSortColumn) * new_info->priv->group_count);
-
-       new_info->priv->sort_count = sort_info->priv->sort_count;
-       new_info->sortings = g_new (
-               ETableSortColumn, new_info->priv->sort_count);
+               new_info->priv->groupings->data,
+               sort_info->priv->groupings->data,
+               sort_info->priv->groupings->len *
+               g_array_get_element_size (sort_info->priv->groupings));
+
+       g_array_set_size (
+               new_info->priv->sortings,
+               sort_info->priv->sortings->len);
        memmove (
-               new_info->sortings,
-               sort_info->sortings,
-               sizeof (ETableSortColumn) * new_info->priv->sort_count);
+               new_info->priv->sortings->data,
+               sort_info->priv->sortings->data,
+               sort_info->priv->sortings->len *
+               g_array_get_element_size (sort_info->priv->sortings));
 
        new_info->priv->can_group = sort_info->priv->can_group;
 
diff --git a/e-util/e-table-sort-info.h b/e-util/e-table-sort-info.h
index ad3b3db..1dfd91b 100644
--- a/e-util/e-table-sort-info.h
+++ b/e-util/e-table-sort-info.h
@@ -64,9 +64,6 @@ struct _ETableSortColumn {
 struct _ETableSortInfo {
        GObject parent;
        ETableSortInfoPrivate *priv;
-
-       ETableSortColumn *groupings;
-       ETableSortColumn *sortings;
 };
 
 struct _ETableSortInfoClass {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]