Updating branch refs/heads/master
         to 93a294dc61ac7ccdd6e2a276520db444983c5156 (commit)
       from a5fa5beafeb47facb590a2a3e98812d50b973217 (commit)

commit 93a294dc61ac7ccdd6e2a276520db444983c5156
Author: Peter de Ridder <[email protected]>
Date:   Mon Aug 22 22:14:05 2011 +0200

    Store entry property data on sizeof aligned

 libsqueeze/archive-iter.c     |  204 +++++++++++++----------------------------
 libsqueeze/archive.c          |   24 +++++
 libsqueeze/libsqueeze-view.h  |    2 +
 libsqueeze/parser.c           |  120 +++++++++++++++++++++++-
 libsqueeze/parser.h           |    4 +
 libsqueeze/support-reader.c   |    2 +-
 libsqueeze/support-template.c |   14 +++
 libsqueeze/support-template.h |    4 +
 8 files changed, 228 insertions(+), 146 deletions(-)

diff --git a/libsqueeze/archive-iter.c b/libsqueeze/archive-iter.c
index e07addb..97060f9 100644
--- a/libsqueeze/archive-iter.c
+++ b/libsqueeze/archive-iter.c
@@ -901,6 +901,7 @@ static void
 lsq_archive_entry_props_free(const LSQArchive *archive, LSQArchiveEntry *entry)
 {
        guint i;
+       guint offset;
        gpointer props_iter = entry->props;
        /* free the properties */
        if(props_iter)
@@ -912,15 +913,9 @@ lsq_archive_entry_props_free(const LSQArchive *archive, 
LSQArchiveEntry *entry)
                        {
                                case(G_TYPE_STRING):
                                        /* free only strings */
-                                       g_free(*(gchar **)props_iter);
-                                       *(gchar **)props_iter = NULL;
-                                       props_iter = ((gchar **)props_iter) + 1;
-                                       break;
-                               case(G_TYPE_UINT):
-                                       props_iter = ((guint *)props_iter) + 1;
-                                       break;
-                               case(G_TYPE_UINT64):
-                                       props_iter = ((guint64 *)props_iter) + 
1;
+                                       offset = 
lsq_archive_get_entry_property_offset(archive, i+LSQ_ARCHIVE_PROP_USER);
+                                       g_free(((gchar **)props_iter)[offset]);
+                                       ((gchar **)props_iter)[offset] = NULL;
                                        break;
                        }
                }
