aboutsummaryrefslogtreecommitdiff
path: root/include/bh/io.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/bh/io.h')
-rw-r--r--include/bh/io.h182
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 */