1 #include "g_callback_output_stream.h"
3 G_DEFINE_TYPE (GCallbackOutputStream, g_callback_output_stream, G_TYPE_OUTPUT_STREAM);
5 struct _GCallbackOutputStreamPrivate {
6 GCallbackOutputStreamWriteFunc write_func;
7 GCallbackOutputStreamFlushFunc flush_func;
8 GCallbackOutputStreamCloseFunc close_func;
12 static gssize g_callback_output_stream_write (GOutputStream *stream,
15 GCancellable *cancellable,
17 static gboolean g_callback_output_stream_flush (GOutputStream *stream,
18 GCancellable *cancellable,
20 static gboolean g_callback_output_stream_close (GOutputStream *stream,
21 GCancellable *cancellable,
26 g_callback_output_stream_finalize (GObject *object)
28 GCallbackOutputStream *stream;
30 stream = G_CALLBACK_OUTPUT_STREAM (object);
32 G_OBJECT_CLASS (g_callback_output_stream_parent_class)->finalize (object);
36 g_callback_output_stream_class_init (GCallbackOutputStreamClass *klass)
38 GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
39 GOutputStreamClass *stream_class = G_OUTPUT_STREAM_CLASS (klass);
41 g_type_class_add_private (klass, sizeof (GCallbackOutputStreamPrivate));
43 gobject_class->finalize = g_callback_output_stream_finalize;
45 stream_class->write_fn = g_callback_output_stream_write;
46 stream_class->flush = g_callback_output_stream_flush;
47 stream_class->close_fn = g_callback_output_stream_close;
51 g_callback_output_stream_init (GCallbackOutputStream *callback_stream)
53 callback_stream->priv =
54 G_TYPE_INSTANCE_GET_PRIVATE (callback_stream,
55 G_TYPE_CALLBACK_OUTPUT_STREAM,
56 GCallbackOutputStreamPrivate);
60 g_callback_output_stream_new (GCallbackOutputStreamWriteFunc write_func,
61 GCallbackOutputStreamFlushFunc flush_func,
62 GCallbackOutputStreamCloseFunc close_func,
65 GCallbackOutputStream *stream;
67 stream = g_object_new (G_TYPE_CALLBACK_OUTPUT_STREAM, NULL);
69 stream->priv->write_func = write_func;
70 stream->priv->flush_func = flush_func;
71 stream->priv->close_func = close_func;
72 stream->priv->user_data = user_data;
74 return G_OUTPUT_STREAM (stream);
78 g_callback_output_stream_write (GOutputStream *stream,
81 GCancellable *cancellable,
84 GCallbackOutputStream *callback_stream = G_CALLBACK_OUTPUT_STREAM (stream);
85 GCallbackOutputStreamWriteFunc write_func = callback_stream->priv->write_func;
86 gpointer user_data = callback_stream->priv->user_data;
88 return write_func (buffer, count, cancellable, error, user_data);
92 g_callback_output_stream_flush (GOutputStream *stream,
93 GCancellable *cancellable,
96 GCallbackOutputStream *callback_stream = G_CALLBACK_OUTPUT_STREAM (stream);
97 GCallbackOutputStreamFlushFunc flush_func = callback_stream->priv->flush_func;
98 gpointer user_data = callback_stream->priv->user_data;
100 if (callback_stream->priv->flush_func)
101 return flush_func (cancellable, error, user_data);
107 g_callback_output_stream_close (GOutputStream *stream,
108 GCancellable *cancellable,
111 GCallbackOutputStream *callback_stream = G_CALLBACK_OUTPUT_STREAM (stream);
112 GCallbackOutputStreamCloseFunc close_func = callback_stream->priv->close_func;
113 gpointer user_data = callback_stream->priv->user_data;
115 callback_stream = G_CALLBACK_OUTPUT_STREAM (stream);
117 if (callback_stream->priv->close_func)
118 return close_func (cancellable, error, user_data);
123 #define __G_CALLBACK_OUTPUT_STREAM_C__