GAsyncReadyCallback
g_async_result_get_user_data
g_async_result_get_source_object
+g_async_result_is_tagged
g_async_result_legacy_propagate_error
<SUBSECTION Standard>
G_ASYNC_RESULT
else
return FALSE;
}
+
+/**
+ * g_async_result_is_tagged:
+ * @result: a #GAsyncResult
+ * @source_tag: an application-defined tag
+ *
+ * Checks if @result has the given @source_tag (generally a function
+ * pointer indicating the function @result was created by).
+ *
+ * Returns: %TRUE if @result has the indicated @source_tag, %FALSE if
+ * not.
+ *
+ * Since: 2.34
+ **/
+gboolean
+g_async_result_is_tagged (GAsyncResult *res,
+ gpointer source_tag)
+{
+ GAsyncResultIface *iface;
+
+ g_return_val_if_fail (G_IS_ASYNC_RESULT (res), FALSE);
+
+ iface = G_ASYNC_RESULT_GET_IFACE (res);
+
+ if (!iface->is_tagged)
+ return FALSE;
+
+ return (* iface->is_tagged) (res, source_tag);
+}
* @g_iface: The parent interface.
* @get_user_data: Gets the user data passed to the callback.
* @get_source_object: Gets the source object that issued the asynchronous operation.
+ * @is_tagged: Checks if a result is tagged with a particular source.
*
* Interface definition for #GAsyncResult.
**/
gpointer (* get_user_data) (GAsyncResult *res);
GObject * (* get_source_object) (GAsyncResult *res);
+
+ gboolean (* is_tagged) (GAsyncResult *res,
+ gpointer tag);
};
GType g_async_result_get_type (void) G_GNUC_CONST;
GLIB_AVAILABLE_IN_2_34
gboolean g_async_result_legacy_propagate_error (GAsyncResult *res,
GError **error);
+GLIB_AVAILABLE_IN_2_34
+gboolean g_async_result_is_tagged (GAsyncResult *res,
+ gpointer source_tag);
G_END_DECLS
GAsyncResult *result,
GError **error)
{
- GSimpleAsyncResult *simple;
GBufferedInputStreamClass *class;
g_return_val_if_fail (G_IS_BUFFERED_INPUT_STREAM (stream), -1);
if (g_async_result_legacy_propagate_error (result, error))
return -1;
-
- if (G_IS_SIMPLE_ASYNC_RESULT (result))
+ else if (g_async_result_is_tagged (result, g_buffered_input_stream_fill_async))
{
- simple = G_SIMPLE_ASYNC_RESULT (result);
-
/* Special case read of 0 bytes */
- if (g_simple_async_result_get_source_tag (simple) == g_buffered_input_stream_fill_async)
- return 0;
+ return 0;
}
class = G_BUFFERED_INPUT_STREAM_GET_CLASS (stream);
GError **error)
{
GFileEnumeratorClass *class;
- GSimpleAsyncResult *simple;
g_return_val_if_fail (G_IS_FILE_ENUMERATOR (enumerator), NULL);
g_return_val_if_fail (G_IS_ASYNC_RESULT (result), NULL);
if (g_async_result_legacy_propagate_error (result, error))
return NULL;
-
- if (G_IS_SIMPLE_ASYNC_RESULT (result))
- {
- simple = G_SIMPLE_ASYNC_RESULT (result);
-
+ else if (g_async_result_is_tagged (result, g_file_enumerator_next_files_async))
+ {
/* Special case read of 0 files */
- if (g_simple_async_result_get_source_tag (simple) == g_file_enumerator_next_files_async)
- return NULL;
+ return NULL;
}
class = G_FILE_ENUMERATOR_GET_CLASS (enumerator);
GAsyncResult *result,
GError **error)
{
- GSimpleAsyncResult *simple;
GInputStreamClass *class;
g_return_val_if_fail (G_IS_INPUT_STREAM (stream), -1);
if (g_async_result_legacy_propagate_error (result, error))
return -1;
-
- if (G_IS_SIMPLE_ASYNC_RESULT (result))
+ else if (g_async_result_is_tagged (result, g_input_stream_read_async))
{
- simple = G_SIMPLE_ASYNC_RESULT (result);
-
/* Special case read of 0 bytes */
- if (g_simple_async_result_get_source_tag (simple) == g_input_stream_read_async)
- return 0;
+ return 0;
}
class = G_INPUT_STREAM_GET_CLASS (stream);
GAsyncResult *result,
GError **error)
{
- GSimpleAsyncResult *simple;
GInputStreamClass *class;
g_return_val_if_fail (G_IS_INPUT_STREAM (stream), -1);
if (g_async_result_legacy_propagate_error (result, error))
return -1;
-
- if (G_IS_SIMPLE_ASYNC_RESULT (result))
+ else if (g_async_result_is_tagged (result, g_input_stream_skip_async))
{
- simple = G_SIMPLE_ASYNC_RESULT (result);
-
/* Special case skip of 0 bytes */
- if (g_simple_async_result_get_source_tag (simple) == g_input_stream_skip_async)
- return 0;
+ return 0;
}
class = G_INPUT_STREAM_GET_CLASS (stream);
GAsyncResult *result,
GError **error)
{
- GSimpleAsyncResult *simple;
GInputStreamClass *class;
g_return_val_if_fail (G_IS_INPUT_STREAM (stream), FALSE);
if (g_async_result_legacy_propagate_error (result, error))
return FALSE;
-
- if (G_IS_SIMPLE_ASYNC_RESULT (result))
+ else if (g_async_result_is_tagged (result, g_input_stream_close_async))
{
- simple = G_SIMPLE_ASYNC_RESULT (result);
-
/* Special case already closed */
- if (g_simple_async_result_get_source_tag (simple) == g_input_stream_close_async)
- return TRUE;
+ return TRUE;
}
class = G_INPUT_STREAM_GET_CLASS (stream);
g_async_result_get_type
g_async_result_get_user_data
g_async_result_get_source_object
+g_async_result_is_tagged
g_async_result_legacy_propagate_error
g_buffered_input_stream_get_type
g_buffered_input_stream_new
GAsyncResult *result,
GError **error)
{
- GSimpleAsyncResult *simple;
GIOStreamClass *class;
g_return_val_if_fail (G_IS_IO_STREAM (stream), FALSE);
if (g_async_result_legacy_propagate_error (result, error))
return FALSE;
-
- if (G_IS_SIMPLE_ASYNC_RESULT (result))
+ else if (g_async_result_is_tagged (result, g_io_stream_close_async))
{
- simple = G_SIMPLE_ASYNC_RESULT (result);
-
/* Special case already closed */
- if (g_simple_async_result_get_source_tag (simple) == g_io_stream_close_async)
- return TRUE;
+ return TRUE;
}
class = G_IO_STREAM_GET_CLASS (stream);
GAsyncResult *result,
GError **error)
{
- GSimpleAsyncResult *simple;
GOutputStreamClass *class;
g_return_val_if_fail (G_IS_OUTPUT_STREAM (stream), -1);
if (g_async_result_legacy_propagate_error (result, error))
return -1;
-
- if (G_IS_SIMPLE_ASYNC_RESULT (result))
+ else if (g_async_result_is_tagged (result, g_output_stream_write_async))
{
- simple = G_SIMPLE_ASYNC_RESULT (result);
-
/* Special case writes of 0 bytes */
- if (g_simple_async_result_get_source_tag (simple) == g_output_stream_write_async)
- return 0;
+ return 0;
}
class = G_OUTPUT_STREAM_GET_CLASS (stream);
GAsyncResult *result,
GError **error)
{
- GSimpleAsyncResult *simple;
GOutputStreamClass *klass;
g_return_val_if_fail (G_IS_OUTPUT_STREAM (stream), FALSE);
if (g_async_result_legacy_propagate_error (result, error))
return FALSE;
-
- if (G_IS_SIMPLE_ASYNC_RESULT (result))
+ else if (g_async_result_is_tagged (result, g_output_stream_flush_async))
{
- simple = G_SIMPLE_ASYNC_RESULT (result);
-
/* Special case default implementation */
- if (g_simple_async_result_get_source_tag (simple) == g_output_stream_flush_async)
- return TRUE;
+ return 0;
}
klass = G_OUTPUT_STREAM_GET_CLASS (stream);
GAsyncResult *result,
GError **error)
{
- GSimpleAsyncResult *simple;
GOutputStreamClass *class;
g_return_val_if_fail (G_IS_OUTPUT_STREAM (stream), FALSE);
if (g_async_result_legacy_propagate_error (result, error))
return FALSE;
-
- if (G_IS_SIMPLE_ASYNC_RESULT (result))
+ else if (g_async_result_is_tagged (result, g_output_stream_close_async))
{
- simple = G_SIMPLE_ASYNC_RESULT (result);
-
/* Special case already closed */
- if (g_simple_async_result_get_source_tag (simple) == g_output_stream_close_async)
- return TRUE;
+ return TRUE;
}
class = G_OUTPUT_STREAM_GET_CLASS (stream);
if (g_async_result_legacy_propagate_error (result, error))
return NULL;
-
- if (G_IS_SIMPLE_ASYNC_RESULT (result))
+ else if (g_async_result_is_tagged (result, g_resolver_lookup_by_name_async))
{
GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
+ GInetAddress *addr;
/* Handle the stringified-IP-addr case */
- if (g_simple_async_result_get_source_tag (simple) == g_resolver_lookup_by_name_async)
- {
- GInetAddress *addr;
-
- addr = g_simple_async_result_get_op_res_gpointer (simple);
- return g_list_append (NULL, g_object_ref (addr));
- }
+ addr = g_simple_async_result_get_op_res_gpointer (simple);
+ return g_list_append (NULL, g_object_ref (addr));
}
addrs = G_RESOLVER_GET_CLASS (resolver)->
return NULL;
}
+static gboolean
+g_simple_async_result_is_tagged (GAsyncResult *res,
+ gpointer source_tag)
+{
+ return G_SIMPLE_ASYNC_RESULT (res)->source_tag == source_tag;
+}
+
static void
g_simple_async_result_async_result_iface_init (GAsyncResultIface *iface)
{
iface->get_user_data = g_simple_async_result_get_user_data;
iface->get_source_object = g_simple_async_result_get_source_object;
+ iface->is_tagged = g_simple_async_result_is_tagged;
}
/**