SF.net SVN: geany-plugins:[1264] trunk/geanygendoc/src

colombanw at users.sourceforge.net colombanw at xxxxx
Wed Apr 21 13:22:25 UTC 2010


Revision: 1264
          http://geany-plugins.svn.sourceforge.net/geany-plugins/?rev=1264&view=rev
Author:   colombanw
Date:     2010-04-21 13:22:25 +0000 (Wed, 21 Apr 2010)

Log Message:
-----------
GeanyGenDoc: Add sort direction argument to ggd_tag_sort_by_line()

Provide a way to chose sort direction (ascending or descending) with
ggd_tag_sort_by_line().

Modified Paths:
--------------
    trunk/geanygendoc/src/ggd-tag-utils.c
    trunk/geanygendoc/src/ggd-tag-utils.h

Modified: trunk/geanygendoc/src/ggd-tag-utils.c
===================================================================
--- trunk/geanygendoc/src/ggd-tag-utils.c	2010-04-21 13:21:51 UTC (rev 1263)
+++ trunk/geanygendoc/src/ggd-tag-utils.c	2010-04-21 13:22:25 UTC (rev 1264)
@@ -28,22 +28,25 @@
 
 
 /* Compare function for g_ptr_array_sort() to compare two TMTag by their
- * lines */
+ * lines.
+ * (gint)data is strictly positive for ASC sort, strictly negative DESC sort */
 static gint
 tag_cmp_by_line (gconstpointer a,
-                 gconstpointer b)
+                 gconstpointer b,
+                 gpointer      data)
 {
-  const TMTag *t1 = *((const TMTag**)a);
-  const TMTag *t2 = *((const TMTag**)b);
-  gint rv;
+  const TMTag  *t1 = *((const TMTag**)a);
+  const TMTag  *t2 = *((const TMTag**)b);
+  gint          direction = GPOINTER_TO_INT (data);
+  gint          rv;
   
   if (t1->type & tm_tag_file_t || t2->type & tm_tag_file_t) {
     rv = 0;
   } else {
     if (t1->atts.entry.line > t2->atts.entry.line) {
-      rv = 1;
+      rv = +direction;
     } else if (t1->atts.entry.line < t2->atts.entry.line) {
-      rv = -1;
+      rv = -direction;
     } else {
       rv = 0;
     }
@@ -52,12 +55,24 @@
   return rv;
 }
 
+/**
+ * ggd_tag_sort_by_line:
+ * @tags: A #GPtrArray of #TMTag<!-- -->s
+ * @direction: Sort direction: %GGD_SORT_ASC for an ascending sort or
+ *             %GGD_SORT_DESC for a descending sort.
+ * 
+ * Sorts a #GPtrArray of #TMTag<!-- -->s by the tags' line position. The sort
+ * direction depend on @direction.
+ */
 void
-ggd_tag_sort_by_line (GPtrArray *tags)
+ggd_tag_sort_by_line (GPtrArray  *tags,
+                      gint        direction)
 {
   g_return_if_fail (tags != NULL);
+  g_return_if_fail (direction != 0);
   
-  g_ptr_array_sort (tags, tag_cmp_by_line);
+  g_ptr_array_sort_with_data (tags, tag_cmp_by_line,
+                              GINT_TO_POINTER (direction));
 }
 
 TMTag *

Modified: trunk/geanygendoc/src/ggd-tag-utils.h
===================================================================
--- trunk/geanygendoc/src/ggd-tag-utils.h	2010-04-21 13:21:51 UTC (rev 1263)
+++ trunk/geanygendoc/src/ggd-tag-utils.h	2010-04-21 13:22:25 UTC (rev 1264)
@@ -26,7 +26,11 @@
 G_BEGIN_DECLS
 
 
-void          ggd_tag_sort_by_line            (GPtrArray  *tags);
+#define GGD_SORT_ASC  (1)
+#define GGD_SORT_DESC (-1)
+
+void          ggd_tag_sort_by_line            (GPtrArray *tags,
+                                               gint       direction);
 TMTag        *ggd_tag_find_from_line          (const GPtrArray *tags,
                                                gulong           line);
 TMTag        *ggd_tag_find_at_current_pos     (GeanyDocument *doc);


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Plugins-Commits mailing list