@@ -1274,7 +1269,7 @@ lsq_archive_entry_get_prop_str(const LSQArchive *archive, 
const LSQArchiveEntry
 {
        const gchar *retval = NULL;
        gpointer props_iter = NULL;
-       guint n;
+       guint offset;
 
        switch(i)
        {
@@ -1288,22 +1283,12 @@ lsq_archive_entry_get_prop_str(const LSQArchive 
*archive, const LSQArchiveEntry
                        props_iter = entry->props;
                        if(props_iter)
                        {
-                               for(n = 0; n < (i-LSQ_ARCHIVE_PROP_USER); ++n)
-                               {
-                                       
switch(lsq_archive_get_entry_property_type(archive, n+LSQ_ARCHIVE_PROP_USER))
-                                       {
-                                               case G_TYPE_STRING:
-                                                       props_iter = ((gchar 
**)props_iter) + 1;;
-                                                       break;
-                                               case G_TYPE_UINT:
-                                                       props_iter = ((guint 
*)props_iter) + 1;;
-                                                       break;
-                                               case G_TYPE_UINT64:
-                                                       props_iter = ((guint64 
*)props_iter) + 1;;
-                                                       break;
-                                       }
-                               }
-                               retval = (*((gchar **)props_iter));
+                         if (lsq_archive_get_entry_property_type(archive, i) 
== G_TYPE_STRING)
+                         {
+                           offset = 
lsq_archive_get_entry_property_offset(archive, i);
+
+                           retval = (((gchar **)props_iter)[offset]);
+                         }
                        }
                        break;
        }
@@ -1314,75 +1299,42 @@ inline static guint
 lsq_archive_entry_get_prop_uint(const LSQArchive *archive, const 
LSQArchiveEntry *entry, guint i)
 {
        gpointer props_iter = entry->props;
-       guint n;
+       guint offset;
        if(!props_iter)
                return 0;
-       for(n = 0; n < (i-LSQ_ARCHIVE_PROP_USER); ++n)
-       {
-               switch(lsq_archive_get_entry_property_type(archive, n))
-               {
-                       case G_TYPE_STRING:
-                               props_iter = ((gchar **)props_iter) + 1;;
-                               break;
-                       case G_TYPE_UINT:
-                               props_iter = ((guint *)props_iter) + 1;;
-                               break;
-                       case G_TYPE_UINT64:
-                               props_iter = ((guint64 *)props_iter) + 1;;
-                               break;
-               }
-       }
-       return (*((guint *)props_iter));
+
+       if (lsq_archive_get_entry_property_type(archive, i) != G_TYPE_UINT)
+         return 0;
+
+       offset = lsq_archive_get_entry_property_offset(archive, i);
+
+       return (((guint *)props_iter)[offset]);
 }
 
 inline static guint64
 lsq_archive_entry_get_prop_uint64(const LSQArchive *archive, const 
LSQArchiveEntry *entry, guint i)
 {
        gpointer props_iter = entry->props;
-       guint n;
+       guint offset;
        if(!props_iter)
                return 0;
-       for(n = 0; n < (i-LSQ_ARCHIVE_PROP_USER); ++n)
-       {
-               switch(lsq_archive_get_entry_property_type(archive, 
n+LSQ_ARCHIVE_PROP_USER))
-               {
-                       case G_TYPE_STRING:
-                               props_iter = ((gchar **)props_iter) + 1;;
-                               break;
-                       case G_TYPE_UINT:
-                               props_iter = ((guint *)props_iter) + 1;;
-                               break;
-                       case G_TYPE_UINT64:
-                               props_iter = ((guint64 *)props_iter) + 1;;
-                               break;
-               }
-       }
-       return (*((guint64 *)props_iter));
+
+       if (lsq_archive_get_entry_property_type(archive, i) != G_TYPE_UINT64)
+         return 0;
+
+       offset = lsq_archive_get_entry_property_offset(archive, i);
+
+       return (((guint64 *)props_iter)[offset]);
 }
 
 static gpointer
 lsq_archive_entry_get_props(const LSQArchive *archive, LSQArchiveEntry *entry)
 {
        guint size = 0;
-       guint i;
 
        if(!entry->props)
        {
-               for(i = 0; i < 
(lsq_archive_n_entry_properties(archive)-LSQ_ARCHIVE_PROP_USER); ++i)
-               {
-                       switch(lsq_archive_get_entry_property_type(archive, 
i+LSQ_ARCHIVE_PROP_USER))
-                       {
-                               case G_TYPE_STRING:
-                                       size += sizeof(gchar *);
-                                       break;
-                               case G_TYPE_UINT:
-                                       size += sizeof(guint);
-                                       break;
-                               case G_TYPE_UINT64:
-                                       size += sizeof(guint64);
-                                       break;
-                       }
-               }
+               size = lsq_archive_entry_properties_size(archive);
 
                entry->props = g_malloc0(size);
        }
@@ -1394,98 +1346,67 @@ static void
 lsq_archive_entry_set_prop_str(const LSQArchive *archive, LSQArchiveEntry 
*entry, guint n, const gchar *str_val)
 {
        gpointer props_iter = lsq_archive_entry_get_props(archive, entry);
-       guint i;
+       guint offset;
 
-       for(i = 0; i < (n-LSQ_ARCHIVE_PROP_USER); ++i)
-       {
-               switch(lsq_archive_get_entry_property_type(archive, 
i+LSQ_ARCHIVE_PROP_USER))
-               {
-                       case G_TYPE_STRING:
-                               props_iter = ((gchar **)props_iter) + 1;;
-                               break;
-                       case G_TYPE_UINT:
-                               props_iter = ((guint *)props_iter) + 1;;
-                               break;
-                       case G_TYPE_UINT64:
-                               props_iter = ((guint64 *)props_iter) + 1;;
-                               break;
-               }
-       }
-       g_free(*((gchar **)props_iter));
-       (*((gchar **)props_iter)) = g_strdup(str_val);
+       if (lsq_archive_get_entry_property_type(archive, n) != G_TYPE_STRING)
+         return;
+
+       offset = lsq_archive_get_entry_property_offset(archive, n);
+
+       g_free(((gchar **)props_iter)[offset]);
+       ((gchar **)props_iter)[offset] = g_strdup(str_val);
 }
 
 static void
 lsq_archive_entry_set_prop_uint(const LSQArchive *archive, LSQArchiveEntry 
*entry, guint n, guint int_val)
 {
        gpointer props_iter = lsq_archive_entry_get_props(archive, entry);
-       guint i;
+       guint offset;
 
-       for(i = 0; i < (n-LSQ_ARCHIVE_PROP_USER); ++i)
-       {
-               switch(lsq_archive_get_entry_property_type(archive, 
i+LSQ_ARCHIVE_PROP_USER))
-               {
-                       case G_TYPE_STRING:
-                               props_iter = ((gchar **)props_iter) + 1;;
-                               break;
-                       case G_TYPE_UINT:
-                               props_iter = ((guint *)props_iter) + 1;;
-                               break;
-                       case G_TYPE_UINT64:
-                               props_iter = ((guint64 *)props_iter) + 1;;
-                               break;
-               }
-       }
-       (*((guint *)props_iter)) = int_val;
+       if (lsq_archive_get_entry_property_type(archive, n) != G_TYPE_UINT)
+         return;
+
+       offset = lsq_archive_get_entry_property_offset(archive, n);
+
+       ((guint *)props_iter)[offset] = int_val;
 }
 
 static void
 lsq_archive_entry_set_prop_uint64(const LSQArchive *archive, LSQArchiveEntry 
*entry, guint n, guint64 int64_val)
 {
        gpointer props_iter = lsq_archive_entry_get_props(archive, entry);
-       guint i;
+       guint offset;
 
-       for(i = 0; i < (n-LSQ_ARCHIVE_PROP_USER); ++i)
-       {
-               switch(lsq_archive_get_entry_property_type(archive, 
i+LSQ_ARCHIVE_PROP_USER))
-               {
-                       case G_TYPE_STRING:
-                               props_iter = ((gchar **)props_iter) + 1;;
-                               break;
-                       case G_TYPE_UINT:
-                               props_iter = ((guint *)props_iter) + 1;;
-                               break;
-                       case G_TYPE_UINT64:
-                               props_iter = ((guint64 *)props_iter) + 1;;
-                               break;
-               }
-       }
-       (*((guint64 *)props_iter)) = int64_val;
+       if (lsq_archive_get_entry_property_type(archive, n) != G_TYPE_UINT64)
+         return;
+
+       offset = lsq_archive_get_entry_property_offset(archive, n);
+
+       ((guint64 *)props_iter)[offset] = int64_val;
 }
 
 static void
 lsq_archive_entry_set_propsv(const LSQArchive *archive, LSQArchiveEntry 
*entry, gpointer *props)
 {
        gpointer props_iter = lsq_archive_entry_get_props(archive, entry);
+       guint offset;
        guint i;
 
        for(i=0; i < (lsq_archive_n_entry_properties(archive) - 
LSQ_ARCHIVE_PROP_USER); ++i)
        {
+               offset = lsq_archive_get_entry_property_offset(archive, 
i+LSQ_ARCHIVE_PROP_USER);
                switch(lsq_archive_get_entry_property_type(archive, 
i+LSQ_ARCHIVE_PROP_USER))
                {
                        case G_TYPE_STRING:
-                               g_free(*((gchar **)props_iter));
+                               g_free(((gchar **)props_iter)[offset]);
                                //(*((gchar **)props_iter)) = g_strdup((const 
gchar*)props[i]);
-                               (*((gchar **)props_iter)) = (gchar*)props[i];
-                               props_iter = ((gchar **)props_iter) + 1;;
+                               ((gchar **)props_iter)[offset] = 
(gchar*)props[i];
                                break;
                        case G_TYPE_UINT:
-                               (*((guint *)props_iter)) = *((const guint 
*)props[i]);
-                               props_iter = ((guint *)props_iter) + 1;;
+                               ((guint *)props_iter)[offset] = *((const guint 
*)props[i]);
                                break;
                        case G_TYPE_UINT64:
-                               (*((guint64 *)props_iter)) = *((const guint64 
*)props[i]);
-                               props_iter = ((guint64 *)props_iter) + 1;;
+                               ((guint64 *)props_iter)[offset] = *((const 
guint64 *)props[i]);
                                break;
                }
        }
@@ -1495,24 +1416,23 @@ static void
 lsq_archive_entry_set_propsva(const LSQArchive *archive, LSQArchiveEntry 
*entry, va_list ap)
 {
        gpointer props_iter = lsq_archive_entry_get_props(archive, entry);
+       guint offset;
        guint i;
 
        for(i=0; i < (lsq_archive_n_entry_properties(archive) - 
LSQ_ARCHIVE_PROP_USER); ++i)
        {
+               offset = lsq_archive_get_entry_property_offset(archive, 
i+LSQ_ARCHIVE_PROP_USER);
                switch(lsq_archive_get_entry_property_type(archive, 
i+LSQ_ARCHIVE_PROP_USER))
                {
                        case G_TYPE_STRING:
-                               g_free(*((gchar **)props_iter));
-                               (*((gchar **)props_iter)) = g_strdup(va_arg(ap, 
gchar*));
-                               props_iter = ((gchar **)props_iter) + 1;;
+                               g_free(((gchar **)props_iter)[offset]);
+                               ((gchar **)props_iter)[offset] = 
g_strdup(va_arg(ap, gchar*));
                                break;
                        case G_TYPE_UINT:
-                               (*((guint *)props_iter)) = va_arg(ap, guint);
-                               props_iter = ((guint *)props_iter) + 1;;
+                               ((guint *)props_iter)[offset] = va_arg(ap, 
guint);
                                break;
                        case G_TYPE_UINT64:
-                               (*((guint64 *)props_iter)) = va_arg(ap, 
guint64);
-                               props_iter = ((guint64 *)props_iter) + 1;;
+                               ((guint64 *)props_iter)[offset] = va_arg(ap, 
guint64);
                                break;
                }
        }
diff --git a/libsqueeze/archive.c b/libsqueeze/archive.c
index 6fb3bab..e2c55f0 100644
--- a/libsqueeze/archive.c
+++ b/libsqueeze/archive.c
@@ -242,6 +242,21 @@ lsq_archive_get_entry_property_type(const LSQArchive 
*archive, guint n)
        }
 }
 
+guint
+lsq_archive_get_entry_property_offset(const LSQArchive *archive, guint n)
+{
+  switch(n)
+  {
+    case LSQ_ARCHIVE_PROP_FILENAME:
+    case LSQ_ARCHIVE_PROP_MIME_TYPE:
+      g_return_val_if_reached(0);
+      break;
+    default:
+      return 
lsq_support_template_get_property_offset(archive->priv->s_template, n - 
LSQ_ARCHIVE_PROP_USER);
+      break;
+  }
+}
+
 /*
  * lsq_archive_get_entry_property_name:
  *
@@ -264,6 +279,15 @@ lsq_archive_get_entry_property_name(const LSQArchive 
*archive, guint n)
        }
 }
 
+guint
+lsq_archive_entry_properties_size(const LSQArchive *archive)
+{
+#ifdef DEBUG
+  g_return_val_if_fail(archive, 0);
+#endif
+  return lsq_support_template_get_properties_size(archive->priv->s_template);
+}
+
 /*
  * lsq_archive_get_filename:
  * @archive: LSQArchive object
diff --git a/libsqueeze/libsqueeze-view.h b/libsqueeze/libsqueeze-view.h
index d8fef13..1c674ad 100644
--- a/libsqueeze/libsqueeze-view.h
+++ b/libsqueeze/libsqueeze-view.h
@@ -36,8 +36,10 @@ gchar                          
*lsq_archive_iter_get_path(const LSQArchiveIter *archive);
 LSQArchiveIter  *lsq_archive_get_iter(LSQArchive *archive, const gchar *path);
 
 GType                     lsq_archive_get_entry_property_type(const LSQArchive 
*archive, guint n);
+guint                     lsq_archive_get_entry_property_offset(const 
LSQArchive *archive, guint n);
 const gchar            *lsq_archive_get_entry_property_name(const LSQArchive 
*archive, guint n);
 guint                     lsq_archive_n_entry_properties(const LSQArchive 
*archive);
+guint                     lsq_archive_entry_properties_size(const LSQArchive 
*archive);
 
 gboolean                       lsq_archive_can_stop(const LSQArchive *archive);
 gboolean                       lsq_archive_stop(const LSQArchive *archive);
diff --git a/libsqueeze/parser.c b/libsqueeze/parser.c
index 420330b..c9586a2 100644
--- a/libsqueeze/parser.c
+++ b/libsqueeze/parser.c
@@ -30,6 +30,70 @@
 
 G_DEFINE_ABSTRACT_TYPE(LSQParser, lsq_parser, G_TYPE_OBJECT);
 
+struct _LSQTypeStorageGroup
+{
+  guint size_of;
+  guint n_types;
+  GType *types;
+};
+typedef struct _LSQTypeStorageGroup LSQTypeStorageGroup;
+static LSQTypeStorageGroup *storage_groups = NULL;
+static guint storage_group_count = 0;
+
+static void
+lsq_storage_group_add(GType type, guint size_of)
+{
+  guint i;
+  LSQTypeStorageGroup *_storage_groups;
+  GType *_types;
+
+  for (i = 0; i < storage_group_count; ++i)
+  {
+    if (storage_groups[i].size_of <= size_of)
+      break;
+  }
+
+  g_return_if_fail(i <= storage_group_count);
+
+  if (i == storage_group_count ||
+      storage_groups[i].size_of < size_of)
+  {
+    _storage_groups = g_new0(LSQTypeStorageGroup, storage_group_count+1);
+
+    memcpy(_storage_groups, storage_groups, sizeof(LSQTypeStorageGroup) * i);
+    memcpy(_storage_groups + i + 1, storage_groups + i, 
sizeof(LSQTypeStorageGroup) * (storage_group_count - i));
+
+    g_free(storage_groups);
+    storage_groups = _storage_groups;
+    ++storage_group_count;
+
+    storage_groups[i].size_of = size_of;
+    storage_groups[i].n_types = 0;
+    storage_groups[i].types = NULL;
+  }
+
+  _types = g_new(GType, storage_groups[i].n_types+1);
+
+  memcpy(_types, storage_groups[i].types, sizeof(GType) * 
storage_groups[i].n_types);
+
+  g_free(storage_groups[i].types);
+  storage_groups[i].types = _types;
+  _types[storage_groups[i].n_types] = type;
+  ++storage_groups[i].n_types;
+}
+
+static gboolean
+lsq_storage_group_has_type(LSQTypeStorageGroup *storage_group, GType type)
+{
+  guint i;
+  for (i = 0; i < storage_group->n_types; ++i)
+  {
+    if (storage_group->types[i] == type)
+      return TRUE;
+  }
+  return FALSE;
+}
+
 static void
 lsq_parser_init(LSQParser *self)
 {
@@ -38,7 +102,18 @@ lsq_parser_init(LSQParser *self)
 static void
 lsq_parser_class_init(LSQParserClass *klass)
 {
-       klass->get_context = NULL;
+  klass->get_context = NULL;
+
+  lsq_storage_group_add(G_TYPE_CHAR, sizeof(gchar));
+  lsq_storage_group_add(G_TYPE_DOUBLE, sizeof(gdouble));
+  lsq_storage_group_add(G_TYPE_FLOAT, sizeof(gfloat));
+  lsq_storage_group_add(G_TYPE_INT, sizeof(gint));
+  lsq_storage_group_add(G_TYPE_INT64, sizeof(gint64));
+  lsq_storage_group_add(G_TYPE_LONG, sizeof(glong));
+  lsq_storage_group_add(G_TYPE_STRING, sizeof(gchar*));
+  lsq_storage_group_add(G_TYPE_UINT, sizeof(guint));
+  lsq_storage_group_add(G_TYPE_UINT64, sizeof(guint64));
+  lsq_storage_group_add(G_TYPE_ULONG, sizeof(gulong));
 }
 
 LSQParserContext*
@@ -74,14 +149,23 @@ lsq_parser_get_property_type(LSQParser *parser, guint nr)
   return parser->property_types[nr];
 }
 
+guint
+lsq_parser_get_property_offset(LSQParser *parser, guint nr)
+{
+  g_return_val_if_fail(nr < parser->n_properties, 0);
+  return parser->property_offset[nr];
+}
+
 void
 lsq_parser_set_property_type(LSQParser *parser, guint nr, GType type)
 {
+  guint i, j;
+  guint size_of, offset = 0;
+
   if(nr >= parser->n_properties)
   {
     GType *new_list = g_new(GType, nr+1);
-    guint i;
-    for(i=0; i < parser->n_properties; i++)
+    for(i=0; i < parser->n_properties; ++i)
     {
       new_list[i] = parser->property_types[i];
     }
@@ -92,7 +176,37 @@ lsq_parser_set_property_type(LSQParser *parser, guint nr, 
GType type)
     g_free(parser->property_types);
     parser->property_types = new_list;
     parser->n_properties = nr+1;
+
+    g_free(parser->property_offset);
+    parser->property_offset = g_new(guint, nr+1);
   }
+
   parser->property_types[nr] = type;
+
+  for (i = 0; i < storage_group_count; ++i)
+  {
+    size_of = storage_groups[i].size_of;
+    for (j = 0; j < parser->n_properties; ++j)
+    {
+      if (lsq_storage_group_has_type(&storage_groups[i], 
parser->property_types[j]))
+      {
+       guint align = offset % size_of;
+       if (align)
+         offset += size_of - align;
+
+       /* Store the offset as count of block sized size_of */
+       parser->property_offset[j] = offset / size_of;
+       offset += size_of;
+      }
+    }
+  }
+
+  parser->properties_size = offset;
+}
+
+guint
+lsq_parser_get_properties_size(LSQParser *parser)
+{
+  return parser->properties_size;
 }
 
