diff options
Diffstat (limited to 'include/bh/io.h')
| -rw-r--r-- | include/bh/io.h | 182 |
1 files changed, 182 insertions, 0 deletions
diff --git a/include/bh/io.h b/include/bh/io.h new file mode 100644 index 0000000..cdf442a --- /dev/null +++ b/include/bh/io.h @@ -0,0 +1,182 @@ +#ifndef BHLIB_IO_H +#define BHLIB_IO_H + +#include "bh.h" + +#define BH_IO_ERROR (1 << 0) +#define BH_IO_EOF (1 << 1) + +#define BH_IO_CAST(x) \ + ((bh_io_t *)(x)) + +struct bh_io_s; + +typedef struct bh_io_table_s +{ + size_t (*read)(struct bh_io_s *io, + char *data, + size_t size); + + size_t (*write)(struct bh_io_s *io, + const char *data, + size_t size); + + void (*flush)(struct bh_io_s *io); + + void (*seek)(struct bh_io_s *io, + bh_off_t offset, + int dir); + + bh_off_t (*tell)(struct bh_io_s *io); + + bh_off_t (*available)(struct bh_io_s *io); + + void (*clear)(struct bh_io_s *io); + + void (*destroy)(struct bh_io_s *io); +} bh_io_table_t; + +typedef struct bh_io_s +{ + bh_io_table_t *table; + int flags; +} bh_io_t; + +/** + * @brief Create new IO object. + * + * @param table Valid pointer to the IO table. + * @param size Size of the IO object. + * + * @return If the function succeeds, the return value is a pointer to the + * new, semi-initalized, IO object. + * @return If the function fails, the return value is NULL. + * + * @warning This function should be used in context of implementing child + * IO objects (files, sockets, streaming compression, etc). + * + * @sa bh_io_free + */ +bh_io_t *bh_io_new(bh_io_table_t *table, + size_t size); + +/** + * @brief Free IO object. + * + * @param io Valid pointer to the IO object. + */ +void bh_io_free(bh_io_t *io); + +/** + * @brief Read data from IO. + * + * @param io Valid pointer to the IO object. + * @param data Valid pointer to the buffer. + * @param size Size of the buffer. + * + * @return If the function succeeds, the return value is the amount + * of bytes read from the IO object. + * @return If the function fails, the return value is zero and error + * flag is set. + * + * @sa bh_io_write, bh_io_eof, bh_io_error + */ +size_t bh_io_read(bh_io_t *io, + char *data, + size_t size); + +/** + * @brief Write data to IO. + * + * @param io Valid pointer to the IO object. + * @param data Valid pointer to the buffer. + * @param size Size of the buffer. + * + * @return If the function succeeds, the return value is the amount + * of bytes written to the IO object. + * @return If the function fails, the return value is zero and error + * flag is set. + * + * @sa bh_io_read, bh_io_error, bh_io_flush + */ +size_t bh_io_write(bh_io_t *io, + const char* data, + size_t size); + +/** + * @brief Writes any uncommited changes (if possible). + * + * @param io Valid pointer to the IO object. + */ +void bh_io_flush(bh_io_t *io); + +/** + * @brief Seeks IO object to the specified position (if possible). + * + * @param io Valid pointer to the IO object. + * @param offset Position + * @param dir Direction + * + * @sa bh_io_tell + */ +void bh_io_seek(bh_io_t *io, + bh_off_t offset, + int dir); + +/** + * @brief Return current position in IO. + * + * @param io Valid pointer to the IO object. + * + * @return If the function succeeds, the return value is current + * position in the IO. + * @return If the function fails, the return value is -1. + * + * @sa bh_io_seek + */ +bh_off_t bh_io_tell(bh_io_t *io); + +/** + * @brief Return available bytes in the IO. + * + * @param io Valid pointer to the IO object. + * + * @return If the function succeeds, the return value is the amount + * of the available bytes for reading. + * @return If the function fails, the return value is zero. + */ +bh_off_t bh_io_available(bh_io_t *io); + +/** + * @brief Return error flag of the IO. + * + * @param io Valid pointer to the IO object. + * + * @return The return value is error flag. + * + * @sa bh_io_eof, bh_io_clear + */ +int bh_io_error(bh_io_t *io); + +/** + * @brief Return end-of-file flag of the IO. + * + * @param io Valid pointer to the IO object. + * + * @return The return value is end-of-file flag. + * + * @sa bh_io_error, bh_io_clear + */ +int bh_io_eof(bh_io_t *io); + +/** + * @brief Crear IO object state. + * + * @param io Valid pointer to the IO object. + * + * @sa bh_io_error, bh_io_eof + */ +void bh_io_clear(bh_io_t *io); + + +#endif /* BHLIB_IO_H */ |
