1
<refentry id="camel-CamelSeekableStream">
3
<refentrytitle role="top_of_page" id="camel-CamelSeekableStream.top_of_page">CamelSeekableStream</refentrytitle>
4
<manvolnum>3</manvolnum>
5
<refmiscinfo>CAMEL Library</refmiscinfo>
9
<refname>CamelSeekableStream</refname>
10
<refpurpose></refpurpose>
13
<refsynopsisdiv id="camel-CamelSeekableStream.synopsis" role="synopsis">
14
<title role="synopsis.title">Synopsis</title>
17
struct <link linkend="CamelSeekableStream">CamelSeekableStream</link>;
18
enum <link linkend="CamelStreamSeekPolicy">CamelStreamSeekPolicy</link>;
19
#define <link linkend="CAMEL-STREAM-UNBOUND--CAPS">CAMEL_STREAM_UNBOUND</link>
20
<link linkend="off-t">off_t</link> <link linkend="camel-seekable-stream-seek">camel_seekable_stream_seek</link> (<link linkend="CamelSeekableStream">CamelSeekableStream</link> *stream,
21
<link linkend="off-t">off_t</link> offset,
22
<link linkend="CamelStreamSeekPolicy">CamelStreamSeekPolicy</link> policy);
23
<link linkend="off-t">off_t</link> <link linkend="camel-seekable-stream-tell">camel_seekable_stream_tell</link> (<link linkend="CamelSeekableStream">CamelSeekableStream</link> *stream);
24
<link linkend="gint">gint</link> <link linkend="camel-seekable-stream-set-bounds">camel_seekable_stream_set_bounds</link> (<link linkend="CamelSeekableStream">CamelSeekableStream</link> *stream,
25
<link linkend="off-t">off_t</link> start,
26
<link linkend="off-t">off_t</link> end);
38
<refsect1 id="camel-CamelSeekableStream.description" role="desc">
39
<title role="desc.title">Description</title>
44
<refsect1 id="camel-CamelSeekableStream.details" role="details">
45
<title role="details.title">Details</title>
46
<refsect2 id="CamelSeekableStream" role="struct">
47
<title>struct CamelSeekableStream</title>
48
<indexterm zone="CamelSeekableStream"><primary sortas="CamelSeekableStream">CamelSeekableStream</primary></indexterm><programlisting>struct CamelSeekableStream {
49
CamelStream parent_object;
51
off_t position; /* current postion in the stream */
52
off_t bound_start; /* first valid position */
53
off_t bound_end; /* first invalid position */
58
<refsect2 id="CamelStreamSeekPolicy" role="enum">
59
<title>enum CamelStreamSeekPolicy</title>
60
<indexterm zone="CamelStreamSeekPolicy"><primary sortas="CamelStreamSeekPolicy">CamelStreamSeekPolicy</primary></indexterm><programlisting>typedef enum {
61
CAMEL_STREAM_SET = SEEK_SET,
62
CAMEL_STREAM_CUR = SEEK_CUR,
63
CAMEL_STREAM_END = SEEK_END
64
} CamelStreamSeekPolicy;
68
<refsect2 id="CAMEL-STREAM-UNBOUND--CAPS" role="macro">
69
<title>CAMEL_STREAM_UNBOUND</title>
70
<indexterm zone="CAMEL-STREAM-UNBOUND--CAPS"><primary sortas="CAMEL_STREAM_UNBOUND">CAMEL_STREAM_UNBOUND</primary></indexterm><programlisting>#define CAMEL_STREAM_UNBOUND (~0)
74
<refsect2 id="camel-seekable-stream-seek" role="function">
75
<title>camel_seekable_stream_seek ()</title>
76
<indexterm zone="camel-seekable-stream-seek"><primary sortas="camel_seekable_stream_seek">camel_seekable_stream_seek</primary></indexterm><programlisting><link linkend="off-t">off_t</link> camel_seekable_stream_seek (<link linkend="CamelSeekableStream">CamelSeekableStream</link> *stream,
77
<link linkend="off-t">off_t</link> offset,
78
<link linkend="CamelStreamSeekPolicy">CamelStreamSeekPolicy</link> policy);</programlisting>
80
Seek to the specified position in <parameter>stream</parameter>.
83
If <parameter>policy</parameter> is <link linkend="CAMEL-STREAM-SET--CAPS"><type>CAMEL_STREAM_SET</type></link>, seeks to <parameter>offset</parameter>.
86
If <parameter>policy</parameter> is <link linkend="CAMEL-STREAM-CUR--CAPS"><type>CAMEL_STREAM_CUR</type></link>, seeks to the current position plus
87
<parameter>offset</parameter>.
90
If <parameter>policy</parameter> is <link linkend="CAMEL-STREAM-END--CAPS"><type>CAMEL_STREAM_END</type></link>, seeks to the end of the stream plus
91
<parameter>offset</parameter>.
94
Regardless of <parameter>policy</parameter>, the stream's final position will be clamped
95
to the range specified by its lower and upper bounds, and the
96
stream's eos state will be updated.</para>
98
</para><variablelist role="params">
99
<varlistentry><term><parameter>stream</parameter> :</term>
100
<listitem><simpara> a <link linkend="CamelStream"><type>CamelStream</type></link> object
101
</simpara></listitem></varlistentry>
102
<varlistentry><term><parameter>offset</parameter> :</term>
103
<listitem><simpara> offset value
104
</simpara></listitem></varlistentry>
105
<varlistentry><term><parameter>policy</parameter> :</term>
106
<listitem><simpara> what to do with the offset
107
</simpara></listitem></varlistentry>
108
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> new position, <link linkend="1--CAPS"><literal>-1</literal></link> if operation failed.
109
</simpara></listitem></varlistentry>
110
</variablelist></refsect2>
111
<refsect2 id="camel-seekable-stream-tell" role="function">
112
<title>camel_seekable_stream_tell ()</title>
113
<indexterm zone="camel-seekable-stream-tell"><primary sortas="camel_seekable_stream_tell">camel_seekable_stream_tell</primary></indexterm><programlisting><link linkend="off-t">off_t</link> camel_seekable_stream_tell (<link linkend="CamelSeekableStream">CamelSeekableStream</link> *stream);</programlisting>
115
Get the current position of a seekable stream.</para>
117
</para><variablelist role="params">
118
<varlistentry><term><parameter>stream</parameter> :</term>
119
<listitem><simpara> a <link linkend="CamelSeekableStream"><type>CamelSeekableStream</type></link> object
120
</simpara></listitem></varlistentry>
121
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> the current position of the stream.
122
</simpara></listitem></varlistentry>
123
</variablelist></refsect2>
124
<refsect2 id="camel-seekable-stream-set-bounds" role="function">
125
<title>camel_seekable_stream_set_bounds ()</title>
126
<indexterm zone="camel-seekable-stream-set-bounds"><primary sortas="camel_seekable_stream_set_bounds">camel_seekable_stream_set_bounds</primary></indexterm><programlisting><link linkend="gint">gint</link> camel_seekable_stream_set_bounds (<link linkend="CamelSeekableStream">CamelSeekableStream</link> *stream,
127
<link linkend="off-t">off_t</link> start,
128
<link linkend="off-t">off_t</link> end);</programlisting>
130
Set the range of valid data this stream is allowed to cover. If
131
there is to be no <parameter>end</parameter> value, then <parameter>end</parameter> should be set to
132
<link linkend="CAMEL-STREAM-UNBOUND--CAPS"><type>CAMEL_STREAM_UNBOUND</type></link>.</para>
134
</para><variablelist role="params">
135
<varlistentry><term><parameter>stream</parameter> :</term>
136
<listitem><simpara> a <link linkend="CamelSeekableStream"><type>CamelSeekableStream</type></link> object
137
</simpara></listitem></varlistentry>
138
<varlistentry><term><parameter>start</parameter> :</term>
139
<listitem><simpara> the first valid position
140
</simpara></listitem></varlistentry>
141
<varlistentry><term><parameter>end</parameter> :</term>
142
<listitem><simpara> the first invalid position, or <link linkend="CAMEL-STREAM-UNBOUND--CAPS"><type>CAMEL_STREAM_UNBOUND</type></link>
143
</simpara></listitem></varlistentry>
144
<varlistentry><term><emphasis>Returns</emphasis> :</term><listitem><simpara> <link linkend="1--CAPS"><literal>-1</literal></link> on error.
145
</simpara></listitem></varlistentry>
146
</variablelist></refsect2>