Updating branch refs/heads/peter/btree
         to d3cc31e6fb872e00eaad4291746c551435eea1c2 (commit)
       from aab3b4e8d7e06ca64357cb927df63ab25d7a8bc6 (commit)

commit d3cc31e6fb872e00eaad4291746c551435eea1c2
Author: Peter de Ridder <[email protected]>
Date:   Sun Oct 2 12:09:39 2011 +0200

    Replaced archive iter buffer slist with a btree
    
    The btree isn't balanced and delete isn't supported

 libsqueeze/Makefile.am          |    2 +-
 libsqueeze/archive-iter.c       |  188 +++++++++++++++++---------------------
 libsqueeze/archive.c            |    2 +-
 libsqueeze/btree.c              |  191 +++++++++++++++++++++++++++++++++++++++
 libsqueeze/{slist.h => btree.h} |   42 ++++-----
 libsqueeze/slist.c              |  109 ----------------------
 6 files changed, 295 insertions(+), 239 deletions(-)

diff --git a/libsqueeze/Makefile.am b/libsqueeze/Makefile.am
index 51cc350..b7beadb 100644
--- a/libsqueeze/Makefile.am
+++ b/libsqueeze/Makefile.am
@@ -5,6 +5,7 @@ libsqueeze_2_la_SOURCES =  \
        archive-iter-pool.c archive-iter-pool.h \
        archive-iter.c archive-iter.h \
        archive-tempfs.c archive-tempfs.h \
+       btree.c btree.h \
        command-queue.c command-queue.h \
        command-option.c command-option.h \
        internals.c internals.h \
@@ -13,7 +14,6 @@ libsqueeze_2_la_SOURCES =  \
        parser-context.c parser-context.h \
        parser.c parser.h \
        scanf-parser.c scanf-parser.h \
-       slist.c slist.h \
        support-reader.c support-reader.h \
        support-template.c support-template.h \
        support-factory.c support-factory.h
diff --git a/libsqueeze/archive-iter.c b/libsqueeze/archive-iter.c
index 6288535..8762777 100644
--- a/libsqueeze/archive-iter.c
+++ b/libsqueeze/archive-iter.c
@@ -13,7 +13,6 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
-
 #include <config.h>
 #include <string.h>
 #include <glib.h>
@@ -25,7 +24,7 @@
 #include "libsqueeze.h"
 #include "libsqueeze-view.h"
 #include "support-factory.h"
-#include "slist.h"
+#include "btree.h"
 
 #include "internals.h"
 
@@ -39,10 +38,6 @@ guint buffer_flush_size = LSQ_ENTRY_CHILD_BUFFER_SIZE;
 #define LSQ_ENTRY_CHILD_BUFFER_SIZE buffer_flush_size
 #endif
 
-#ifndef LSQ_ENTRY_BUFFER_INTERVALSIZE
-#define LSQ_ENTRY_BUFFER_INTERVALSIZE 20
-#endif
-
 #ifndef LSQ_MIME_DIRECTORY
 #define LSQ_MIME_DIRECTORY "inode/directory"
 #endif
@@ -69,8 +64,6 @@ inline static LSQArchiveEntry*
 lsq_archive_entry_nth_child(const LSQArchiveEntry *, guint);
 inline static void
 lsq_archive_entry_flush_buffer(LSQArchiveEntry *);
-inline static void
-lsq_archive_entry_build_buffer_index(LSQArchiveEntry *);
 static LSQArchiveEntry *
 lsq_archive_entry_get_child(const LSQArchiveEntry *, const gchar *);
 static LSQArchiveEntry *
@@ -102,8 +95,8 @@ struct _LSQArchiveEntry
        gchar *content_type;
        gpointer props;
        LSQArchiveEntry **children;
-       LSQSList *buffer;
-       LSQSIndexList *buffer_index;
+       LSQBTree *buffer;
+        guint buffer_length;
 };
 
 
