[gimp] Add private struct to GimpData
- From: Michael Natterer <mitch src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gimp] Add private struct to GimpData
- Date: Sat, 31 Oct 2009 14:26:33 +0000 (UTC)
commit 7abcfbf2374c8ac7f318ea29b1808368fcb4bf88
Author: Michael Natterer <mitch gimp org>
Date: Sat Oct 31 15:24:57 2009 +0100
Add private struct to GimpData
And start sealing by moving "filename" there. Add
gimp_data_get_filename() and use it everywhere.
app/actions/brushes-actions.c | 17 ++++--
app/actions/data-commands.c | 19 ++++--
app/actions/dynamics-actions.c | 13 +++-
app/actions/gradients-actions.c | 9 ++-
app/actions/palettes-actions.c | 15 +++--
app/actions/patterns-actions.c | 17 ++++--
app/core/gimpbrushgenerated-save.c | 4 +-
app/core/gimpcurve-save.c | 4 +-
app/core/gimpdata.c | 107 +++++++++++++++++++++++++----------
app/core/gimpdata.h | 2 +-
app/core/gimpdatafactory.c | 14 +++--
app/core/gimpdynamics-save.c | 2 +-
app/core/gimpgradient-save.c | 4 +-
app/core/gimppalette-save.c | 4 +-
14 files changed, 154 insertions(+), 77 deletions(-)
---
diff --git a/app/actions/brushes-actions.c b/app/actions/brushes-actions.c
index cd4083b..0f53a11 100644
--- a/app/actions/brushes-actions.c
+++ b/app/actions/brushes-actions.c
@@ -106,25 +106,30 @@ void
brushes_actions_update (GimpActionGroup *group,
gpointer user_data)
{
- GimpContext *context = action_data_get_context (user_data);
- GimpBrush *brush = NULL;
- GimpData *data = NULL;
+ GimpContext *context = action_data_get_context (user_data);
+ GimpBrush *brush = NULL;
+ GimpData *data = NULL;
+ const gchar *filename = NULL;
if (context)
{
brush = gimp_context_get_brush (context);
if (brush)
- data = GIMP_DATA (brush);
+ {
+ data = GIMP_DATA (brush);
+
+ filename = gimp_data_get_filename (data);
+ }
}
#define SET_SENSITIVE(action,condition) \
gimp_action_group_set_action_sensitive (group, action, (condition) != 0)
SET_SENSITIVE ("brushes-edit", brush);
- SET_SENSITIVE ("brushes-open-as-image", brush && data->filename && ! GIMP_IS_BRUSH_GENERATED (brush));
+ SET_SENSITIVE ("brushes-open-as-image", brush && filename && ! GIMP_IS_BRUSH_GENERATED (brush));
SET_SENSITIVE ("brushes-duplicate", brush && GIMP_DATA_GET_CLASS (data)->duplicate);
- SET_SENSITIVE ("brushes-copy-location", brush && data->filename);
+ SET_SENSITIVE ("brushes-copy-location", brush && filename);
SET_SENSITIVE ("brushes-delete", brush && data->deletable);
#undef SET_SENSITIVE
diff --git a/app/actions/data-commands.c b/app/actions/data-commands.c
index f9b9d35..d663bbd 100644
--- a/app/actions/data-commands.c
+++ b/app/actions/data-commands.c
@@ -83,9 +83,9 @@ data_open_as_image_cmd_callback (GtkAction *action,
gimp_context_get_by_type (context,
gimp_data_factory_view_get_children_type (view));
- if (data && data->filename)
+ if (data && gimp_data_get_filename (data))
{
- gchar *uri = g_filename_to_uri (data->filename, NULL, NULL);
+ gchar *uri = g_filename_to_uri (gimp_data_get_filename (data), NULL, NULL);
if (uri)
{
@@ -188,14 +188,19 @@ data_copy_location_cmd_callback (GtkAction *action,
gimp_context_get_by_type (context,
gimp_data_factory_view_get_children_type (view));
- if (data && data->filename && *data->filename)
+ if (data)
{
- gchar *uri = g_filename_to_uri (data->filename, NULL, NULL);
+ const gchar *filename = gimp_data_get_filename (data);
- if (uri)
+ if (filename && *filename)
{
- gimp_clipboard_set_text (context->gimp, uri);
- g_free (uri);
+ gchar *uri = g_filename_to_uri (filename, NULL, NULL);
+
+ if (uri)
+ {
+ gimp_clipboard_set_text (context->gimp, uri);
+ g_free (uri);
+ }
}
}
}
diff --git a/app/actions/dynamics-actions.c b/app/actions/dynamics-actions.c
index 6c07918..e2043ee 100644
--- a/app/actions/dynamics-actions.c
+++ b/app/actions/dynamics-actions.c
@@ -100,16 +100,21 @@ void
dynamics_actions_update (GimpActionGroup *group,
gpointer user_data)
{
- GimpContext *context = action_data_get_context (user_data);
+ GimpContext *context = action_data_get_context (user_data);
GimpDynamics *dynamics = NULL;
- GimpData *data = NULL;
+ GimpData *data = NULL;
+ const gchar *filename = NULL;
if (context)
{
dynamics = gimp_context_get_dynamics (context);
if (dynamics)
- data = GIMP_DATA (dynamics);
+ {
+ data = GIMP_DATA (dynamics);
+
+ filename = gimp_data_get_filename (data);
+ }
}
#define SET_SENSITIVE(action,condition) \
@@ -117,7 +122,7 @@ dynamics_actions_update (GimpActionGroup *group,
SET_SENSITIVE ("dynamics-edit", dynamics);
SET_SENSITIVE ("dynamics-duplicate", dynamics && GIMP_DATA_GET_CLASS (data)->duplicate);
- SET_SENSITIVE ("dynamics-copy-location", dynamics && data->filename);
+ SET_SENSITIVE ("dynamics-copy-location", dynamics && filename);
SET_SENSITIVE ("dynamics-delete", dynamics && data->deletable);
#undef SET_SENSITIVE
diff --git a/app/actions/gradients-actions.c b/app/actions/gradients-actions.c
index f6328e3..f13a497 100644
--- a/app/actions/gradients-actions.c
+++ b/app/actions/gradients-actions.c
@@ -110,13 +110,18 @@ gradients_actions_update (GimpActionGroup *group,
GimpContext *context = action_data_get_context (user_data);
GimpGradient *gradient = NULL;
GimpData *data = NULL;
+ const gchar *filename = NULL;
if (context)
{
gradient = gimp_context_get_gradient (context);
if (gradient)
- data = GIMP_DATA (gradient);
+ {
+ data = GIMP_DATA (gradient);
+
+ filename = gimp_data_get_filename (data);
+ }
}
#define SET_SENSITIVE(action,condition) \
@@ -125,7 +130,7 @@ gradients_actions_update (GimpActionGroup *group,
SET_SENSITIVE ("gradients-edit", gradient);
SET_SENSITIVE ("gradients-duplicate", gradient);
SET_SENSITIVE ("gradients-save-as-pov", gradient);
- SET_SENSITIVE ("gradients-copy-location", gradient && data->filename);
+ SET_SENSITIVE ("gradients-copy-location", gradient && filename);
SET_SENSITIVE ("gradients-delete", gradient && data->deletable);
#undef SET_SENSITIVE
diff --git a/app/actions/palettes-actions.c b/app/actions/palettes-actions.c
index ffb8797..bf5dc52 100644
--- a/app/actions/palettes-actions.c
+++ b/app/actions/palettes-actions.c
@@ -113,16 +113,21 @@ void
palettes_actions_update (GimpActionGroup *group,
gpointer user_data)
{
- GimpContext *context = action_data_get_context (user_data);
- GimpPalette *palette = NULL;
- GimpData *data = NULL;
+ GimpContext *context = action_data_get_context (user_data);
+ GimpPalette *palette = NULL;
+ GimpData *data = NULL;
+ const gchar *filename = NULL;
if (context)
{
palette = gimp_context_get_palette (context);
if (palette)
- data = GIMP_DATA (palette);
+ {
+ data = GIMP_DATA (palette);
+
+ filename = gimp_data_get_filename (data);
+ }
}
#define SET_SENSITIVE(action,condition) \
@@ -131,7 +136,7 @@ palettes_actions_update (GimpActionGroup *group,
SET_SENSITIVE ("palettes-edit", palette);
SET_SENSITIVE ("palettes-duplicate", palette && GIMP_DATA_GET_CLASS (data)->duplicate);
SET_SENSITIVE ("palettes-merge", FALSE); /* FIXME palette && GIMP_IS_CONTAINER_LIST_VIEW (editor->view)); */
- SET_SENSITIVE ("palettes-copy-location", palette && data->filename);
+ SET_SENSITIVE ("palettes-copy-location", palette && filename);
SET_SENSITIVE ("palettes-delete", palette && data->deletable);
#undef SET_SENSITIVE
diff --git a/app/actions/patterns-actions.c b/app/actions/patterns-actions.c
index b376e84..49cb848 100644
--- a/app/actions/patterns-actions.c
+++ b/app/actions/patterns-actions.c
@@ -106,25 +106,30 @@ void
patterns_actions_update (GimpActionGroup *group,
gpointer user_data)
{
- GimpContext *context = action_data_get_context (user_data);
- GimpPattern *pattern = NULL;
- GimpData *data = NULL;
+ GimpContext *context = action_data_get_context (user_data);
+ GimpPattern *pattern = NULL;
+ GimpData *data = NULL;
+ const gchar *filename = NULL;
if (context)
{
pattern = gimp_context_get_pattern (context);
if (pattern)
- data = GIMP_DATA (pattern);
+ {
+ data = GIMP_DATA (pattern);
+
+ filename = gimp_data_get_filename (data);
+ }
}
#define SET_SENSITIVE(action,condition) \
gimp_action_group_set_action_sensitive (group, action, (condition) != 0)
SET_SENSITIVE ("patterns-edit", pattern && FALSE);
- SET_SENSITIVE ("patterns-open-as-image", pattern && data->filename);
+ SET_SENSITIVE ("patterns-open-as-image", pattern && filename);
SET_SENSITIVE ("patterns-duplicate", pattern && GIMP_DATA_GET_CLASS (data)->duplicate);
- SET_SENSITIVE ("patterns-copy-location", pattern && data->filename);
+ SET_SENSITIVE ("patterns-copy-location", pattern && filename);
SET_SENSITIVE ("patterns-delete", pattern && data->deletable);
#undef SET_SENSITIVE
diff --git a/app/core/gimpbrushgenerated-save.c b/app/core/gimpbrushgenerated-save.c
index 7f4862c..6059784 100644
--- a/app/core/gimpbrushgenerated-save.c
+++ b/app/core/gimpbrushgenerated-save.c
@@ -54,13 +54,13 @@ gimp_brush_generated_save (GimpData *data,
g_return_val_if_fail (name != NULL && *name != '\0', FALSE);
- file = g_fopen (data->filename, "wb");
+ file = g_fopen (gimp_data_get_filename (data), "wb");
if (! file)
{
g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_OPEN,
_("Could not open '%s' for writing: %s"),
- gimp_filename_to_utf8 (data->filename),
+ gimp_filename_to_utf8 (gimp_data_get_filename (data)),
g_strerror (errno));
return FALSE;
}
diff --git a/app/core/gimpcurve-save.c b/app/core/gimpcurve-save.c
index 26b9bf4..0313080 100644
--- a/app/core/gimpcurve-save.c
+++ b/app/core/gimpcurve-save.c
@@ -44,13 +44,13 @@ gimp_curve_save (GimpData *data,
curve = GIMP_CURVE (data);
- file = g_fopen (data->filename, "wb");
+ file = g_fopen (gimp_data_get_filename (data), "wb");
if (! file)
{
g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_OPEN,
_("Could not open '%s' for writing: %s"),
- gimp_filename_to_utf8 (data->filename),
+ gimp_filename_to_utf8 (gimp_data_get_filename (data)),
g_strerror (errno));
return FALSE;
}
diff --git a/app/core/gimpdata.c b/app/core/gimpdata.c
index 5c508cb..2957d1e 100644
--- a/app/core/gimpdata.c
+++ b/app/core/gimpdata.c
@@ -63,6 +63,17 @@ enum
};
+typedef struct _GimpDataPrivate GimpDataPrivate;
+
+struct _GimpDataPrivate
+{
+ gchar *filename;
+};
+
+#define GIMP_DATA_GET_PRIVATE(data) \
+ G_TYPE_INSTANCE_GET_PRIVATE (data, GIMP_TYPE_DATA, GimpDataPrivate)
+
+
static void gimp_data_class_init (GimpDataClass *klass);
static void gimp_data_tagged_iface_init (GimpTaggedInterface *iface);
@@ -188,6 +199,8 @@ gimp_data_class_init (GimpDataClass *klass)
NULL,
GIMP_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
+
+ g_type_class_add_private (klass, sizeof (GimpDataPrivate));
}
static void
@@ -204,7 +217,6 @@ static void
gimp_data_init (GimpData *data,
GimpDataClass *data_class)
{
- data->filename = NULL;
data->mime_type = 0;
data->writable = TRUE;
data->deletable = TRUE;
@@ -242,12 +254,13 @@ gimp_data_constructor (GType type,
static void
gimp_data_finalize (GObject *object)
{
- GimpData *data = GIMP_DATA (object);
+ GimpData *data = GIMP_DATA (object);
+ GimpDataPrivate *private = GIMP_DATA_GET_PRIVATE (data);
- if (data->filename)
+ if (private->filename)
{
- g_free (data->filename);
- data->filename = NULL;
+ g_free (private->filename);
+ private->filename = NULL;
}
if (data->tags)
@@ -309,12 +322,13 @@ gimp_data_get_property (GObject *object,
GValue *value,
GParamSpec *pspec)
{
- GimpData *data = GIMP_DATA (object);
+ GimpData *data = GIMP_DATA (object);
+ GimpDataPrivate *private = GIMP_DATA_GET_PRIVATE (data);
switch (property_id)
{
case PROP_FILENAME:
- g_value_set_string (value, data->filename);
+ g_value_set_string (value, private->filename);
break;
case PROP_WRITABLE:
@@ -339,10 +353,11 @@ static gint64
gimp_data_get_memsize (GimpObject *object,
gint64 *gui_size)
{
- GimpData *data = GIMP_DATA (object);
- gint64 memsize = 0;
+ GimpData *data = GIMP_DATA (object);
+ GimpDataPrivate *private = GIMP_DATA_GET_PRIVATE (data);
+ gint64 memsize = 0;
- memsize += gimp_string_get_memsize (data->filename);
+ memsize += gimp_string_get_memsize (private->filename);
return memsize + GIMP_OBJECT_CLASS (parent_class)->get_memsize (object,
gui_size);
@@ -408,20 +423,21 @@ gimp_data_get_tags (GimpTagged *tagged)
return GIMP_DATA (tagged)->tags;
}
-static gchar*
+static gchar *
gimp_data_get_identifier (GimpTagged *tagged)
{
- GimpData *data = GIMP_DATA (tagged);
- gchar *identifier = NULL;
+ GimpData *data = GIMP_DATA (tagged);
+ GimpDataPrivate *private = GIMP_DATA_GET_PRIVATE (data);
+ gchar *identifier = NULL;
- if (data->filename)
+ if (private->filename)
{
- identifier = g_filename_to_utf8 (data->filename, -1, NULL, NULL, NULL);
+ identifier = g_filename_to_utf8 (private->filename, -1, NULL, NULL, NULL);
if (! identifier)
{
- g_warning ("Failed to convert '%s' to utf8.\n", data->filename);
- identifier = g_strdup (data->filename);
+ g_warning ("Failed to convert '%s' to utf8.\n", private->filename);
+ identifier = g_strdup (private->filename);
}
}
else if (data->internal)
@@ -455,19 +471,22 @@ gboolean
gimp_data_save (GimpData *data,
GError **error)
{
- gboolean success = FALSE;
+ GimpDataPrivate *private;
+ gboolean success = FALSE;
g_return_val_if_fail (GIMP_IS_DATA (data), FALSE);
g_return_val_if_fail (data->writable == TRUE, FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+ private = GIMP_DATA_GET_PRIVATE (data);
+
if (data->internal)
{
data->dirty = FALSE;
return TRUE;
}
- g_return_val_if_fail (data->filename != NULL, FALSE);
+ g_return_val_if_fail (private->filename != NULL, FALSE);
if (GIMP_DATA_GET_CLASS (data)->save)
success = GIMP_DATA_GET_CLASS (data)->save (data, error);
@@ -476,7 +495,7 @@ gimp_data_save (GimpData *data,
{
struct stat filestat;
- g_stat (data->filename, &filestat);
+ g_stat (private->filename, &filestat);
data->mtime = filestat.st_mtime;
data->dirty = FALSE;
@@ -556,19 +575,25 @@ gboolean
gimp_data_delete_from_disk (GimpData *data,
GError **error)
{
+ GimpDataPrivate *private;
+
g_return_val_if_fail (GIMP_IS_DATA (data), FALSE);
- g_return_val_if_fail (data->filename != NULL, FALSE);
g_return_val_if_fail (data->deletable == TRUE, FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
+ private = GIMP_DATA_GET_PRIVATE (data);
+
+ g_return_val_if_fail (private->filename != NULL, FALSE);
+
if (data->internal)
return TRUE;
- if (g_unlink (data->filename) == -1)
+ if (g_unlink (private->filename) == -1)
{
g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_DELETE,
_("Could not delete '%s': %s"),
- gimp_filename_to_utf8 (data->filename), g_strerror (errno));
+ gimp_filename_to_utf8 (private->filename),
+ g_strerror (errno));
return FALSE;
}
@@ -605,19 +630,23 @@ gimp_data_set_filename (GimpData *data,
gboolean writable,
gboolean deletable)
{
+ GimpDataPrivate *private;
+
g_return_if_fail (GIMP_IS_DATA (data));
g_return_if_fail (filename != NULL);
g_return_if_fail (g_path_is_absolute (filename));
+ private = GIMP_DATA_GET_PRIVATE (data);
+
if (data->internal)
return;
- if (data->filename)
- g_free (data->filename);
+ if (private->filename)
+ g_free (private->filename);
- data->filename = g_strdup (filename);
- data->writable = FALSE;
- data->deletable = FALSE;
+ private->filename = g_strdup (filename);
+ data->writable = FALSE;
+ data->deletable = FALSE;
/* if the data is supposed to be writable or deletable,
* still check if it really is
@@ -718,6 +747,18 @@ gimp_data_create_filename (GimpData *data,
}
const gchar *
+gimp_data_get_filename (GimpData *data)
+{
+ GimpDataPrivate *private;
+
+ g_return_val_if_fail (GIMP_IS_DATA (data), NULL);
+
+ private = GIMP_DATA_GET_PRIVATE (data);
+
+ return private->filename;
+}
+
+const gchar *
gimp_data_get_mime_type (GimpData *data)
{
g_return_val_if_fail (GIMP_IS_DATA (data), NULL);
@@ -762,12 +803,16 @@ void
gimp_data_make_internal (GimpData *data,
const gchar *identifier)
{
+ GimpDataPrivate *private;
+
g_return_if_fail (GIMP_IS_DATA (data));
- if (data->filename)
+ private = GIMP_DATA_GET_PRIVATE (data);
+
+ if (private->filename)
{
- g_free (data->filename);
- data->filename = NULL;
+ g_free (private->filename);
+ private->filename = NULL;
}
data->identifier = g_strdup (identifier);
diff --git a/app/core/gimpdata.h b/app/core/gimpdata.h
index f18bf8d..6986ff9 100644
--- a/app/core/gimpdata.h
+++ b/app/core/gimpdata.h
@@ -49,7 +49,6 @@ struct _GimpData
{
GimpViewable parent_instance;
- gchar *filename;
GQuark mime_type;
guint writable : 1;
guint deletable : 1;
@@ -101,6 +100,7 @@ void gimp_data_set_filename (GimpData *data,
gboolean deletable);
void gimp_data_create_filename (GimpData *data,
const gchar *dest_dir);
+const gchar * gimp_data_get_filename (GimpData *data);
const gchar * gimp_data_get_mime_type (GimpData *data);
diff --git a/app/core/gimpdatafactory.c b/app/core/gimpdatafactory.c
index ae0d3d8..b96e4c6 100644
--- a/app/core/gimpdatafactory.c
+++ b/app/core/gimpdatafactory.c
@@ -244,7 +244,9 @@ gimp_data_factory_refresh_cache_add (GimpDataFactory *factory,
GimpData *data,
gpointer user_data)
{
- if (data->filename)
+ const gchar *filename = gimp_data_get_filename (data);
+
+ if (filename)
{
GHashTable *cache = user_data;
GList *list;
@@ -253,10 +255,10 @@ gimp_data_factory_refresh_cache_add (GimpDataFactory *factory,
gimp_container_remove (factory->priv->container, GIMP_OBJECT (data));
- list = g_hash_table_lookup (cache, data->filename);
+ list = g_hash_table_lookup (cache, filename);
list = g_list_prepend (list, data);
- g_hash_table_insert (cache, (gpointer) data->filename, list);
+ g_hash_table_insert (cache, (gpointer) filename, list);
}
}
@@ -426,7 +428,7 @@ gimp_data_factory_data_save (GimpDataFactory *factory)
{
GimpData *data = list->data;
- if (! data->filename)
+ if (! gimp_data_get_filename (data))
gimp_data_create_filename (data, writable_dir);
if (data->dirty && data->writable)
@@ -561,7 +563,7 @@ gimp_data_factory_data_delete (GimpDataFactory *factory,
gimp_container_remove (factory->priv->container, GIMP_OBJECT (data));
- if (delete_from_disk && data->filename)
+ if (delete_from_disk && gimp_data_get_filename (data))
retval = gimp_data_delete_from_disk (data, error);
g_object_unref (data);
@@ -593,7 +595,7 @@ gimp_data_factory_data_save_single (GimpDataFactory *factory,
if (! data->dirty)
return TRUE;
- if (! data->filename)
+ if (! gimp_data_get_filename (data))
{
gchar *writable_dir;
GError *my_error = NULL;
diff --git a/app/core/gimpdynamics-save.c b/app/core/gimpdynamics-save.c
index d98c440..e1c222d 100644
--- a/app/core/gimpdynamics-save.c
+++ b/app/core/gimpdynamics-save.c
@@ -35,7 +35,7 @@ gimp_dynamics_save (GimpData *data,
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
return gimp_config_serialize_to_file (GIMP_CONFIG (data),
- data->filename,
+ gimp_data_get_filename (data),
"GIMP dynamics file",
"end of GIMP dynamics file",
NULL, error);
diff --git a/app/core/gimpgradient-save.c b/app/core/gimpgradient-save.c
index 2e97488..64d3f4a 100644
--- a/app/core/gimpgradient-save.c
+++ b/app/core/gimpgradient-save.c
@@ -42,13 +42,13 @@ gimp_gradient_save (GimpData *data,
gint num_segments;
FILE *file;
- file = g_fopen (data->filename, "wb");
+ file = g_fopen (gimp_data_get_filename (data), "wb");
if (! file)
{
g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_OPEN,
_("Could not open '%s' for writing: %s"),
- gimp_filename_to_utf8 (data->filename),
+ gimp_filename_to_utf8 (gimp_data_get_filename (data)),
g_strerror (errno));
return FALSE;
}
diff --git a/app/core/gimppalette-save.c b/app/core/gimppalette-save.c
index 0d9ef4e..a1517c4 100644
--- a/app/core/gimppalette-save.c
+++ b/app/core/gimppalette-save.c
@@ -47,13 +47,13 @@ gimp_palette_save (GimpData *data,
GList *list;
FILE *file;
- file = g_fopen (data->filename, "wb");
+ file = g_fopen (gimp_data_get_filename (data), "wb");
if (! file)
{
g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_OPEN,
_("Could not open '%s' for writing: %s"),
- gimp_filename_to_utf8 (data->filename),
+ gimp_filename_to_utf8 (gimp_data_get_filename (data)),
g_strerror (errno));
return FALSE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]