CamelStoreSummary: Move 'store_info_size' to class struct.
authorMatthew Barnes <mbarnes@redhat.com>
Mon, 16 Sep 2013 16:17:58 +0000 (12:17 -0400)
committerMatthew Barnes <mbarnes@redhat.com>
Mon, 23 Sep 2013 16:03:08 +0000 (12:03 -0400)
Allocation size varies by CamelStoreSummary subclass, not by instance.

camel/camel-imapx-store-summary.c
camel/camel-store-summary.c
camel/camel-store-summary.h
camel/providers/nntp/camel-nntp-store-summary.c

index e02811b..81cdd17 100644 (file)
@@ -347,6 +347,7 @@ camel_imapx_store_summary_class_init (CamelIMAPXStoreSummaryClass *class)
        object_class->finalize = imapx_store_summary_finalize;
 
        store_summary_class = CAMEL_STORE_SUMMARY_CLASS (class);
+       store_summary_class->store_info_size = sizeof (CamelIMAPXStoreInfo);
        store_summary_class->summary_header_load =imapx_store_summary_summary_header_load;
        store_summary_class->summary_header_save = imapx_store_summary_summary_header_save;
        store_summary_class->store_info_load = imapx_store_summary_store_info_load;
@@ -357,7 +358,6 @@ camel_imapx_store_summary_class_init (CamelIMAPXStoreSummaryClass *class)
 static void
 camel_imapx_store_summary_init (CamelIMAPXStoreSummary *s)
 {
-       ((CamelStoreSummary *) s)->store_info_size = sizeof (CamelIMAPXStoreInfo);
        s->version = CAMEL_IMAPX_STORE_SUMMARY_VERSION;
 }
 
index 4d9f22a..bc57184 100644 (file)
@@ -228,8 +228,12 @@ static void
 store_summary_store_info_free (CamelStoreSummary *summary,
                                CamelStoreInfo *info)
 {
+       CamelStoreSummaryClass *class;
+
+       class = CAMEL_STORE_SUMMARY_GET_CLASS (summary);
+
        g_free (info->path);
-       g_slice_free1 (summary->store_info_size, info);
+       g_slice_free1 (class->store_info_size, info);
 }
 
 static void
@@ -260,6 +264,7 @@ camel_store_summary_class_init (CamelStoreSummaryClass *class)
        object_class->dispose = store_summary_dispose;
        object_class->finalize = store_summary_finalize;
 
+       class->store_info_size = sizeof (CamelStoreInfo);
        class->summary_header_load = store_summary_summary_header_load;
        class->summary_header_save = store_summary_summary_header_save;
        class->store_info_new  = store_summary_store_info_new;
@@ -273,7 +278,6 @@ static void
 camel_store_summary_init (CamelStoreSummary *summary)
 {
        summary->priv = CAMEL_STORE_SUMMARY_GET_PRIVATE (summary);
-       summary->store_info_size = sizeof (CamelStoreInfo);
 
        summary->priv->version = CAMEL_STORE_SUMMARY_VERSION;
 
@@ -780,11 +784,15 @@ camel_store_summary_remove_path (CamelStoreSummary *summary,
 CamelStoreInfo *
 camel_store_summary_info_new (CamelStoreSummary *summary)
 {
+       CamelStoreSummaryClass *class;
        CamelStoreInfo *info;
 
        g_return_val_if_fail (CAMEL_IS_STORE_SUMMARY (summary), NULL);
 
-       info = g_slice_alloc0 (summary->store_info_size);
+       class = CAMEL_STORE_SUMMARY_GET_CLASS (summary);
+       g_return_val_if_fail (class->store_info_size > 0, NULL);
+
+       info = g_slice_alloc0 (class->store_info_size);
        info->refcount = 1;
 
        return info;
index 666dcbf..4cabcfa 100644 (file)
@@ -80,9 +80,6 @@ struct _CamelStoreSummary {
        CamelObject parent;
        CamelStoreSummaryPrivate *priv;
 
-       /* sizes of memory objects */
-       guint32 store_info_size;
-
        GPtrArray *folders;     /* CamelStoreInfo's */
        GHashTable *folders_path; /* CamelStoreInfo's by path name */
 };
@@ -90,6 +87,9 @@ struct _CamelStoreSummary {
 struct _CamelStoreSummaryClass {
        CamelObjectClass parent_class;
 
+       /* size of memory objects */
+       gsize store_info_size;
+
        /* load/save the global info */
        gint            (*summary_header_load)  (CamelStoreSummary *summary,
                                                 FILE *file);
index a04291f..4f618bd 100644 (file)
@@ -55,6 +55,7 @@ camel_nntp_store_summary_class_init (CamelNNTPStoreSummaryClass *class)
        CamelStoreSummaryClass *store_summary_class;
 
        store_summary_class = CAMEL_STORE_SUMMARY_CLASS (class);
+       store_summary_class->store_info_size = sizeof (CamelNNTPStoreInfo);
        store_summary_class->summary_header_load = summary_header_load;
        store_summary_class->summary_header_save = summary_header_save;
        store_summary_class->store_info_load = store_info_load;
@@ -66,11 +67,6 @@ camel_nntp_store_summary_class_init (CamelNNTPStoreSummaryClass *class)
 static void
 camel_nntp_store_summary_init (CamelNNTPStoreSummary *nntp_store_summary)
 {
-       CamelStoreSummary *store_summary;
-
-       store_summary = CAMEL_STORE_SUMMARY (nntp_store_summary);
-       store_summary->store_info_size = sizeof (CamelNNTPStoreInfo);
-
        nntp_store_summary->version = CAMEL_NNTP_STORE_SUMMARY_VERSION;
 
        memset (