1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163
|
/*
*
* Copyright (C) 2009-2011 Colomban Wendling <ban@herbesfolles.org>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#include "ctpl-output-stream.h"
#include <glib.h>
#include <gio/gio.h>
#include <string.h>
/**
* SECTION: output-stream
* @short_description: CTPL's data output stream
* @include: ctpl/ctpl.h
*
* The data output stream used by CTPL; built on top of #GOutputStream.
*
* A #CtplOutputStream is created with ctpl_output_stream_new(). It uses a
* #GObject<!-- -->-like refcounting, through ctpl_output_stream_ref() and
* ctpl_output_stream_unref().
*
* The errors that the functions in this module can throw comes from the
* %G_IO_ERROR or %CTPL_IO_ERROR domains unless otherwise mentioned.
*/
/**
* CtplOutputStream:
*
* An opaque object representing an output data stream.
*/
/* It's actually a GOutputStream, the structure is just a wrapper */
struct _CtplOutputStream
{
GOutputStream parent;
};
/**
* ctpl_output_stream_new:
* @stream: A #GOutputStream
*
* Creates a new #CtplOutputStream for a given #GOutputStream.
* This function adds a reference to the #GOutputStream.
*
* Returns: A new #CtplOutputStream.
*
* Since: 0.2
*/
CtplOutputStream *
ctpl_output_stream_new (GOutputStream *stream)
{
return g_object_ref (stream);
}
/**
* ctpl_output_stream_ref:
* @stream: A #CtplOutputStream
*
* Adds a reference to a #CtplOutputStream.
*
* Returns: The stream
*
* Since: 0.2
*/
CtplOutputStream *
ctpl_output_stream_ref (CtplOutputStream *stream)
{
return g_object_ref (stream);
}
/**
* ctpl_output_stream_unref:
* @stream: A #CtplOutputStream
*
* Removes a reference from a #CtplOutputStream. When its reference count
* reaches 0, the stream is destroyed.
*
* Since: 0.2
*/
void
ctpl_output_stream_unref (CtplOutputStream *stream)
{
g_object_unref (stream);
}
/**
* ctpl_output_stream_get_stream:
* @stream: A #CtplOutputStream
*
* Gets the underlying #GOutputStream associated with a #CtplOutputStream.
*
* Returns: (transfer none): The underlying #GOutputStream of @stream.
*
* Since: 0.3
*/
GOutputStream *
ctpl_output_stream_get_stream (CtplOutputStream *stream)
{
return &stream->parent;
}
/**
* ctpl_output_stream_write:
* @stream: A #CtplOutputStream
* @data: The data to write
* @length: Length of the data in bytes, or -1 if it is a 0-terminated string
* @error: Return location for errors, or %NULL to ignore them
*
* Writes a buffer to a #CtplOutputStream.
*
* Returns: %TRUE on success, %FALSE otherwise.
*
* Since: 0.2
*/
gboolean
ctpl_output_stream_write (CtplOutputStream *stream,
const gchar *data,
gssize length,
GError **error)
{
gsize len;
len = (length < 0) ? strlen (data) : (gsize)length;
return g_output_stream_write (G_OUTPUT_STREAM (stream), data, len, NULL,
error) == (gssize)len;
}
#undef ctpl_output_stream_put_c
/**
* ctpl_output_stream_put_c:
* @stream: A #CtplOutputStream
* @c: The character to write
* @error: Return location for errors, or %NULL to ignore them
*
* Writes a character to a #CtplOutputStream.
*
* Returns: %TRUE on success, %FALSE otherwise.
*
* Since: 0.2
*/
gboolean
ctpl_output_stream_put_c (CtplOutputStream *stream,
gchar c,
GError **error)
{
return ctpl_output_stream_write (stream, &c, 1, error);
}
|