diff --git a/libsqueeze/parser.h b/libsqueeze/parser.h
index 2ae41e7..33c8d38 100644
--- a/libsqueeze/parser.h
+++ b/libsqueeze/parser.h
@@ -54,6 +54,8 @@ struct _LSQParser
 
   guint n_properties;
   GType *property_types;
+  guint *property_offset;
+  guint properties_size;
 };
 
 
@@ -77,6 +79,8 @@ void              lsq_parser_parse(LSQParser *, 
LSQParserContext *);
 guint             lsq_parser_n_properties(LSQParser *);
 GType             lsq_parser_get_property_type(LSQParser *, guint);
 void              lsq_parser_set_property_type(LSQParser *, guint, GType);
+guint            lsq_parser_get_property_offset(LSQParser *, guint);
+guint            lsq_parser_get_properties_size(LSQParser *);
 
 G_END_DECLS
 
diff --git a/libsqueeze/support-reader.c b/libsqueeze/support-reader.c
index af78c93..cb83387 100644
--- a/libsqueeze/support-reader.c
+++ b/libsqueeze/support-reader.c
@@ -285,7 +285,7 @@ lsq_support_reader_parse_file(const gchar *filename)
                s_template->parser = parser;
 
 #ifdef DEBUG
-               if (NULL != s_template->supported)
+               if (s_template->supported)
                {
                        g_debug("%s supported\n", _mime_types[i]);
                }
