1 /* GIO - GLib Input, Output and Streaming Library 2 * 3 * Copyright (C) 2010 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_POLLABLE_INPUT_STREAM_H__ 20 #define __G_POLLABLE_INPUT_STREAM_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/gio.h> 27 28 G_BEGIN_DECLS 29 30 #define G_TYPE_POLLABLE_INPUT_STREAM (g_pollable_input_stream_get_type ()) 31 #define G_POLLABLE_INPUT_STREAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_POLLABLE_INPUT_STREAM, GPollableInputStream)) 32 #define G_IS_POLLABLE_INPUT_STREAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_POLLABLE_INPUT_STREAM)) 33 #define G_POLLABLE_INPUT_STREAM_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_POLLABLE_INPUT_STREAM, GPollableInputStreamInterface)) 34 35 /** 36 * GPollableInputStream: 37 * 38 * An interface for a #GInputStream that can be polled for readability. 39 * 40 * Since: 2.28 41 */ 42 typedef struct _GPollableInputStreamInterface GPollableInputStreamInterface; 43 44 /** 45 * GPollableInputStreamInterface: 46 * @g_iface: The parent interface. 47 * @can_poll: Checks if the #GPollableInputStream instance is actually pollable 48 * @is_readable: Checks if the stream is readable 49 * @create_source: Creates a #GSource to poll the stream 50 * @read_nonblocking: Does a non-blocking read or returns 51 * %G_IO_ERROR_WOULD_BLOCK 52 * 53 * The interface for pollable input streams. 54 * 55 * The default implementation of @can_poll always returns %TRUE. 56 * 57 * The default implementation of @read_nonblocking calls 58 * g_pollable_input_stream_is_readable(), and then calls 59 * g_input_stream_read() if it returns %TRUE. This means you only need 60 * to override it if it is possible that your @is_readable 61 * implementation may return %TRUE when the stream is not actually 62 * readable. 63 * 64 * Since: 2.28 65 */ 66 struct _GPollableInputStreamInterface 67 { 68 GTypeInterface g_iface; 69 70 /* Virtual Table */ 71 gboolean (*can_poll) (GPollableInputStream *stream); 72 73 gboolean (*is_readable) (GPollableInputStream *stream); 74 GSource * (*create_source) (GPollableInputStream *stream, 75 GCancellable *cancellable); 76 gssize (*read_nonblocking) (GPollableInputStream *stream, 77 void *buffer, 78 gsize count, 79 GError **error); 80 }; 81 82 GLIB_AVAILABLE_IN_ALL 83 GType g_pollable_input_stream_get_type (void) G_GNUC_CONST; 84 85 GLIB_AVAILABLE_IN_ALL 86 gboolean g_pollable_input_stream_can_poll (GPollableInputStream *stream); 87 88 GLIB_AVAILABLE_IN_ALL 89 gboolean g_pollable_input_stream_is_readable (GPollableInputStream *stream); 90 GLIB_AVAILABLE_IN_ALL 91 GSource *g_pollable_input_stream_create_source (GPollableInputStream *stream, 92 GCancellable *cancellable); 93 94 GLIB_AVAILABLE_IN_ALL 95 gssize g_pollable_input_stream_read_nonblocking (GPollableInputStream *stream, 96 void *buffer, 97 gsize count, 98 GCancellable *cancellable, 99 GError **error); 100 101 G_END_DECLS 102 103 104 #endif /* __G_POLLABLE_INPUT_STREAM_H__ */ 105