gmio/src/stream.h

51 lines
1.6 KiB
C
Raw Normal View History

#ifndef FOUG_C_STREAM_H
#define FOUG_C_STREAM_H
2013-01-16 00:56:24 +08:00
#include "global.h"
#include "memory.h"
#include <stdio.h>
2014-01-21 17:51:23 +08:00
/*! \brief Stream that can get input from an arbitrary data source or can write output to an
* arbitrary data sink
*
* This is pretty much the same as
* <a href="http://www.gnu.org/software/libc/manual/html_mono/libc.html#Custom-Streams">
* custom streams</a> in the GNU C Library
*
* It uses a cookie being basically an opaque pointer on a hidden data type. The custom stream is
* implemented by defining hook functions that know how to read/write the data.
*
*/
2014-01-27 22:03:50 +08:00
typedef struct
{
void* cookie;
2014-01-21 17:51:23 +08:00
2014-01-27 22:03:50 +08:00
foug_bool_t (*at_end_func)(void*);
int (*error_func)(void*);
2014-01-27 22:03:50 +08:00
size_t (*read_func)(void*, void*, size_t, size_t);
size_t (*write_func)(void*, const void*, size_t, size_t);
} foug_stream_t;
2013-03-27 20:00:48 +08:00
/* Initialization */
FOUG_LIB_EXPORT void foug_stream_set_null(foug_stream_t* stream);
FOUG_LIB_EXPORT void foug_stream_set_stdio(foug_stream_t* stream, FILE* file);
/* Services */
2013-02-21 21:51:29 +08:00
FOUG_LIB_EXPORT foug_bool_t foug_stream_at_end(foug_stream_t* stream);
2013-02-21 21:51:29 +08:00
FOUG_LIB_EXPORT int foug_stream_error(foug_stream_t* stream);
2013-02-21 21:51:29 +08:00
FOUG_LIB_EXPORT size_t foug_stream_read(foug_stream_t* stream,
2013-02-21 21:51:29 +08:00
void* ptr,
size_t item_size,
size_t item_count);
FOUG_LIB_EXPORT size_t foug_stream_write(foug_stream_t* stream,
2013-02-21 21:51:29 +08:00
const void* ptr,
size_t item_size,
size_t item_count);
#endif /* FOUG_C_STREAM_H */