|
Packit |
4b6dd7 |
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
|
|
Packit |
4b6dd7 |
/*
|
|
Packit |
4b6dd7 |
* GData Client
|
|
Packit |
4b6dd7 |
* Copyright (C) Philip Withnall 2009 <philip@tecnocode.co.uk>
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* GData Client is free software; you can redistribute it and/or
|
|
Packit |
4b6dd7 |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit |
4b6dd7 |
* License as published by the Free Software Foundation; either
|
|
Packit |
4b6dd7 |
* version 2.1 of the License, or (at your option) any later version.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* GData Client is distributed in the hope that it will be useful,
|
|
Packit |
4b6dd7 |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
4b6dd7 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
4b6dd7 |
* Lesser General Public License for more details.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit |
4b6dd7 |
* License along with GData Client. If not, see <http://www.gnu.org/licenses/>.
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
#ifndef GDATA_BUFFER_H
|
|
Packit |
4b6dd7 |
#define GDATA_BUFFER_H
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
#include <glib.h>
|
|
Packit |
4b6dd7 |
#include <glib-object.h>
|
|
Packit |
4b6dd7 |
#include <gio/gio.h>
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
G_BEGIN_DECLS
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
typedef struct _GDataBufferChunk GDataBufferChunk;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
/**
|
|
Packit |
4b6dd7 |
* GDataBuffer:
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* All the fields in the #GDataBuffer structure are private and should never be accessed directly.
|
|
Packit |
4b6dd7 |
*
|
|
Packit |
4b6dd7 |
* Since: 0.5.0
|
|
Packit |
4b6dd7 |
*/
|
|
Packit |
4b6dd7 |
typedef struct {
|
|
Packit |
4b6dd7 |
/*< private >*/
|
|
Packit |
4b6dd7 |
GDataBufferChunk *head;
|
|
Packit |
4b6dd7 |
gsize head_read_offset; /* number of bytes which have already been popped from the head chunk */
|
|
Packit |
4b6dd7 |
gsize total_length; /* total length of all the chunks available to read (i.e. head_read_offset is already subtracted) */
|
|
Packit |
4b6dd7 |
gboolean reached_eof; /* set to TRUE only once we've reached EOF */
|
|
Packit |
4b6dd7 |
GDataBufferChunk **tail; /* pointer to the GDataBufferChunk->next field of the current tail chunk */
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
GMutex mutex; /* mutex protecting the entire structure on push and pop */
|
|
Packit |
4b6dd7 |
GCond cond; /* a GCond to allow a popping thread to block on data being pushed into the buffer */
|
|
Packit |
4b6dd7 |
} GDataBuffer;
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
GDataBuffer *gdata_buffer_new (void) G_GNUC_WARN_UNUSED_RESULT G_GNUC_MALLOC;
|
|
Packit |
4b6dd7 |
void gdata_buffer_free (GDataBuffer *self);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
gboolean gdata_buffer_push_data (GDataBuffer *self, const guint8 *data, gsize length);
|
|
Packit |
4b6dd7 |
gsize gdata_buffer_pop_data (GDataBuffer *self, guint8 *data, gsize length_requested, gboolean *reached_eof, GCancellable *cancellable);
|
|
Packit |
4b6dd7 |
gsize gdata_buffer_pop_data_limited (GDataBuffer *self, guint8 *data, gsize maximum_length, gboolean *reached_eof);
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
G_END_DECLS
|
|
Packit |
4b6dd7 |
|
|
Packit |
4b6dd7 |
#endif /* !GDATA_BUFFER_H */
|