[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