[Goodies-commits] r5678 - xfbib/branches/gobject/src

David Gustafsson tssj at xfce.org
Sat Oct 18 19:26:15 CEST 2008


Author: tssj
Date: 2008-10-18 17:26:14 +0000 (Sat, 18 Oct 2008)
New Revision: 5678

Modified:
   xfbib/branches/gobject/src/xfbib-bibtex-value.c
   xfbib/branches/gobject/src/xfbib-bibtex.c
   xfbib/branches/gobject/src/xfbib-bibtex.h
Log:
Change the GList to GSequence for people having Glib 2.14 or later


Modified: xfbib/branches/gobject/src/xfbib-bibtex-value.c
===================================================================
--- xfbib/branches/gobject/src/xfbib-bibtex-value.c	2008-10-18 16:29:40 UTC (rev 5677)
+++ xfbib/branches/gobject/src/xfbib-bibtex-value.c	2008-10-18 17:26:14 UTC (rev 5678)
@@ -188,16 +188,16 @@
 	
 	if (g_list_length(value->list) == 1) {
 		obj = g_list_nth_data(value->list, 0);
-		if (XFBIB_IS_BIBTEX_STRING(obj)) {
-			/* variable */
-			return "todo: variable";
-		} else if (XFBIB_IS_STRING(obj)) {
+		if (XFBIB_IS_STRING(obj)) {
 			/* regular string */
 			return xfbib_string_get(XFBIB_STRING(obj));
 		} else if (XFBIB_IS_INTEGER(obj)) {
 			/* integer value */
 			return xfbib_integer_get(XFBIB_INTEGER(obj));
-		}	
+		} else if (XFBIB_IS_BIBTEX_STRING(obj)) {
+			/* variable */
+			return "todo: variable";
+		}
 	}
 	return NULL;
 }

Modified: xfbib/branches/gobject/src/xfbib-bibtex.c
===================================================================
--- xfbib/branches/gobject/src/xfbib-bibtex.c	2008-10-18 16:29:40 UTC (rev 5677)
+++ xfbib/branches/gobject/src/xfbib-bibtex.c	2008-10-18 17:26:14 UTC (rev 5678)
@@ -17,8 +17,12 @@
 struct _XfbibBibtex
 {
 	GObject parent;
+	gint n_entries;
+#if GLIB_CHECK_VERSION (2, 14, 0)
+	GSequence *seq;
+#elif
 	GList *list;
-	gint n_entries;
+#endif
 };
 
 typedef struct _XfbibBibtexClass
@@ -43,13 +47,19 @@
 static void
 xfbib_bibtex_init(XfbibBibtex *instance)
 {
+#if GLIB_CHECK_VERSION (2, 14, 0)
+	instance->seq = g_sequence_new(g_object_unref);
+#elif
 	instance->list = NULL;
+#endif
 	instance->n_entries = 0;
+
 }
 
 static void
 xfbib_bibtex_finalize(GObject *obj)
 {
+	/* TODO: Free the Bibtex List/Sequence */
 	G_OBJECT_CLASS(xfbib_bibtex_parent_class)->finalize(obj);
 }
 
@@ -128,7 +138,11 @@
 			if (buf->len > 0) {
 				/* The comment ended put it in the list */
 				obj = G_OBJECT(xfbib_bibtex_comment_new(buf->str));
+#if GLIB_CHECK_VERSION (2, 14, 0)
+				g_sequence_append(elements->seq, obj);
+#elif
 				elements->list = g_list_append(elements->list, obj);
+#endif
 				buf = g_string_erase(buf, 0, -1);
 			}
 			if (g_ascii_strncasecmp(&str[i], "@comment", 8) == 0) {
@@ -140,22 +154,36 @@
 				buf = g_string_append_c(buf, str[i]);
 
 				obj = G_OBJECT(xfbib_bibtex_comment_new(buf->str));
+#if GLIB_CHECK_VERSION (2, 14, 0)
+				g_sequence_append(elements->seq, obj);
+#elif
 				elements->list = g_list_append(elements->list, obj);
+#endif
 				buf = g_string_erase(buf, 0, -1);
 			} else if (g_ascii_strncasecmp(&str[i], "@preamble", 9) == 0) {
 				/* Preamble */
 				if (parse_balanced_brackets(buf, str, &i)) {
 					obj = G_OBJECT(xfbib_bibtex_preamble_new());
-					if (xfbib_bibtex_preamble_parse(XFBIB_BIBTEX_PREAMBLE(obj), buf->str))
+					if (xfbib_bibtex_preamble_parse(XFBIB_BIBTEX_PREAMBLE(obj), buf->str)) {
+#if GLIB_CHECK_VERSION (2, 14, 0)
+						g_sequence_append(elements->seq, obj);
+#elif
 						elements->list = g_list_append(elements->list, obj);
+#endif
+					}
 				}
 				buf = g_string_erase(buf, 0, -1);
 			} else if (g_ascii_strncasecmp(&str[i], "@string", 7) == 0) {
 				/* String */
 				if (parse_balanced_brackets(buf, str, &i)) {
 					obj = G_OBJECT(xfbib_bibtex_string_new());
-					if (xfbib_bibtex_string_parse(XFBIB_BIBTEX_STRING(obj), buf->str))
+					if (xfbib_bibtex_string_parse(XFBIB_BIBTEX_STRING(obj), buf->str)) {
+#if GLIB_CHECK_VERSION (2, 14, 0)
+						g_sequence_append(elements->seq, obj);
+#elif
 						elements->list = g_list_append(elements->list, obj);
+#endif
+					}
 				}
 				buf = g_string_erase(buf, 0, -1);
 			} else if (g_regex_match (regex, &str[i], 0, NULL)) {
@@ -164,7 +192,11 @@
 					obj = G_OBJECT(xfbib_bibtex_entry_new());
 					if (xfbib_bibtex_entry_parse(XFBIB_BIBTEX_ENTRY(obj), buf->str)) {
 						elements->n_entries++;
+#if GLIB_CHECK_VERSION (2, 14, 0)
+						g_sequence_append(elements->seq, obj);
+#elif
 						elements->list = g_list_append(elements->list, obj);
+#endif
 					}
 				}
 				buf = g_string_erase(buf, 0, -1);
