1 #include "g_callback_input_stream.h"
3 G_DEFINE_TYPE (GCallbackInputStream
, g_callback_input_stream
, G_TYPE_INPUT_STREAM
);
5 struct _GCallbackInputStreamPrivate
{
6 GCallbackInputStreamReadFunc read_func
;
7 GCallbackInputStreamCloseFunc close_func
;
11 static gssize
g_callback_input_stream_read (GInputStream
*stream
,
14 GCancellable
*cancellable
,
16 static gssize
g_callback_input_stream_skip (GInputStream
*stream
,
18 GCancellable
*cancellable
,
20 static gboolean
g_callback_input_stream_close (GInputStream
*stream
,
21 GCancellable
*cancellable
,
26 g_callback_input_stream_finalize (GObject
*object
)
28 GCallbackInputStream
*stream
;
30 stream
= G_CALLBACK_INPUT_STREAM (object
);
32 G_OBJECT_CLASS (g_callback_input_stream_parent_class
)->finalize (object
);
36 g_callback_input_stream_class_init (GCallbackInputStreamClass
*klass
)
38 GObjectClass
*gobject_class
= G_OBJECT_CLASS (klass
);
39 GInputStreamClass
*stream_class
= G_INPUT_STREAM_CLASS (klass
);
41 g_type_class_add_private (klass
, sizeof (GCallbackInputStreamPrivate
));
43 gobject_class
->finalize
= g_callback_input_stream_finalize
;
45 stream_class
->read_fn
= g_callback_input_stream_read
;
46 stream_class
->skip
= g_callback_input_stream_skip
;
47 stream_class
->close_fn
= g_callback_input_stream_close
;
51 g_callback_input_stream_init (GCallbackInputStream
*callback_stream
)
53 callback_stream
->priv
=
54 G_TYPE_INSTANCE_GET_PRIVATE (callback_stream
,
55 G_TYPE_CALLBACK_INPUT_STREAM
,
56 GCallbackInputStreamPrivate
);
60 g_callback_input_stream_new (GCallbackInputStreamReadFunc read_func
,
61 GCallbackInputStreamCloseFunc close_func
,
64 GCallbackInputStream
*stream
;
66 stream
= g_object_new (G_TYPE_CALLBACK_INPUT_STREAM
, NULL
);
68 stream
->priv
->read_func
= read_func
;
69 stream
->priv
->close_func
= close_func
;
70 stream
->priv
->user_data
= user_data
;
72 return G_INPUT_STREAM (stream
);
76 g_callback_input_stream_read (GInputStream
*stream
,
79 GCancellable
*cancellable
,
82 GCallbackInputStream
*callback_stream
= G_CALLBACK_INPUT_STREAM (stream
);
83 GCallbackInputStreamReadFunc read_func
= callback_stream
->priv
->read_func
;
84 gpointer user_data
= callback_stream
->priv
->user_data
;
86 return read_func (buffer
, count
, cancellable
, error
, user_data
);
90 g_callback_input_stream_skip (GInputStream
*stream
,
92 GCancellable
*cancellable
,
95 GCallbackInputStream
*callback_stream
= G_CALLBACK_INPUT_STREAM (stream
);
96 GCallbackInputStreamReadFunc read_func
= callback_stream
->priv
->read_func
;
97 gpointer user_data
= callback_stream
->priv
->user_data
;
99 return read_func (NULL
, count
, cancellable
, error
, user_data
);
103 g_callback_input_stream_close (GInputStream
*stream
,
104 GCancellable
*cancellable
,
107 GCallbackInputStream
*callback_stream
= G_CALLBACK_INPUT_STREAM (stream
);
108 GCallbackInputStreamCloseFunc close_func
= callback_stream
->priv
->close_func
;
109 gpointer user_data
= callback_stream
->priv
->user_data
;
111 callback_stream
= G_CALLBACK_INPUT_STREAM (stream
);
113 if (callback_stream
->priv
->close_func
)
114 return close_func (cancellable
, error
, user_data
);
119 #define __G_CALLBACK_INPUT_STREAM_C__