CamelSeekableStream

CamelSeekableStream

Synopsis

struct              CamelSeekableStream;
enum                CamelStreamSeekPolicy;
#define             CAMEL_STREAM_UNBOUND
off_t               camel_seekable_stream_seek          (CamelSeekableStream *stream,
                                                         off_t offset,
                                                         CamelStreamSeekPolicy policy);
off_t               camel_seekable_stream_tell          (CamelSeekableStream *stream);
int                 camel_seekable_stream_set_bounds    (CamelSeekableStream *stream,
                                                         off_t start,
                                                         off_t end);

Description

Details

struct CamelSeekableStream

struct CamelSeekableStream {
	CamelStream parent_object;

	off_t position;		/* current postion in the stream */
	off_t bound_start;	/* first valid position */
	off_t bound_end;	/* first invalid position */
};


enum CamelStreamSeekPolicy

typedef enum {
	CAMEL_STREAM_SET = SEEK_SET,
	CAMEL_STREAM_CUR = SEEK_CUR,
	CAMEL_STREAM_END = SEEK_END
} CamelStreamSeekPolicy;


CAMEL_STREAM_UNBOUND

#define CAMEL_STREAM_UNBOUND (~0)


camel_seekable_stream_seek ()

off_t               camel_seekable_stream_seek          (CamelSeekableStream *stream,
                                                         off_t offset,
                                                         CamelStreamSeekPolicy policy);

Seek to the specified position in stream.

If policy is CAMEL_STREAM_SET, seeks to offset.

If policy is CAMEL_STREAM_CUR, seeks to the current position plus offset.

If policy is CAMEL_STREAM_END, seeks to the end of the stream plus offset.

Regardless of policy, the stream's final position will be clamped to the range specified by its lower and upper bounds, and the stream's eos state will be updated.

stream :

a CamelStream object

offset :

offset value

policy :

what to do with the offset

Returns :

new position, -1 if operation failed.

camel_seekable_stream_tell ()

off_t               camel_seekable_stream_tell          (CamelSeekableStream *stream);

Get the current position of a seekable stream.

stream :

a CamelSeekableStream object

Returns :

the current position of the stream.

camel_seekable_stream_set_bounds ()

int                 camel_seekable_stream_set_bounds    (CamelSeekableStream *stream,
                                                         off_t start,
                                                         off_t end);

Set the range of valid data this stream is allowed to cover. If there is to be no end value, then end should be set to CAMEL_STREAM_UNBOUND.

stream :

a CamelSeekableStream object

start :

the first valid position

end :

the first invalid position, or CAMEL_STREAM_UNBOUND

Returns :

%-1 on error.