Add peek buffer to io, hide file/buffer private functions
Implements peek buffer on top of the raw io read (with small storage optimization). Hides implementation details of the file/buffer.
This commit is contained in:
@@ -8,8 +8,6 @@ typedef struct bh_buffer_s bh_buffer_t;
|
||||
|
||||
bh_buffer_t *bh_buffer_new(void);
|
||||
|
||||
void bh_buffer_free(bh_buffer_t *buffer);
|
||||
|
||||
const char *bh_buffer_data(bh_buffer_t *buffer);
|
||||
|
||||
void bh_buffer_set_data(bh_buffer_t *buffer,
|
||||
@@ -21,34 +19,8 @@ size_t bh_buffer_capacity(bh_buffer_t *buffer);
|
||||
int bh_buffer_reserve(bh_buffer_t *buffer,
|
||||
size_t size);
|
||||
|
||||
int bh_buffer_open_base(bh_buffer_t *buffer,
|
||||
int mode);
|
||||
|
||||
void bh_buffer_close_base(bh_buffer_t *buffer);
|
||||
|
||||
int bh_buffer_is_open_base(bh_buffer_t *buffer);
|
||||
|
||||
size_t bh_buffer_read_base(bh_buffer_t *buffer,
|
||||
char *data,
|
||||
size_t size);
|
||||
|
||||
size_t bh_buffer_write_base(bh_buffer_t *buffer,
|
||||
const char *data,
|
||||
size_t size);
|
||||
|
||||
void bh_buffer_flush_base(bh_buffer_t *buffer);
|
||||
|
||||
int bh_buffer_seek_base(bh_buffer_t *buffer,
|
||||
bh_off_t pos,
|
||||
int dir);
|
||||
|
||||
bh_off_t bh_buffer_size_base(bh_buffer_t *buffer);
|
||||
|
||||
bh_off_t bh_buffer_tell_base(bh_buffer_t *buffer);
|
||||
|
||||
bh_off_t bh_buffer_available_base(bh_buffer_t *buffer);
|
||||
|
||||
void bh_buffer_clear_base(bh_buffer_t *buffer);
|
||||
#define bh_buffer_free(buffer) \
|
||||
bh_io_free((bh_io_t *)(buffer))
|
||||
|
||||
#define bh_buffer_open(buffer, mode) \
|
||||
bh_io_open((bh_io_t *)(buffer), (mode))
|
||||
|
||||
@@ -8,36 +8,8 @@ typedef struct bh_file_s bh_file_t;
|
||||
|
||||
bh_file_t *bh_file_new(const char *path);
|
||||
|
||||
void bh_file_free(bh_file_t *file);
|
||||
|
||||
int bh_file_open_base(bh_file_t *file,
|
||||
int mode);
|
||||
|
||||
void bh_file_close_base(bh_file_t *file);
|
||||
|
||||
int bh_file_is_open_base(bh_file_t *file);
|
||||
|
||||
size_t bh_file_read_base(bh_file_t *file,
|
||||
char *data,
|
||||
size_t size);
|
||||
|
||||
size_t bh_file_write_base(bh_file_t *file,
|
||||
const char *data,
|
||||
size_t size);
|
||||
|
||||
void bh_file_flush_base(bh_file_t *file);
|
||||
|
||||
int bh_file_seek_base(bh_file_t *file,
|
||||
bh_off_t pos,
|
||||
int dir);
|
||||
|
||||
bh_off_t bh_file_size_base(bh_file_t *file);
|
||||
|
||||
bh_off_t bh_file_tell_base(bh_file_t *file);
|
||||
|
||||
bh_off_t bh_file_available_base(bh_file_t *file);
|
||||
|
||||
void bh_file_clear_base(bh_file_t *file);
|
||||
#define bh_file_free(file) \
|
||||
bh_io_free((bh_io_t *)(file))
|
||||
|
||||
#define bh_file_open(file, mode) \
|
||||
bh_io_open((bh_io_t *)(file), (mode))
|
||||
@@ -51,6 +23,9 @@ void bh_file_clear_base(bh_file_t *file);
|
||||
#define bh_file_read(file, data, size) \
|
||||
bh_io_read((bh_io_t *)(file), (data), (size))
|
||||
|
||||
#define bh_file_peek(file, data, size) \
|
||||
bh_io_peek((bh_io_t *)(file), (data), (size))
|
||||
|
||||
#define bh_file_write(file, data, size) \
|
||||
bh_io_write((bh_io_t *)(file), (data), (size))
|
||||
|
||||
|
||||
@@ -16,6 +16,38 @@ struct bh_buffer_s
|
||||
|
||||
int bh_buffer_init(bh_buffer_t *buffer);
|
||||
|
||||
void bh_buffer_destroy(bh_buffer_t *buffer);
|
||||
#define bh_buffer_destroy(buffer) \
|
||||
bh_io_destroy((bh_io_t *)(buffer))
|
||||
|
||||
void bh_buffer_destroy_base(bh_buffer_t *buffer);
|
||||
|
||||
int bh_buffer_open_base(bh_buffer_t *buffer,
|
||||
int mode);
|
||||
|
||||
void bh_buffer_close_base(bh_buffer_t *buffer);
|
||||
|
||||
int bh_buffer_is_open_base(bh_buffer_t *buffer);
|
||||
|
||||
size_t bh_buffer_read_base(bh_buffer_t *buffer,
|
||||
char *data,
|
||||
size_t size);
|
||||
|
||||
size_t bh_buffer_write_base(bh_buffer_t *buffer,
|
||||
const char *data,
|
||||
size_t size);
|
||||
|
||||
void bh_buffer_flush_base(bh_buffer_t *buffer);
|
||||
|
||||
int bh_buffer_seek_base(bh_buffer_t *buffer,
|
||||
bh_off_t pos,
|
||||
int dir);
|
||||
|
||||
bh_off_t bh_buffer_size_base(bh_buffer_t *buffer);
|
||||
|
||||
bh_off_t bh_buffer_tell_base(bh_buffer_t *buffer);
|
||||
|
||||
bh_off_t bh_buffer_available_base(bh_buffer_t *buffer);
|
||||
|
||||
void bh_buffer_clear_base(bh_buffer_t *buffer);
|
||||
|
||||
#endif /* BH_INTERNAL_BUFFER_H */
|
||||
|
||||
@@ -16,6 +16,38 @@
|
||||
int bh_file_init(bh_file_t *file,
|
||||
const char *path);
|
||||
|
||||
void bh_file_destroy(bh_file_t *file);
|
||||
#define bh_file_destroy(file) \
|
||||
bh_io_destroy((bh_io_t *)(file))
|
||||
|
||||
void bh_file_destroy_base(bh_file_t *file);
|
||||
|
||||
int bh_file_open_base(bh_file_t *file,
|
||||
int mode);
|
||||
|
||||
void bh_file_close_base(bh_file_t *file);
|
||||
|
||||
int bh_file_is_open_base(bh_file_t *file);
|
||||
|
||||
size_t bh_file_read_base(bh_file_t *file,
|
||||
char *data,
|
||||
size_t size);
|
||||
|
||||
size_t bh_file_write_base(bh_file_t *file,
|
||||
const char *data,
|
||||
size_t size);
|
||||
|
||||
void bh_file_flush_base(bh_file_t *file);
|
||||
|
||||
int bh_file_seek_base(bh_file_t *file,
|
||||
bh_off_t pos,
|
||||
int dir);
|
||||
|
||||
bh_off_t bh_file_size_base(bh_file_t *file);
|
||||
|
||||
bh_off_t bh_file_tell_base(bh_file_t *file);
|
||||
|
||||
bh_off_t bh_file_available_base(bh_file_t *file);
|
||||
|
||||
void bh_file_clear_base(bh_file_t *file);
|
||||
|
||||
#endif /* BH_INTERNAL_FILE_H */
|
||||
|
||||
@@ -4,10 +4,4 @@
|
||||
#include "bh.h"
|
||||
#include <bh/io.h>
|
||||
|
||||
void bh_io_init(bh_io_t *io,
|
||||
const bh_io_table_t *table);
|
||||
|
||||
void bh_io_destroy(bh_io_t *io);
|
||||
|
||||
#endif /* BH_INTERNAL_IO_H */
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
#define BH_IO_ERROR 0x0001
|
||||
#define BH_IO_EOF 0x0002
|
||||
#define BH_IO_UNIFIED 0x0004
|
||||
|
||||
#define BH_IO_NONE 0x0000
|
||||
#define BH_IO_READ 0x0001
|
||||
@@ -63,13 +64,30 @@ typedef struct bh_io_s
|
||||
{
|
||||
const bh_io_table_t *table;
|
||||
int flags;
|
||||
struct
|
||||
{
|
||||
char *data;
|
||||
size_t head;
|
||||
size_t tail;
|
||||
size_t size;
|
||||
size_t capacity;
|
||||
} buffer;
|
||||
} bh_io_t;
|
||||
|
||||
bh_io_t *bh_io_new(bh_io_table_t *table,
|
||||
size_t size);
|
||||
void bh_io_destroy_base(bh_io_t *io);
|
||||
|
||||
bh_io_t *bh_io_new(const bh_io_table_t *table,
|
||||
size_t size,
|
||||
int unified);
|
||||
|
||||
void bh_io_free(bh_io_t *io);
|
||||
|
||||
void bh_io_init(bh_io_t *io,
|
||||
const bh_io_table_t *table,
|
||||
int unified);
|
||||
|
||||
void bh_io_destroy(bh_io_t *io);
|
||||
|
||||
int bh_io_open(bh_io_t *io,
|
||||
int mode);
|
||||
|
||||
@@ -81,6 +99,9 @@ size_t bh_io_read(bh_io_t *io,
|
||||
char *data,
|
||||
size_t size);
|
||||
|
||||
size_t bh_io_peek(bh_io_t *io,
|
||||
char *data,
|
||||
size_t size);
|
||||
|
||||
size_t bh_io_write(bh_io_t *io,
|
||||
const char* data,
|
||||
@@ -97,7 +118,6 @@ bh_off_t bh_io_size(bh_io_t *io);
|
||||
|
||||
bh_off_t bh_io_tell(bh_io_t *io);
|
||||
|
||||
|
||||
bh_off_t bh_io_available(bh_io_t *io);
|
||||
|
||||
int bh_io_error(bh_io_t *io);
|
||||
|
||||
Reference in New Issue
Block a user