@@ -989,7 +982,10 @@ static void
 lsq_archive_entry_save_free(const LSQArchive *archive, LSQArchiveEntry *entry)
 {
        guint i = 0; 
-       LSQSList *buffer_iter = entry->buffer;
+       LSQBTree *buffer_iter;
+
+       entry->buffer = lsq_btree_flatten(entry->buffer);
+       buffer_iter = entry->buffer;
 
        /* free the buffer */
        for ( ; NULL != buffer_iter ; buffer_iter = buffer_iter->next )
@@ -999,8 +995,9 @@ lsq_archive_entry_save_free(const LSQArchive *archive, 
LSQArchiveEntry *entry)
                else
                        lsq_archive_entry_save_free(archive, 
buffer_iter->entry);
        }
-       lsq_slist_free(entry->buffer);
+       lsq_btree_free(entry->buffer);
        entry->buffer = NULL;
+        entry->buffer_length = 0;
 
        /* free the sorted list */
        if ( NULL != entry->children )
@@ -1026,15 +1023,19 @@ static void
 lsq_archive_entry_free(const LSQArchive *archive, LSQArchiveEntry *entry)
 {
        guint i = 0; 
-       LSQSList *buffer_iter = entry->buffer;
+       LSQBTree *buffer_iter;
+
+       entry->buffer = lsq_btree_flatten(entry->buffer);
+       buffer_iter = entry->buffer;
 
        /* free the buffer */
        for ( ; NULL != buffer_iter; buffer_iter = buffer_iter->next )
        {
                lsq_archive_entry_free(archive, buffer_iter->entry);
        }
-       lsq_slist_free(entry->buffer);
+       lsq_btree_free(entry->buffer);
        entry->buffer = NULL;
+        entry->buffer_length = 0;
 
        /* free the sorted list */
        if ( NULL != entry->children )
@@ -1078,7 +1079,7 @@ inline static guint
 lsq_archive_entry_n_children(const LSQArchiveEntry *entry)
 {
        /* the first element of the array (*entry->children) contains the size 
of the array */
-       return ((entry->children?GPOINTER_TO_UINT(*entry->children):0) + 
lsq_slist_length(entry->buffer));
+       return ((entry->children?GPOINTER_TO_UINT(*entry->children):0) + 
lsq_btree_length(entry->buffer));
 }
 
 inline static LSQArchiveEntry*
@@ -1099,7 +1100,7 @@ lsq_archive_entry_flush_buffer(LSQArchiveEntry *entry)
        guint new_i = 1;
        guint size;
        guint n_children;
-       LSQSList *buffer_iter = NULL;
+       LSQBTree *buffer_iter = NULL;
        LSQArchiveEntry **children_old;
 
        if ( NULL == entry->buffer )
@@ -1107,12 +1108,17 @@ lsq_archive_entry_flush_buffer(LSQArchiveEntry *entry)
                return;
        }
 
+       //lsq_btree_print(entry->buffer);
+
+       /* Flatten the btree so we can iterate */
+       entry->buffer = lsq_btree_flatten(entry->buffer);
+
        /* the first element of the array (*entry->children) contains the size 
of the array */
        size = entry->children?GPOINTER_TO_UINT(*entry->children):0;
        n_children = size;
        children_old = (LSQArchiveEntry **)entry->children;
 
-       max_children = (n_children + lsq_slist_length(entry->buffer));
+       max_children = (n_children + lsq_btree_length(entry->buffer));
        
        /* do all elements of the buffer */
        entry->children = g_new(LSQArchiveEntry *, max_children+1);
@@ -1164,44 +1170,17 @@ lsq_archive_entry_flush_buffer(LSQArchiveEntry *entry)
        *entry->children = GUINT_TO_POINTER(n_children);
        
        /* free the buffer */
-       lsq_slist_free(entry->buffer);
+       lsq_btree_free(entry->buffer);
        entry->buffer = NULL;
-       lsq_slist_index_free(entry->buffer_index);
-       entry->buffer_index = NULL;
+        entry->buffer_length = 0;
 
        g_free(children_old);
 }
 
