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__