odyssey/third_party/machinarium/sources/zpq_stream.h

40 lines
1.1 KiB
C

/*
* machinarium.
*
* cooperative multitasking engine.
*/
#ifndef MM_ZPQ_STREAM_H
#define MM_ZPQ_STREAM_H
#include <stdlib.h>
#define MM_ZPQ_IO_ERROR (-1)
#define MM_ZPQ_DECOMPRESS_ERROR (-2)
#define MM_ZPQ_MAX_ALGORITHMS (8)
#define MM_ZPQ_NO_COMPRESSION 'n'
struct mm_zpq_stream;
typedef struct mm_zpq_stream mm_zpq_stream_t;
typedef ssize_t (*mm_zpq_tx_func)(void *arg, void const *data, size_t size);
typedef ssize_t (*mm_zpq_rx_func)(void *arg, void *data, size_t size);
mm_zpq_stream_t *zpq_create(int impl, mm_zpq_tx_func tx_func,
mm_zpq_rx_func rx_func, void *arg, char *rx_data,
size_t rx_data_size);
ssize_t mm_zpq_read(mm_zpq_stream_t *zs, void *buf, size_t size);
ssize_t mm_zpq_write(mm_zpq_stream_t *zs, void const *buf, size_t size,
size_t *processed);
char const *mm_zpq_error(mm_zpq_stream_t *zs);
size_t mm_zpq_buffered_tx(mm_zpq_stream_t *zs);
size_t mm_zpq_buffered_rx(mm_zpq_stream_t *zs);
_Bool mm_zpq_deferred_rx(mm_zpq_stream_t *zs);
void mm_zpq_free(mm_zpq_stream_t *zs);
void mm_zpq_get_supported_algorithms(char *algorithms);
int mm_zpq_get_algorithm_impl(char name);
#endif