-inline static void
-lsq_archive_entry_build_buffer_index(LSQArchiveEntry *entry)
-{
-       guint i = 0;
-       LSQSList *buffer_iter = NULL;
-       LSQSIndexList **index_iter = &entry->buffer_index;
-       for ( buffer_iter = entry->buffer ; NULL != buffer_iter ; buffer_iter = 
buffer_iter->next )
-       {
-               ++i;
-               if ( 0 == ( i % LSQ_ENTRY_BUFFER_INTERVALSIZE ) )
-               {
-                       if ( NULL == *index_iter )
-                       {
-                               *index_iter = lsq_slist_index_new();
-                       }
-
-                       (*index_iter)->index = buffer_iter;
-
-                       index_iter = &((*index_iter)->next);
-               }
-       }
-       lsq_slist_index_free(*index_iter);
-       *index_iter = NULL;
-}
-
 static LSQArchiveEntry *
 lsq_archive_entry_get_child(const LSQArchiveEntry *entry, const gchar 
*filename)
 {
-       LSQSList *entry_buffer, *buffer_iter = NULL;
-       LSQSIndexList *index_iter = NULL;
+       LSQBTree *buffer_iter = NULL;
        /* the first element of the array (*entry->children) contains the size 
of the array */
        guint size = entry->children?GPOINTER_TO_UINT(*entry->children):0;
        guint pos = 0;
@@ -1240,37 +1219,25 @@ lsq_archive_entry_get_child(const LSQArchiveEntry 
*entry, const gchar *filename)
                }
        }
 
-       /* find a start index into the buffer */
-       entry_buffer = entry->buffer;
-       for ( index_iter = entry->buffer_index; NULL != index_iter; index_iter 
= index_iter->next )
-       {
-               cmp = strcmp(filename, index_iter->index->entry->filename);
-
-               if ( 0 == cmp )
-               {
-                       g_free(_filename);
-                       return index_iter->index->entry;
-               }
-               if ( 0 > cmp )
-               {
-                       break;
-               }
-               entry_buffer = index_iter->index;
-       }
-
        /* search the buffer */
-       for ( buffer_iter = entry_buffer; NULL != buffer_iter; buffer_iter = 
buffer_iter->next )
+       buffer_iter = entry->buffer;
+       while ( NULL != buffer_iter )
        {
+               /* archive can be NULL */
                cmp = strcmp(filename, buffer_iter->entry->filename);
 
-               if ( 0 == cmp )
+               if ( cmp < 0 )
                {
-                       g_free(_filename);
-                       return buffer_iter->entry;
+                   buffer_iter = buffer_iter->left;
                }
-               if ( 0 > cmp )
+               else if ( cmp > 0 )
                {
-                       break;
+                   buffer_iter = buffer_iter->right;
+               }
+               else
+               {
+                   g_free(_filename);
+                   return buffer_iter->entry;
                }
        }
 
@@ -1289,7 +1256,6 @@ lsq_archive_entry_add_child(LSQArchiveEntry *parent, 
const gchar *filename)
 {
        LSQArchiveEntry *child = lsq_archive_entry_new(filename);
        const gchar *contenttype = lsq_archive_entry_get_contenttype(parent);
-       guint length;
 
        if ( ( NULL == contenttype ) || ( 0 != strcmp ( contenttype, 
LSQ_MIME_DIRECTORY ) ) )
        {
@@ -1300,19 +1266,16 @@ lsq_archive_entry_add_child(LSQArchiveEntry *parent, 
const gchar *filename)
                */
        }
 
-       parent->buffer = lsq_slist_insert_sorted_single(parent->buffer, child, 
(GCompareFunc)lsq_archive_entry_filename_compare);
+       //g_debug("i: %s", filename);
+       parent->buffer = lsq_btree_insert_sorted_single(parent->buffer, child, 
(GCompareFunc)lsq_archive_entry_filename_compare);
 
-       /* TODO: cache the length so we doen't have to check every time? */
-       length = lsq_slist_length(parent->buffer);
+       /* Cache the length so we doen't have to check every time */
+       parent->buffer_length++;
 
-       if ( LSQ_ENTRY_CHILD_BUFFER_SIZE == length )
+       if ( LSQ_ENTRY_CHILD_BUFFER_SIZE == parent->buffer_length )
        {
                lsq_archive_entry_flush_buffer(parent);
        }
-       else if ( 0 == ( length % LSQ_ENTRY_BUFFER_INTERVALSIZE ) )
-       {
-               lsq_archive_entry_build_buffer_index(parent);
-       }
        
        return child;
 }
