13781343738de4abddf56982325a77bd70a98cd26Alexander Larsson/* GIO - GLib Input, Output and Streaming Library
2f2a2d6c9ac2d98b565005d446fde01aac47f7d88Michael Natterer *
33781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * Copyright (C) 2006-2007 Red Hat, Inc.
43781343738de4abddf56982325a77bd70a98cd26Alexander Larsson *
53781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * This library is free software; you can redistribute it and/or
63781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * modify it under the terms of the GNU Lesser General Public
73781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * License as published by the Free Software Foundation; either
83781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * version 2 of the License, or (at your option) any later version.
93781343738de4abddf56982325a77bd70a98cd26Alexander Larsson *
103781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * This library is distributed in the hope that it will be useful,
113781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * but WITHOUT ANY WARRANTY; without even the implied warranty of
123781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
133781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * Lesser General Public License for more details.
143781343738de4abddf56982325a77bd70a98cd26Alexander Larsson *
153781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * You should have received a copy of the GNU Lesser General
163781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * Public License along with this library; if not, write to the
173781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
183781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * Boston, MA 02111-1307, USA.
193781343738de4abddf56982325a77bd70a98cd26Alexander Larsson *
203781343738de4abddf56982325a77bd70a98cd26Alexander Larsson * Author: Alexander Larsson <alexl@redhat.com>
213781343738de4abddf56982325a77bd70a98cd26Alexander Larsson */
223781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
23ced29277267476bbe4ba5e35f79a8d6a130cb989Alexander Larsson#if !defined (__GIO_GIO_H_INSIDE__) && !defined (GIO_COMPILATION)
24ced29277267476bbe4ba5e35f79a8d6a130cb989Alexander Larsson#error "Only <gio/gio.h> can be included directly."
25ced29277267476bbe4ba5e35f79a8d6a130cb989Alexander Larsson#endif
26ced29277267476bbe4ba5e35f79a8d6a130cb989Alexander Larsson
273781343738de4abddf56982325a77bd70a98cd26Alexander Larsson#ifndef __G_SEEKABLE_H__
283781343738de4abddf56982325a77bd70a98cd26Alexander Larsson#define __G_SEEKABLE_H__
293781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
303d93bf6968884d75dd2706ef85e2014305eb92f2Cody Russell#include <gio/giotypes.h>
313781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
323781343738de4abddf56982325a77bd70a98cd26Alexander LarssonG_BEGIN_DECLS
333781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
343781343738de4abddf56982325a77bd70a98cd26Alexander Larsson#define G_TYPE_SEEKABLE            (g_seekable_get_type ())
353781343738de4abddf56982325a77bd70a98cd26Alexander Larsson#define G_SEEKABLE(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), G_TYPE_SEEKABLE, GSeekable))
363781343738de4abddf56982325a77bd70a98cd26Alexander Larsson#define G_IS_SEEKABLE(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), G_TYPE_SEEKABLE))
373781343738de4abddf56982325a77bd70a98cd26Alexander Larsson#define G_SEEKABLE_GET_IFACE(obj)  (G_TYPE_INSTANCE_GET_INTERFACE ((obj), G_TYPE_SEEKABLE, GSeekableIface))
383781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
395247f12f3649726471080440de0d37b78c1cec33Andrew Walton/**
405247f12f3649726471080440de0d37b78c1cec33Andrew Walton * GSeekable:
41f2a2d6c9ac2d98b565005d446fde01aac47f7d88Michael Natterer *
425247f12f3649726471080440de0d37b78c1cec33Andrew Walton * Seek object for streaming operations.
43f2a2d6c9ac2d98b565005d446fde01aac47f7d88Michael Natterer **/
443781343738de4abddf56982325a77bd70a98cd26Alexander Larssontypedef struct _GSeekableIface   GSeekableIface;
453781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
465247f12f3649726471080440de0d37b78c1cec33Andrew Walton/**
475247f12f3649726471080440de0d37b78c1cec33Andrew Walton * GSeekableIface:
485247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @g_iface: The parent interface.
495247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @tell: Tells the current location within a stream.
505247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @can_seek: Checks if seeking is supported by the stream.
515247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @seek: Seeks to a location within a stream.
525247f12f3649726471080440de0d37b78c1cec33Andrew Walton * @can_truncate: Chekcs if truncation is suppored by the stream.
532c362b7f9eb7cc81f37970e24c5b5dcdc56ea6d5Alexander Larsson * @truncate_fn: Truncates a stream.
54f2a2d6c9ac2d98b565005d446fde01aac47f7d88Michael Natterer *
555247f12f3649726471080440de0d37b78c1cec33Andrew Walton * Provides an interface for implementing seekable functionality on I/O Streams.
56f2a2d6c9ac2d98b565005d446fde01aac47f7d88Michael Natterer **/
573781343738de4abddf56982325a77bd70a98cd26Alexander Larssonstruct _GSeekableIface
583781343738de4abddf56982325a77bd70a98cd26Alexander Larsson{
593781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  GTypeInterface g_iface;
603781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
613781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  /* Virtual Table */
62f2a2d6c9ac2d98b565005d446fde01aac47f7d88Michael Natterer
633781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  goffset     (* tell)	         (GSeekable    *seekable);
64f2a2d6c9ac2d98b565005d446fde01aac47f7d88Michael Natterer
653781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  gboolean    (* can_seek)       (GSeekable    *seekable);
663781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  gboolean    (* seek)	         (GSeekable    *seekable,
673781343738de4abddf56982325a77bd70a98cd26Alexander Larsson				  goffset       offset,
683781343738de4abddf56982325a77bd70a98cd26Alexander Larsson				  GSeekType     type,
693781343738de4abddf56982325a77bd70a98cd26Alexander Larsson				  GCancellable *cancellable,
703781343738de4abddf56982325a77bd70a98cd26Alexander Larsson				  GError      **error);
71f2a2d6c9ac2d98b565005d446fde01aac47f7d88Michael Natterer
723781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  gboolean    (* can_truncate)   (GSeekable    *seekable);
732c362b7f9eb7cc81f37970e24c5b5dcdc56ea6d5Alexander Larsson  gboolean    (* truncate_fn)    (GSeekable    *seekable,
743781343738de4abddf56982325a77bd70a98cd26Alexander Larsson				  goffset       offset,
753781343738de4abddf56982325a77bd70a98cd26Alexander Larsson				  GCancellable *cancellable,
763781343738de4abddf56982325a77bd70a98cd26Alexander Larsson				  GError       **error);
773781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
783781343738de4abddf56982325a77bd70a98cd26Alexander Larsson  /* TODO: Async seek/truncate */
793781343738de4abddf56982325a77bd70a98cd26Alexander Larsson};
803781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
81f2a2d6c9ac2d98b565005d446fde01aac47f7d88Michael NattererGType    g_seekable_get_type     (void) G_GNUC_CONST;
823781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
833781343738de4abddf56982325a77bd70a98cd26Alexander Larssongoffset  g_seekable_tell         (GSeekable     *seekable);
843781343738de4abddf56982325a77bd70a98cd26Alexander Larssongboolean g_seekable_can_seek     (GSeekable     *seekable);
853781343738de4abddf56982325a77bd70a98cd26Alexander Larssongboolean g_seekable_seek         (GSeekable     *seekable,
863781343738de4abddf56982325a77bd70a98cd26Alexander Larsson				  goffset        offset,
873781343738de4abddf56982325a77bd70a98cd26Alexander Larsson				  GSeekType      type,
883781343738de4abddf56982325a77bd70a98cd26Alexander Larsson				  GCancellable  *cancellable,
893781343738de4abddf56982325a77bd70a98cd26Alexander Larsson				  GError       **error);
903781343738de4abddf56982325a77bd70a98cd26Alexander Larssongboolean g_seekable_can_truncate (GSeekable     *seekable);
913781343738de4abddf56982325a77bd70a98cd26Alexander Larssongboolean g_seekable_truncate     (GSeekable     *seekable,
923781343738de4abddf56982325a77bd70a98cd26Alexander Larsson				  goffset        offset,
933781343738de4abddf56982325a77bd70a98cd26Alexander Larsson				  GCancellable  *cancellable,
943781343738de4abddf56982325a77bd70a98cd26Alexander Larsson				  GError       **error);
953781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
963781343738de4abddf56982325a77bd70a98cd26Alexander LarssonG_END_DECLS
973781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
983781343738de4abddf56982325a77bd70a98cd26Alexander Larsson
993781343738de4abddf56982325a77bd70a98cd26Alexander Larsson#endif /* __G_SEEKABLE_H__ */
100