Use an array instead of a list for the entries in a feed
authorThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Sun, 12 Oct 2008 15:46:26 +0000 (12:46 -0300)
committerThadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
Sun, 12 Oct 2008 15:58:48 +0000 (12:58 -0300)
atom/feed.c

index cbd9161..6e6f101 100644 (file)
@@ -25,7 +25,7 @@
 
 struct _atom_feed
 {
-  GList *entries;
+  GPtrArray *entries;
 };
 
 AtomFeed *
@@ -33,25 +33,26 @@ atom_feed_new (void)
 {
   AtomFeed *feed;
   feed = g_slice_new (AtomFeed);
-  feed->entries = NULL;
+  feed->entries = g_ptr_array_new ();;
   return feed;
 }
 
 void
 atom_feed_delete (AtomFeed *feed)
 {
-  GList *l;
-  for (l = g_list_first (feed->entries); l != NULL; l = l->next)
+  int i;
+  for (i = 0; i < feed->entries->len; i++)
     {
-      atom_entry_delete (l->data);
+      atom_entry_delete (g_ptr_array_index (feed->entries, i));
     }
+  g_ptr_array_free (feed->entries, TRUE);
   g_slice_free (AtomFeed, feed);
 }
 
 void
 atom_feed_entry_append (AtomFeed *feed, AtomEntry *entry)
 {
-  feed->entries = g_list_prepend (feed->entries, entry);
+  g_ptr_array_add (feed->entries, entry);
 }
 
 void
@@ -60,7 +61,7 @@ atom_feed_entry_append_array (AtomFeed *feed, AtomEntry **entries, size_t len)
   int i;
   for (i = 0; i < len; i++)
     {
-      feed->entries = g_list_prepend (feed->entries, entries[i]);
+      g_ptr_array_add (feed->entries, entries[i]);
     }
 }
 
@@ -69,12 +70,12 @@ atom_feed_to_xmlnode (AtomFeed *feed)
 {
   xmlNodePtr node;
   xmlNodePtr entry;
-  GList *l;
+  int i;
   node = xmlNewNode (NULL, "feed");
   xmlNewNs (node, ATOM_NAMESPACE, NULL);
-  for (l = g_list_last (feed->entries); l != NULL; l = l->prev)
+  for (i = feed->entries->len - 1; i >= 0; i--)
     {
-      entry = atom_entry_to_xmlnode (l->data);
+      entry = atom_entry_to_xmlnode (g_ptr_array_index (feed->entries, i));
       xmlAddChild (node, entry);
     }
   return node;