@@ -1320,7 +1283,7 @@ lsq_archive_entry_add_child(LSQArchiveEntry *parent, 
const gchar *filename)
 static gboolean
 lsq_archive_entry_remove_child(LSQArchiveEntry *entry, const gchar *filename)
 {
-       LSQSList *buffer_iter = NULL, *prev_iter = NULL;
+       LSQBTree *buffer_iter = NULL, **prev_iter = NULL;
 
        /* the first element of the array (*entry->children) contains the size 
of the array */
        guint total_size, size = total_size = 
entry->children?GPOINTER_TO_UINT(*entry->children):0;
@@ -1370,28 +1333,47 @@ lsq_archive_entry_remove_child(LSQArchiveEntry *entry, 
const gchar *filename)
        }
 
        /* search the buffer */
-       for(buffer_iter = entry->buffer; buffer_iter; buffer_iter = 
buffer_iter->next)
-       {
-               cmp = strcmp(_filename, buffer_iter->entry->filename);
-
-               if ( 0 == cmp )
-               {
-                       g_free(_filename);
-                       if ( NULL != prev_iter )
-                       {
-                               prev_iter->next = buffer_iter->next;
-                       }
-                       else
-                       {
-                               entry->buffer = buffer_iter->next;
-                       }
-                       g_free(buffer_iter);
-                       return TRUE;
-               }
-               if(cmp < 0)
-                       break;
-               prev_iter = buffer_iter;
-       }
+        prev_iter = &entry->buffer;
+        if ( NULL == entry->buffer || NULL != entry->buffer->next )
+        {
+            for(buffer_iter = entry->buffer; buffer_iter; buffer_iter = 
buffer_iter->next)
+            {
+                cmp = strcmp(_filename, buffer_iter->entry->filename);
+
+                if ( 0 == cmp )
+                {
+                    g_free(_filename);
+                    *prev_iter = buffer_iter->next;
+                    g_free(buffer_iter);
+                    return TRUE;
+                }
+                if(cmp < 0)
+                    break;
+                prev_iter = &buffer_iter->next;
+            }
+        }
+        else
+        {
+            for ( buffer_iter = entry->buffer; NULL != buffer_iter; 
buffer_iter = *prev_iter )
+            {
+                /* archive can be NULL */
+                cmp = strcmp(filename, buffer_iter->entry->filename);
+
+                if ( cmp < 0 )
+                {
+                    prev_iter = &buffer_iter->left;
+                }
+                else if ( cmp > 0 )
+                {
+                    prev_iter = &buffer_iter->right;
+                }
+                else
+                {
+                    g_critical("todo");
+                    return TRUE;
+                }
+            }
+        }
 
        g_free(_filename);
        return FALSE;
diff --git a/libsqueeze/archive.c b/libsqueeze/archive.c
index a2dcd7e..262391b 100644
--- a/libsqueeze/archive.c
+++ b/libsqueeze/archive.c
@@ -31,7 +31,7 @@
 #include "support-template.h"
 #include "support-factory.h"
 
-#include "slist.h"
+#include "btree.h"
 #include "archive-tempfs.h"
 #include "command-queue.h"
 