@@ -184,23 +216,7 @@
 	return TRUE;
 }
 
-
-GList *
-xfbib_bibtex_get_list(XfbibBibtex *elements)
-{
-	g_return_val_if_fail(XFBIB_IS_BIBTEX(elements), NULL);
-	return elements->list;
-}
-
 gint
-xfbib_bibtex_get_size(XfbibBibtex *elements)
-{
-	g_return_val_if_fail(XFBIB_IS_BIBTEX(elements), 0);
-	return g_list_length(elements->list);
-}
-
-
-gint
 xfbib_bibtex_get_n_entries(XfbibBibtex *elements)
 {
 	g_return_val_if_fail(XFBIB_IS_BIBTEX(elements), 0);
@@ -212,18 +228,35 @@
 xfbib_bibtex_get_nth_entry(XfbibBibtex *elements, gint n)
 {
 	GObject *obj;
-	gint i, len, found;
+	gint found;
 	g_return_val_if_fail(XFBIB_IS_BIBTEX(elements)
 			&& n < elements->n_entries, NULL);
 
+
+#if GLIB_CHECK_VERSION (2, 14, 0)
+	GSequenceIter *iter;
+	for (iter = g_sequence_get_begin_iter(elements->seq), found = -1;
+			!g_sequence_iter_is_end(iter); iter = g_sequence_iter_next(iter)) {
+		obj = g_sequence_get(iter);
+		if (XFBIB_IS_BIBTEX_ENTRY(obj)) {
+			if (++found == n) {
+				return XFBIB_BIBTEX_ENTRY(obj);
+			}
+		}
+	}
+	if (g_sequence_iter_is_end(iter))
+#elif
+	gint i, len;
 	len = g_list_length(elements->list);
 	for (i = 0, found = -1; i < len; i++) {
 		obj = g_list_nth_data(elements->list, i);
 		if (XFBIB_IS_BIBTEX_ENTRY(obj)) {
-			if (++found == n)
+			if (++found == n) {
 				return XFBIB_BIBTEX_ENTRY(obj);
+			}
 		}
 	}
+#endif
 	return NULL;
 }
 
@@ -232,18 +265,34 @@
 xfbib_bibtex_get_entry_position(XfbibBibtex *elements, XfbibBibtexEntry *entry)
 {
 	GObject *obj;
-	gint i, len, n;
+	gint n;
 	g_return_val_if_fail(XFBIB_IS_BIBTEX(elements), -1);
 
+#if GLIB_CHECK_VERSION (2, 14, 0)
+	GSequenceIter *iter;
+	for (iter = g_sequence_get_begin_iter(elements->seq), n = -1;
+			!g_sequence_iter_is_end(iter); iter = g_sequence_iter_next(iter)) {
+		obj = g_sequence_get(iter);
+		if (XFBIB_IS_BIBTEX_ENTRY(obj)) {
+			n++;
+			if (XFBIB_BIBTEX_ENTRY(obj) == entry) {
+				return n;
+			}
+		}
+	}
+#elif
+	gint i, len;
 	len = g_list_length(elements->list);
 	for (i = 0, n = -1; i < len; i++) {
 		obj = g_list_nth_data(elements->list, i);
 		if (XFBIB_IS_BIBTEX_ENTRY(obj)) {
 			n++;
-			if (XFBIB_BIBTEX_ENTRY(obj) == entry)
+			if (XFBIB_BIBTEX_ENTRY(obj) == entry) {
 				return n;
+			}
 		}
 	}
+#endif
 	return -1;
 }
 
@@ -251,20 +300,38 @@
 xfbib_bibtex_get_next_entry(XfbibBibtex *elements, XfbibBibtexEntry *entry)
 {
 	GObject *obj;
-	gint i, len;
 	g_return_val_if_fail(XFBIB_IS_BIBTEX(elements), NULL);
 
+#if GLIB_CHECK_VERSION (2, 14, 0)
+	GSequenceIter *iter;
+	for (iter = g_sequence_get_begin_iter(elements->seq);
+			!g_sequence_iter_is_end(iter); iter = g_sequence_iter_next(iter)) {
+		obj = g_sequence_get(iter);
+		if (obj == G_OBJECT(entry)) {
+			for (iter = g_sequence_iter_next(iter); !g_sequence_iter_is_end(iter);
+					iter = g_sequence_iter_next(iter)) {
+				obj = g_sequence_get(iter);
+				if (XFBIB_IS_BIBTEX_ENTRY(obj)) {
+					return XFBIB_BIBTEX_ENTRY(obj);
+				}
+			}
+		}
+	}
+#elif
+	gint i, len;
 	len = g_list_length(elements->list);
 	for (i = 0; i < len; i++) {
 		obj = g_list_nth_data(elements->list, i);
 		if (obj == G_OBJECT(entry)) {
 			for (i++; i < len; i++) {
 				obj = g_list_nth_data(elements->list, i);
-				if (XFBIB_IS_BIBTEX_ENTRY(obj))
+				if (XFBIB_IS_BIBTEX_ENTRY(obj)) {
 					return XFBIB_BIBTEX_ENTRY(obj);
+				}
 			}
 		}
 	}
+#endif
 	return NULL;
 }
 
@@ -273,27 +340,44 @@
 xfbib_bibtex_remove(XfbibBibtex *elements, GObject *data)
 {
 	GObject *obj;
+	g_return_if_fail(XFBIB_IS_BIBTEX(elements));
+#if GLIB_CHECK_VERSION (2, 14, 0)
+	GSequenceIter *iter;
+	for (iter = g_sequence_get_begin_iter(elements->seq);
+			!g_sequence_iter_is_end(iter); iter = g_sequence_iter_next(iter)) {
+		if ((obj = g_sequence_get(iter)) == data) {
+			if(XFBIB_IS_BIBTEX_ENTRY(obj))
+				elements->n_entries--;
+			g_sequence_remove(iter);
+		}
+	}
+#elif
 	gint i, len;
-	g_return_if_fail(XFBIB_IS_BIBTEX(elements));
-
 	len = g_list_length(elements->list);
 	for (i = 0; i < len; i++) {
 		if ((obj = g_list_nth_data(elements->list, i)) == data) {
-			elements->list = g_list_remove(elements->list, obj);
 			if(XFBIB_IS_BIBTEX_ENTRY(obj))
 				elements->n_entries--;
+			elements->list = g_list_remove(elements->list, obj);
 			g_object_unref(obj);
 		}
 	}
+#endif
 }
 
 void
 xfbib_bibtex_remove_all(XfbibBibtex *elements)
 {
 	g_return_if_fail(XFBIB_IS_BIBTEX(elements));
+#if GLIB_CHECK_VERSION (2, 14, 0)
+	g_sequence_remove_range(g_sequence_get_begin_iter(elements->seq),
+			g_sequence_get_end_iter(elements->seq));
+	elements->seq = g_sequence_new(g_object_unref);
+#elif
 	g_list_foreach (elements->list, (GFunc) g_object_unref, NULL);
 	g_list_free (elements->list);
 	elements->list = NULL;
+#endif
 	elements->n_entries = 0;
 }
 
@@ -303,7 +387,11 @@
 	g_return_if_fail(XFBIB_IS_BIBTEX(elements));
 	g_return_if_fail(XFBIB_IS_BIBTEX_ENTRY(entry));
 
+#if GLIB_CHECK_VERSION (2, 14, 0)
+	g_sequence_append(elements->seq, G_OBJECT(entry));
+#elif
 	elements->list = g_list_append(elements->list, G_OBJECT(entry));
+#endif
 	elements->n_entries++;
 }
 

Modified: xfbib/branches/gobject/src/xfbib-bibtex.h
===================================================================
--- xfbib/branches/gobject/src/xfbib-bibtex.h	2008-10-18 16:29:40 UTC (rev 5677)
+++ xfbib/branches/gobject/src/xfbib-bibtex.h	2008-10-18 17:26:14 UTC (rev 5678)
@@ -19,8 +19,6 @@
 
 XfbibBibtex *xfbib_bibtex_new();
 gboolean xfbib_bibtex_parse(XfbibBibtex *, const gchar *);
-GList *xfbib_bibtex_get_list(XfbibBibtex *);
-gint xfbib_bibtex_get_size(XfbibBibtex *);
 gint xfbib_bibtex_get_n_entries(XfbibBibtex *);
 XfbibBibtexEntry *xfbib_bibtex_get_nth_entry(XfbibBibtex *, gint);
 gint xfbib_bibtex_get_entry_position(XfbibBibtex *, XfbibBibtexEntry *);




More information about the Goodies-commits mailing list