diff --git a/libsqueeze/support-template.c b/libsqueeze/support-template.c
index 119f557..2257d6c 100644
--- a/libsqueeze/support-template.c
+++ b/libsqueeze/support-template.c
@@ -35,6 +35,13 @@ lsq_support_template_get_property_type(LSQSupportTemplate 
*templ, guint nr)
        return lsq_parser_get_property_type(templ->parser, nr);
 }
 
+guint
+lsq_support_template_get_property_offset(LSQSupportTemplate *templ, guint nr)
+{
+  g_return_val_if_fail(templ->parser, 0);
+  return lsq_parser_get_property_offset(templ->parser, nr);
+}
+
 const gchar *
 lsq_support_template_get_property_name(LSQSupportTemplate *templ, guint nr)
 {
@@ -54,3 +61,10 @@ lsq_support_template_get_n_properties (LSQSupportTemplate 
*templ)
     n_props = templ->n_properties;
        return n_props;
 }
+
+guint
+lsq_support_template_get_properties_size(LSQSupportTemplate *templ)
+{
+  g_return_val_if_fail(templ->parser, 0);
+  return lsq_parser_get_properties_size(templ->parser);
+}
diff --git a/libsqueeze/support-template.h b/libsqueeze/support-template.h
index 62493c8..4b479fc 100644
--- a/libsqueeze/support-template.h
+++ b/libsqueeze/support-template.h
@@ -67,10 +67,14 @@ struct _LSQSupportTemplate
 
 GType
 lsq_support_template_get_property_type(LSQSupportTemplate *s_template, guint 
n);
+guint
+lsq_support_template_get_property_offset(LSQSupportTemplate *s_template, guint 
n);
 const gchar *
 lsq_support_template_get_property_name(LSQSupportTemplate *s_template, guint 
n);
 guint
 lsq_support_template_get_n_properties (LSQSupportTemplate *s_template);
+guint
+lsq_support_template_get_properties_size (LSQSupportTemplate *s_template);
 
 
 #endif /* __SUPPORT_TEMPLATE_H__ */
_______________________________________________
Xfce4-commits mailing list
[email protected]
https://mail.xfce.org/mailman/listinfo/xfce4-commits

Reply via email to