diff --git a/libsqueeze/btree.c b/libsqueeze/btree.c
new file mode 100644
index 0000000..869bd80
--- /dev/null
+++ b/libsqueeze/btree.c
@@ -0,0 +1,191 @@
+/*
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU Library General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+#include <config.h>
+#include <string.h>
+#include <glib.h>
+#include <glib-object.h>
+#include <gio/gio.h>
+
+#include <libxfce4util/libxfce4util.h>
+
+#include "libsqueeze.h"
+#include "support-factory.h"
+#include "internals.h"
+#include "btree.h"
+
+#ifndef LSQ_BTREE_MAX_DEPTH
+#define LSQ_BTREE_MAX_DEPTH 500
+#endif
+
+LSQBTree *
+lsq_btree_insert_sorted_single (
+        LSQBTree *list,
+        LSQArchiveEntry *entry,
+        GCompareFunc cmp_func )
+{
+    gint cmp;
+    LSQBTree *iter;
+    LSQBTree **next = NULL;
+    LSQBTree *new_entry = NULL;
+    LSQBTree *stack[LSQ_BTREE_MAX_DEPTH];
+    guint stack_i = 0;
+
+    if ( NULL != list && NULL != list->next )
+    {
+        g_critical("Cannot insert into a flattened tree");
+        return NULL;
+    }
+
+    for ( iter = list; NULL != iter; iter = *next )
+    {
+        /* archive can be NULL */
+        cmp = cmp_func( entry, iter->entry );
+
+        if ( 0 > cmp )
+        {
+            next = &iter->left;
+        }
+        else if ( 0 < cmp )
+        {
+            next = &iter->right;
+        }
+        else
+        {
+            g_critical("THIS SHOULD NOT HAPPEN!!! (the universe has just 
collapsed)");
+            return NULL;
+        }
+
+        stack[stack_i++] = iter;
+       g_return_val_if_fail(stack_i < LSQ_BTREE_MAX_DEPTH, NULL);
+    }
+
+    new_entry = g_new0(LSQBTree, 1);
+    new_entry->entry = entry;
+
+    if ( NULL == next )
+    {
+        return new_entry;
+    }
+
+    *next = new_entry;
+
+    return list;
+}
+
+guint
+lsq_btree_length ( LSQBTree *list )
+{
+    guint size = 0;
+    LSQBTree *iter;
+    LSQBTree *stack[LSQ_BTREE_MAX_DEPTH];
+    guint stack_i = 0;
+
+    /* The tree is flattened */
+    if ( NULL == list || NULL != list->next )
+    {
+        for ( iter = list; NULL != iter; iter = iter->next)
+        {
+            size++;
+        }
+    }
+    else
+    {
+        do
+        {
+            for ( iter = list; NULL != iter; iter = iter->left )
+            {
+                stack[stack_i++] = iter;
+               g_return_val_if_fail(stack_i < LSQ_BTREE_MAX_DEPTH, 0);
+
+                size++;
+            }
+
+            list = stack[--stack_i]->right;
+        }
+        while ( 0 != stack_i || NULL != list );
+    }
+
+    return size;
+}
+
+void
+lsq_btree_free ( LSQBTree *list )
+{
+    LSQBTree *iter, *next;
+    LSQBTree *stack[LSQ_BTREE_MAX_DEPTH];
+    guint stack_i = 0;
+
+    /* The tree is flattened */
+    if ( NULL == list || NULL != list->next )
+    {
+        for ( iter = list; NULL != iter; iter = next)
+        {
+            next = iter->next;
+            g_free( iter );
+        }
+    }
+    else
+    {
+        do
+        {
+            for ( iter = list; NULL != iter; iter = iter->left )
+            {
+                stack[stack_i++] = iter;
+               g_return_if_fail(stack_i < LSQ_BTREE_MAX_DEPTH);
+            }
+
+            list = stack[--stack_i]->right;
+
+            g_free( stack[stack_i] );
+        }
+        while ( 0 != stack_i || NULL != list );
+    }
+}
+
+LSQBTree *
+lsq_btree_flatten ( LSQBTree *list )
+{
+    LSQBTree *iter, *next = list;
+    LSQBTree **prev = &list;
+    LSQBTree *stack[LSQ_BTREE_MAX_DEPTH];
+    guint stack_i = 0;
+
+    /* The tree is flattened */
+    if ( NULL == list || NULL != list->next )
+    {
+        return list;
+    }
+
+    do
+    {
+        for ( iter = next; NULL != iter; iter = iter->left )
+        {
+            stack[stack_i++] = iter;
+           g_return_val_if_fail(stack_i < LSQ_BTREE_MAX_DEPTH, NULL);
+        }
+
+        next = stack[--stack_i];
+
+        *prev = next;
+        prev = &next->next;
+
+        next = next->right;
+    }
+    while ( 0 != stack_i || NULL != next );
+
+    return list;
+}
+
diff --git a/libsqueeze/slist.h b/libsqueeze/btree.h
similarity index 57%
rename from libsqueeze/slist.h
rename to libsqueeze/btree.h
index 4772afc..67a067b 100644
--- a/libsqueeze/slist.h
+++ b/libsqueeze/btree.h
@@ -14,39 +14,31 @@
  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
 
-#ifndef __LSQ_SLIST_H__
-#define __LSQ_SLIST_H__
+#ifndef __LSQ_BTREE_H__
+#define __LSQ_BTREE_H__
 
