| 1 | /* GIO - GLib Input, Output and Streaming Library | 
| 2 |  * | 
| 3 |  * Copyright 2011 Red Hat, Inc. | 
| 4 |  * | 
| 5 |  * This library is free software; you can redistribute it and/or | 
| 6 |  * modify it under the terms of the GNU Lesser General Public | 
| 7 |  * License as published by the Free Software Foundation; either | 
| 8 |  * version 2.1 of the License, or (at your option) any later version. | 
| 9 |  * | 
| 10 |  * This library is distributed in the hope that it will be useful, | 
| 11 |  * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 12 |  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
| 13 |  * Lesser General Public License for more details. | 
| 14 |  * | 
| 15 |  * You should have received a copy of the GNU Lesser General | 
| 16 |  * Public License along with this library; if not, see <http://www.gnu.org/licenses/>. | 
| 17 |  */ | 
| 18 |  | 
| 19 | #ifndef __G_TASK_H__ | 
| 20 | #define __G_TASK_H__ | 
| 21 |  | 
| 22 | #if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION) | 
| 23 | #error "Only <gio/gio.h> can be included directly." | 
| 24 | #endif | 
| 25 |  | 
| 26 | #include <gio/giotypes.h> | 
| 27 |  | 
| 28 | G_BEGIN_DECLS | 
| 29 |  | 
| 30 | #define G_TYPE_TASK         (g_task_get_type ()) | 
| 31 | #define G_TASK(o)           (G_TYPE_CHECK_INSTANCE_CAST ((o), G_TYPE_TASK, GTask)) | 
| 32 | #define G_TASK_CLASS(k)     (G_TYPE_CHECK_CLASS_CAST((k), G_TYPE_TASK, GTaskClass)) | 
| 33 | #define G_IS_TASK(o)        (G_TYPE_CHECK_INSTANCE_TYPE ((o), G_TYPE_TASK)) | 
| 34 | #define G_IS_TASK_CLASS(k)  (G_TYPE_CHECK_CLASS_TYPE ((k), G_TYPE_TASK)) | 
| 35 | #define G_TASK_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), G_TYPE_TASK, GTaskClass)) | 
| 36 |  | 
| 37 | typedef struct _GTaskClass   GTaskClass; | 
| 38 |  | 
| 39 | GLIB_AVAILABLE_IN_2_36 | 
| 40 | GType         g_task_get_type              (void) G_GNUC_CONST; | 
| 41 |  | 
| 42 | GLIB_AVAILABLE_IN_2_36 | 
| 43 | GTask        *g_task_new                   (gpointer             source_object, | 
| 44 |                                             GCancellable        *cancellable, | 
| 45 |                                             GAsyncReadyCallback  callback, | 
| 46 |                                             gpointer             callback_data); | 
| 47 |  | 
| 48 | GLIB_AVAILABLE_IN_2_36 | 
| 49 | void          g_task_report_error          (gpointer             source_object, | 
| 50 |                                             GAsyncReadyCallback  callback, | 
| 51 |                                             gpointer             callback_data, | 
| 52 |                                             gpointer             source_tag, | 
| 53 |                                             GError              *error); | 
| 54 | GLIB_AVAILABLE_IN_2_36 | 
| 55 | void          g_task_report_new_error      (gpointer             source_object, | 
| 56 |                                             GAsyncReadyCallback  callback, | 
| 57 |                                             gpointer             callback_data, | 
| 58 |                                             gpointer             source_tag, | 
| 59 |                                             GQuark               domain, | 
| 60 |                                             gint                 code, | 
| 61 |                                             const char          *format, | 
| 62 |                                             ...) G_GNUC_PRINTF(7, 8); | 
| 63 |  | 
| 64 | GLIB_AVAILABLE_IN_2_36 | 
| 65 | void          g_task_set_task_data         (GTask               *task, | 
| 66 |                                             gpointer             task_data, | 
| 67 |                                             GDestroyNotify       task_data_destroy); | 
| 68 | GLIB_AVAILABLE_IN_2_36 | 
| 69 | void          g_task_set_priority          (GTask               *task, | 
| 70 |                                             gint                 priority); | 
| 71 | GLIB_AVAILABLE_IN_2_36 | 
| 72 | void          g_task_set_check_cancellable (GTask               *task, | 
| 73 |                                             gboolean             check_cancellable); | 
| 74 | GLIB_AVAILABLE_IN_2_36 | 
| 75 | void          g_task_set_source_tag        (GTask               *task, | 
| 76 |                                             gpointer             source_tag); | 
| 77 | GLIB_AVAILABLE_IN_2_60 | 
| 78 | void          g_task_set_name              (GTask               *task, | 
| 79 |                                             const gchar         *name); | 
| 80 |  | 
| 81 | /* Macro wrapper to set the task name when setting the source tag. */ | 
| 82 | #if GLIB_VERSION_MIN_REQUIRED >= GLIB_VERSION_2_60 | 
| 83 | #define g_task_set_source_tag(task, tag) G_STMT_START { \ | 
| 84 |   GTask *_task = (task); \ | 
| 85 |   (g_task_set_source_tag) (_task, tag); \ | 
| 86 |   if (g_task_get_name (_task) == NULL) \ | 
| 87 |     g_task_set_name (_task, G_STRINGIFY (tag)); \ | 
| 88 | } G_STMT_END | 
| 89 | #endif | 
| 90 |  | 
| 91 | GLIB_AVAILABLE_IN_2_36 | 
| 92 | gpointer      g_task_get_source_object     (GTask               *task); | 
| 93 | GLIB_AVAILABLE_IN_2_36 | 
| 94 | gpointer      g_task_get_task_data         (GTask               *task); | 
| 95 | GLIB_AVAILABLE_IN_2_36 | 
| 96 | gint          g_task_get_priority          (GTask               *task); | 
| 97 | GLIB_AVAILABLE_IN_2_36 | 
| 98 | GMainContext *g_task_get_context           (GTask               *task); | 
| 99 | GLIB_AVAILABLE_IN_2_36 | 
| 100 | GCancellable *g_task_get_cancellable       (GTask               *task); | 
| 101 | GLIB_AVAILABLE_IN_2_36 | 
| 102 | gboolean      g_task_get_check_cancellable (GTask               *task); | 
| 103 | GLIB_AVAILABLE_IN_2_36 | 
| 104 | gpointer      g_task_get_source_tag        (GTask               *task); | 
| 105 | GLIB_AVAILABLE_IN_2_60 | 
| 106 | const gchar  *g_task_get_name              (GTask               *task); | 
| 107 |  | 
| 108 | GLIB_AVAILABLE_IN_2_36 | 
| 109 | gboolean      g_task_is_valid              (gpointer             result, | 
| 110 |                                             gpointer             source_object); | 
| 111 |  | 
| 112 |  | 
| 113 | typedef void (*GTaskThreadFunc)           (GTask           *task, | 
| 114 |                                            gpointer         source_object, | 
| 115 |                                            gpointer         task_data, | 
| 116 |                                            GCancellable    *cancellable); | 
| 117 | GLIB_AVAILABLE_IN_2_36 | 
| 118 | void          g_task_run_in_thread        (GTask           *task, | 
| 119 |                                            GTaskThreadFunc  task_func); | 
| 120 | GLIB_AVAILABLE_IN_2_36 | 
| 121 | void          g_task_run_in_thread_sync   (GTask           *task, | 
| 122 |                                            GTaskThreadFunc  task_func); | 
| 123 | GLIB_AVAILABLE_IN_2_36 | 
| 124 | gboolean      g_task_set_return_on_cancel (GTask           *task, | 
| 125 |                                            gboolean         return_on_cancel); | 
| 126 | GLIB_AVAILABLE_IN_2_36 | 
| 127 | gboolean      g_task_get_return_on_cancel (GTask           *task); | 
| 128 |  | 
| 129 | GLIB_AVAILABLE_IN_2_36 | 
| 130 | void          g_task_attach_source        (GTask           *task, | 
| 131 |                                            GSource         *source, | 
| 132 |                                            GSourceFunc      callback); | 
| 133 |  | 
| 134 |  | 
| 135 | GLIB_AVAILABLE_IN_2_36 | 
| 136 | void          g_task_return_pointer            (GTask           *task, | 
| 137 |                                                 gpointer         result, | 
| 138 |                                                 GDestroyNotify   result_destroy); | 
| 139 | GLIB_AVAILABLE_IN_2_36 | 
| 140 | void          g_task_return_boolean            (GTask           *task, | 
| 141 |                                                 gboolean         result); | 
| 142 | GLIB_AVAILABLE_IN_2_36 | 
| 143 | void          g_task_return_int                (GTask           *task, | 
| 144 |                                                 gssize           result); | 
| 145 |  | 
| 146 | GLIB_AVAILABLE_IN_2_36 | 
| 147 | void          g_task_return_error              (GTask           *task, | 
| 148 |                                                 GError          *error); | 
| 149 | GLIB_AVAILABLE_IN_2_36 | 
| 150 | void          g_task_return_new_error          (GTask           *task, | 
| 151 |                                                 GQuark           domain, | 
| 152 |                                                 gint             code, | 
| 153 |                                                 const char      *format, | 
| 154 |                                                 ...) G_GNUC_PRINTF (4, 5); | 
| 155 | GLIB_AVAILABLE_IN_2_64 | 
| 156 | void          g_task_return_value              (GTask           *task, | 
| 157 |                                                 GValue          *result); | 
| 158 |  | 
| 159 | GLIB_AVAILABLE_IN_2_36 | 
| 160 | gboolean      g_task_return_error_if_cancelled (GTask           *task); | 
| 161 |  | 
| 162 | GLIB_AVAILABLE_IN_2_36 | 
| 163 | gpointer      g_task_propagate_pointer         (GTask           *task, | 
| 164 |                                                 GError         **error); | 
| 165 | GLIB_AVAILABLE_IN_2_36 | 
| 166 | gboolean      g_task_propagate_boolean         (GTask           *task, | 
| 167 |                                                 GError         **error); | 
| 168 | GLIB_AVAILABLE_IN_2_36 | 
| 169 | gssize        g_task_propagate_int             (GTask           *task, | 
| 170 |                                                 GError         **error); | 
| 171 | GLIB_AVAILABLE_IN_2_64 | 
| 172 | gboolean      g_task_propagate_value           (GTask           *task, | 
| 173 |                                                 GValue          *value, | 
| 174 |                                                 GError         **error); | 
| 175 | GLIB_AVAILABLE_IN_2_36 | 
| 176 | gboolean      g_task_had_error                 (GTask           *task); | 
| 177 | GLIB_AVAILABLE_IN_2_44 | 
| 178 | gboolean      g_task_get_completed             (GTask           *task); | 
| 179 |  | 
| 180 | G_END_DECLS | 
| 181 |  | 
| 182 | #endif /* __G_TASK_H__ */ | 
| 183 |  |