From 163b368a805c903b4eb17697db0ad7df3f032a3a Mon Sep 17 00:00:00 2001 From: snavy <1337snavy@gmail.com> Date: Sun, 26 Jan 2025 08:49:45 +0100 Subject: [PATCH] seek peek --- src/buffer.c | 7 +++++++ src/ion.h | 3 +++ src/vector.c | 22 ++++++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/src/buffer.c b/src/buffer.c index 4a77511..d18400b 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -46,6 +46,13 @@ t_ion_result_code ion_buffer_seek_write(t_ion_buffer *self, size_t curr) { return vector_seek_write(self->body, curr); } +t_ion_result_code ion_buffer_seek_peek(t_ion_buffer *self, size_t curr) { + if (self == NULL) + return RESULT_ERROR; + + return vector_seek_peek(self->body, curr); +} + t_ion_result_code ion_buffer_write(t_ion_buffer *self, void *src, size_t len) { if (self == NULL) return RESULT_ERROR; diff --git a/src/ion.h b/src/ion.h index 9457f73..30586bc 100644 --- a/src/ion.h +++ b/src/ion.h @@ -69,8 +69,10 @@ t_ion_vector *vector_new(size_t unit); t_ion_vector *vector_clone(t_ion_vector *self); t_ion_result_code vector_seek_read(t_ion_vector *self, size_t index); t_ion_result_code vector_seek_write(t_ion_vector *self, size_t index); +t_ion_result_code vector_seek_peek(t_ion_vector *self, size_t index); t_ion_result_code vector_seek_relative_read(t_ion_vector *self, int64_t diff); t_ion_result_code vector_seek_relative_write(t_ion_vector *self, int64_t diff); +t_ion_result_code vector_seek_relative_peek(t_ion_vector *self, int64_t diff); t_ion_result_code vector_extend(t_ion_vector *self); t_ion_result_code vector_write(t_ion_vector *self, void *src, size_t len); t_ion_result_code vector_read(t_ion_vector *self, void *dst, size_t len); @@ -87,6 +89,7 @@ void ion_buffer_free(t_ion_buffer *self); t_ion_buffer *ion_buffer_clone(t_ion_buffer *self); t_ion_result_code ion_buffer_seek_read(t_ion_buffer *self, size_t curr); t_ion_result_code ion_buffer_seek_write(t_ion_buffer *self, size_t curr); +t_ion_result_code ion_buffer_seek_peek(t_ion_buffer *self, size_t curr); t_ion_result_code ion_buffer_write(t_ion_buffer *self, void *src, size_t len); t_ion_result_code ion_buffer_read(t_ion_buffer *self, void *dst, size_t len); t_ion_result_code ion_buffer_peek(t_ion_buffer *self, void *dst, size_t len); diff --git a/src/vector.c b/src/vector.c index 221c004..c856946 100644 --- a/src/vector.c +++ b/src/vector.c @@ -65,6 +65,21 @@ t_ion_result_code vector_seek_write(t_ion_vector *self, size_t index) { return RESULT_OK; } +t_ion_result_code vector_seek_peek(t_ion_vector *self, size_t index) { + if (self == NULL) + return RESULT_ERROR; + + if (index < 0) + return RESULT_ERROR; + + if (index >= self->size) + return RESULT_ERROR; + + self->curr_p = index; + + return RESULT_OK; +} + t_ion_result_code vector_seek_relative_read(t_ion_vector *self, int64_t diff) { if (self == NULL) return RESULT_ERROR; @@ -79,6 +94,13 @@ t_ion_result_code vector_seek_relative_write(t_ion_vector *self, int64_t diff) { return vector_seek_write(self, (size_t)((int64_t)self->curr_r + diff)); } +t_ion_result_code vector_seek_relative_peek(t_ion_vector *self, int64_t diff) { + if (self == NULL) + return RESULT_ERROR; + + return vector_seek_peek(self, (size_t)((int64_t)self->curr_r + diff)); +} + t_ion_result_code vector_extend(t_ion_vector *self) { void *body; size_t size;