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_OUTPUT_STREAM_H__ 20 #define __G_POLLABLE_OUTPUT_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_OUTPUT_STREAM (g_pollable_output_stream_get_type ()) 31 #define G_POLLABLE_OUTPUT_STREAM(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_POLLABLE_OUTPUT_STREAM, GPollableOutputStream)) 32 #define G_IS_POLLABLE_OUTPUT_STREAM(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_POLLABLE_OUTPUT_STREAM)) 33 #define G_POLLABLE_OUTPUT_STREAM_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_POLLABLE_OUTPUT_STREAM, GPollableOutputStreamInterface)) 34 35 /** 36 * GPollableOutputStream: 37 * 38 * An interface for a #GOutputStream that can be polled for writeability. 39 * 40 * Since: 2.28 41 */ 42 typedef struct _GPollableOutputStreamInterface GPollableOutputStreamInterface; 43 44 /** 45 * GPollableOutputStreamInterface: 46 * @g_iface: The parent interface. 47 * @can_poll: Checks if the #GPollableOutputStream instance is actually pollable 48 * @is_writable: Checks if the stream is writable 49 * @create_source: Creates a #GSource to poll the stream 50 * @write_nonblocking: Does a non-blocking write or returns 51 * %G_IO_ERROR_WOULD_BLOCK 52 * @writev_nonblocking: Does a vectored non-blocking write, or returns 53 * %G_POLLABLE_RETURN_WOULD_BLOCK 54 * 55 * The interface for pollable output streams. 56 * 57 * The default implementation of @can_poll always returns %TRUE. 58 * 59 * The default implementation of @write_nonblocking calls 60 * g_pollable_output_stream_is_writable(), and then calls 61 * g_output_stream_write() if it returns %TRUE. This means you only 62 * need to override it if it is possible that your @is_writable 63 * implementation may return %TRUE when the stream is not actually 64 * writable. 65 * 66 * The default implementation of @writev_nonblocking calls 67 * g_pollable_output_stream_write_nonblocking() for each vector, and converts 68 * its return value and error (if set) to a #GPollableReturn. You should 69 * override this where possible to avoid having to allocate a #GError to return 70 * %G_IO_ERROR_WOULD_BLOCK. 71 * 72 * Since: 2.28 73 */ 74 struct _GPollableOutputStreamInterface 75 { 76 GTypeInterface g_iface; 77 78 /* Virtual Table */ 79 gboolean (*can_poll) (GPollableOutputStream *stream); 80 81 gboolean (*is_writable) (GPollableOutputStream *stream); 82 GSource * (*create_source) (GPollableOutputStream *stream, 83 GCancellable *cancellable); 84 gssize (*write_nonblocking) (GPollableOutputStream *stream, 85 const void *buffer, 86 gsize count, 87 GError **error); 88 GPollableReturn (*writev_nonblocking) (GPollableOutputStream *stream, 89 const GOutputVector *vectors, 90 gsize n_vectors, 91 gsize *bytes_written, 92 GError **error); 93 }; 94 95 GLIB_AVAILABLE_IN_ALL 96 GType g_pollable_output_stream_get_type (void) G_GNUC_CONST; 97 98 GLIB_AVAILABLE_IN_ALL 99 gboolean g_pollable_output_stream_can_poll (GPollableOutputStream *stream); 100 101 GLIB_AVAILABLE_IN_ALL 102 gboolean g_pollable_output_stream_is_writable (GPollableOutputStream *stream); 103 GLIB_AVAILABLE_IN_ALL 104 GSource *g_pollable_output_stream_create_source (GPollableOutputStream *stream, 105 GCancellable *cancellable); 106 107 GLIB_AVAILABLE_IN_ALL 108 gssize g_pollable_output_stream_write_nonblocking (GPollableOutputStream *stream, 109 const void *buffer, 110 gsize count, 111 GCancellable *cancellable, 112 GError **error); 113 114 GLIB_AVAILABLE_IN_2_60 115 GPollableReturn g_pollable_output_stream_writev_nonblocking (GPollableOutputStream *stream, 116 const GOutputVector *vectors, 117 gsize n_vectors, 118 gsize *bytes_written, 119 GCancellable *cancellable, 120 GError **error); 121 122 G_END_DECLS 123 124 125 #endif /* __G_POLLABLE_OUTPUT_STREAM_H__ */ 126