X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=gio%2Fgfilteroutputstream.c;h=9089579e335530ab2f48031901934147cbccd0dd;hb=2e5bd8cf47f9e1559ccc44823a2f321b8ff8c1ea;hp=32fc6f7f2e2e6e2c637639b1767dd1faf2d3d9be;hpb=a431c976af52b02b63c642970a5e96a93bb5229b;p=platform%2Fupstream%2Fglib.git diff --git a/gio/gfilteroutputstream.c b/gio/gfilteroutputstream.c index 32fc6f7..9089579 100644 --- a/gio/gfilteroutputstream.c +++ b/gio/gfilteroutputstream.c @@ -13,27 +13,27 @@ * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General - * Public License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place, Suite 330, - * Boston, MA 02111-1307, USA. + * Public License along with this library; if not, see . * * Author: Christian Kellner */ #include "config.h" #include "gfilteroutputstream.h" -#include "gsimpleasyncresult.h" #include "goutputstream.h" #include "glibintl.h" -#include "gioalias.h" /** * SECTION:gfilteroutputstream * @short_description: Filter Output Stream * @include: gio/gio.h * - **/ + * Base class for output stream implementations that perform some + * kind of filtering operation on a base stream. Typical examples + * of filtering operations are character set conversion, compression + * and byte order flipping. + */ enum { PROP_0, @@ -64,45 +64,14 @@ static gboolean g_filter_output_stream_flush (GOutputStream *stream, static gboolean g_filter_output_stream_close (GOutputStream *stream, GCancellable *cancellable, GError **error); -static void g_filter_output_stream_write_async (GOutputStream *stream, - const void *buffer, - gsize count, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer data); -static gssize g_filter_output_stream_write_finish (GOutputStream *stream, - GAsyncResult *result, - GError **error); -static void g_filter_output_stream_flush_async (GOutputStream *stream, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer data); -static gboolean g_filter_output_stream_flush_finish (GOutputStream *stream, - GAsyncResult *result, - GError **error); -static void g_filter_output_stream_close_async (GOutputStream *stream, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer data); -static gboolean g_filter_output_stream_close_finish (GOutputStream *stream, - GAsyncResult *result, - GError **error); - - - -G_DEFINE_TYPE (GFilterOutputStream, g_filter_output_stream, G_TYPE_OUTPUT_STREAM) - -#define GET_PRIVATE(inst) G_TYPE_INSTANCE_GET_PRIVATE (inst, \ - G_TYPE_FILTER_OUTPUT_STREAM, GFilterOutputStreamPrivate) typedef struct { gboolean close_base; } GFilterOutputStreamPrivate; +G_DEFINE_ABSTRACT_TYPE_WITH_PRIVATE (GFilterOutputStream, g_filter_output_stream, G_TYPE_OUTPUT_STREAM) + static void g_filter_output_stream_class_init (GFilterOutputStreamClass *klass) { @@ -118,14 +87,6 @@ g_filter_output_stream_class_init (GFilterOutputStreamClass *klass) ostream_class->write_fn = g_filter_output_stream_write; ostream_class->flush = g_filter_output_stream_flush; ostream_class->close_fn = g_filter_output_stream_close; - ostream_class->write_async = g_filter_output_stream_write_async; - ostream_class->write_finish = g_filter_output_stream_write_finish; - ostream_class->flush_async = g_filter_output_stream_flush_async; - ostream_class->flush_finish = g_filter_output_stream_flush_finish; - ostream_class->close_async = g_filter_output_stream_close_async; - ostream_class->close_finish = g_filter_output_stream_close_finish; - - g_type_class_add_private (klass, sizeof (GFilterOutputStreamPrivate)); g_object_class_install_property (object_class, PROP_BASE_STREAM, @@ -182,8 +143,10 @@ g_filter_output_stream_get_property (GObject *object, GParamSpec *pspec) { GFilterOutputStream *filter_stream; + GFilterOutputStreamPrivate *priv; filter_stream = G_FILTER_OUTPUT_STREAM (object); + priv = g_filter_output_stream_get_instance_private (filter_stream); switch (prop_id) { @@ -192,7 +155,7 @@ g_filter_output_stream_get_property (GObject *object, break; case PROP_CLOSE_BASE: - g_value_set_boolean (value, GET_PRIVATE (filter_stream)->close_base); + g_value_set_boolean (value, priv->close_base); break; default: @@ -230,7 +193,7 @@ g_filter_output_stream_init (GFilterOutputStream *stream) * * Gets the base stream for the filter stream. * - * Returns: a #GOutputStream. + * Returns: (transfer none): a #GOutputStream. **/ GOutputStream * g_filter_output_stream_get_base_stream (GFilterOutputStream *stream) @@ -247,14 +210,18 @@ g_filter_output_stream_get_base_stream (GFilterOutputStream *stream) * Returns whether the base stream will be closed when @stream is * closed. * - * Return value: %TRUE if the base stream will be closed. + * Returns: %TRUE if the base stream will be closed. **/ gboolean g_filter_output_stream_get_close_base_stream (GFilterOutputStream *stream) { + GFilterOutputStreamPrivate *priv; + g_return_val_if_fail (G_IS_FILTER_OUTPUT_STREAM (stream), FALSE); - return GET_PRIVATE (stream)->close_base; + priv = g_filter_output_stream_get_instance_private (stream); + + return priv->close_base; } /** @@ -274,7 +241,7 @@ g_filter_output_stream_set_close_base_stream (GFilterOutputStream *stream, close_base = !!close_base; - priv = GET_PRIVATE (stream); + priv = g_filter_output_stream_get_instance_private (stream); if (priv->close_base != close_base) { @@ -326,14 +293,12 @@ g_filter_output_stream_close (GOutputStream *stream, GCancellable *cancellable, GError **error) { + GFilterOutputStream *filter_stream = G_FILTER_OUTPUT_STREAM (stream); + GFilterOutputStreamPrivate *priv = g_filter_output_stream_get_instance_private (filter_stream); gboolean res = TRUE; - if (GET_PRIVATE (stream)->close_base) + if (priv->close_base) { - GFilterOutputStream *filter_stream; - - filter_stream = G_FILTER_OUTPUT_STREAM (stream); - res = g_output_stream_close (filter_stream->base_stream, cancellable, error); @@ -341,145 +306,3 @@ g_filter_output_stream_close (GOutputStream *stream, return res; } - -static void -g_filter_output_stream_write_async (GOutputStream *stream, - const void *buffer, - gsize count, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer data) -{ - GFilterOutputStream *filter_stream; - - filter_stream = G_FILTER_OUTPUT_STREAM (stream); - - g_output_stream_write_async (filter_stream->base_stream, - buffer, - count, - io_priority, - cancellable, - callback, - data); - -} - -static gssize -g_filter_output_stream_write_finish (GOutputStream *stream, - GAsyncResult *result, - GError **error) -{ - GFilterOutputStream *filter_stream; - gssize nwritten; - - filter_stream = G_FILTER_OUTPUT_STREAM (stream); - - nwritten = g_output_stream_write_finish (filter_stream->base_stream, - result, - error); - - return nwritten; -} - -static void -g_filter_output_stream_flush_async (GOutputStream *stream, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer data) -{ - GFilterOutputStream *filter_stream; - - filter_stream = G_FILTER_OUTPUT_STREAM (stream); - - g_output_stream_flush_async (filter_stream->base_stream, - io_priority, - cancellable, - callback, - data); -} - -static gboolean -g_filter_output_stream_flush_finish (GOutputStream *stream, - GAsyncResult *result, - GError **error) -{ - GFilterOutputStream *filter_stream; - gboolean res; - - filter_stream = G_FILTER_OUTPUT_STREAM (stream); - - res = g_output_stream_flush_finish (filter_stream->base_stream, - result, - error); - - return res; -} - -static void -g_filter_output_stream_close_ready (GObject *object, - GAsyncResult *result, - gpointer user_data) -{ - GSimpleAsyncResult *simple = user_data; - GError *error = NULL; - - g_output_stream_close_finish (G_OUTPUT_STREAM (object), result, &error); - - if (error) - { - g_simple_async_result_set_from_error (simple, error); - g_error_free (error); - } - - g_simple_async_result_complete (simple); - g_object_unref (simple); -} - -static void -g_filter_output_stream_close_async (GOutputStream *stream, - int io_priority, - GCancellable *cancellable, - GAsyncReadyCallback callback, - gpointer user_data) -{ - GSimpleAsyncResult *simple; - - simple = g_simple_async_result_new (G_OBJECT (stream), - callback, user_data, - g_filter_output_stream_close_async); - - if (GET_PRIVATE (stream)->close_base) - { - GFilterOutputStream *filter_stream = G_FILTER_OUTPUT_STREAM (stream); - - g_output_stream_close_async (filter_stream->base_stream, - io_priority, cancellable, - g_filter_output_stream_close_ready, - g_object_ref (simple)); - } - else - /* do nothing */ - g_simple_async_result_complete_in_idle (simple); - - g_object_unref (simple); -} - -static gboolean -g_filter_output_stream_close_finish (GOutputStream *stream, - GAsyncResult *result, - GError **error) -{ - GSimpleAsyncResult *simple; - - g_return_val_if_fail (g_simple_async_result_is_valid ( - result, G_OBJECT (stream), g_filter_output_stream_close_async), FALSE); - - simple = G_SIMPLE_ASYNC_RESULT (result); - - return !g_simple_async_result_propagate_error (simple, error); -} - -#define __G_FILTER_OUTPUT_STREAM_C__ -#include "gioaliasdef.c"