-typedef struct _LSQSList LSQSList;
+typedef struct _LSQBTree LSQBTree;
 
-struct _LSQSList {
-       LSQArchiveEntry *entry;
-       LSQSList *next;
+struct _LSQBTree {
+    LSQArchiveEntry *entry;
+    LSQBTree *next;
+    LSQBTree *left;
+    LSQBTree *right;
 };
 
-LSQSList *
-lsq_slist_insert_sorted_single (
-        LSQSList *list,
+LSQBTree *
+lsq_btree_insert_sorted_single (
+        LSQBTree *list,
         LSQArchiveEntry *entry,
-        GCompareFunc) G_GNUC_INTERNAL;
+        GCompareFunc ) G_GNUC_INTERNAL;
 
 guint
-lsq_slist_length(LSQSList *list) G_GNUC_INTERNAL;
+lsq_btree_length ( LSQBTree *list ) G_GNUC_INTERNAL;
 
 void
-lsq_slist_free(LSQSList *list) G_GNUC_INTERNAL;
+lsq_btree_free ( LSQBTree *list ) G_GNUC_INTERNAL;
 
-typedef struct _LSQSIndexList LSQSIndexList;
+LSQBTree *
+lsq_btree_flatten ( LSQBTree *list ) G_GNUC_INTERNAL;
 
-struct _LSQSIndexList {
-    LSQSList *index;
-    LSQSIndexList *next;
-};
-
-LSQSIndexList *
-lsq_slist_index_new(void);
-
-void
-lsq_slist_index_free(LSQSIndexList *list);
-
-#endif /* __LSQ_SLIST_H__ */
+#endif /* __LSQ_BTREE_H__ */
diff --git a/libsqueeze/slist.c b/libsqueeze/slist.c
deleted file mode 100644
index b15cd8a..0000000
--- a/libsqueeze/slist.c
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU Library General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- */
-#include <config.h>
-#include <string.h>
-#include <glib.h>
-#include <glib-object.h>
-#include <gio/gio.h>
-
-#include <libxfce4util/libxfce4util.h>
-
-#include "libsqueeze.h"
-#include "support-factory.h"
-#include "internals.h"
-#include "slist.h"
-
-LSQSList *
-lsq_slist_insert_sorted_single ( 
-        LSQSList *list,
-        LSQArchiveEntry *entry,
-        GCompareFunc cmp_func)
-{
-    gint cmp = 1;
-    LSQSList *iter = list;
-    LSQSList *prev_entry = NULL;
-    LSQSList *new_entry = NULL;
-
-    for(; iter; iter = iter->next)
-    {
-        /* archive can be NULL */
-        cmp = cmp_func(entry, (LSQArchiveEntry*)iter->entry);
-
-        if ( 0 == cmp )
-        {
-            g_critical("THIS SHOULD NOT HAPPEN!!! (the universe has just 
collapsed)");
-            return NULL;
-        }
-        if ( 0 > cmp )
-        {
-            break;
-        }
-
-        prev_entry = iter;
-    }
-
-    new_entry = g_new0(LSQSList, 1);
-    new_entry->next = iter;
-    new_entry->entry = entry;
-
-    if ( NULL == prev_entry )
-    {
-        return new_entry;
-    }
-    
-    prev_entry->next = new_entry;
-    return list;
-}
-
-guint
-lsq_slist_length ( LSQSList *list )
-{
-    guint size = 0;
-    for(; list; list = list->next)
-    {
-        size++;
-    }
-    return size;
-}
-
-void
-lsq_slist_free ( LSQSList *list )
-{
-    LSQSList *next;
-    for(; list; list = next)
-    {
-        next = list->next;
-        g_free(list);
-    }
-}
-
-LSQSIndexList *
-lsq_slist_index_new(void)
-{
-    return g_new0(LSQSIndexList, 1);
-}
-
-void
-lsq_slist_index_free ( LSQSIndexList *list )
-{
-    LSQSIndexList *next;
-    for(; list; list = next)
-    {
-        next = list->next;
-        g_free(list);
-    }
-}
-
_______________________________________________
Xfce4-commits mailing list
[email protected]
https://mail.xfce.org/mailman/listinfo/xfce4-commits

Reply via email to