From: Michael D. Lowis Date: Wed, 30 Jul 2014 20:12:33 +0000 (-0400) Subject: Convert circular buffer over to using opaque pointers X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=475fc628f4885c342934fbaaeab653435a1379da;p=projs%2Flibcds.git Convert circular buffer over to using opaque pointers --- diff --git a/source/buffer/buf.c b/source/buffer/buf.c index 5a8bc79..956d734 100644 --- a/source/buffer/buf.c +++ b/source/buffer/buf.c @@ -8,6 +8,13 @@ #include "buf.h" #include "mem.h" +struct buf_t { + void** buffer; /**< Pointer to the buffer */ + size_t size; /**< Size of the allocated buffer */ + size_t reads; /**< Total number of reads that have occurred */ + size_t writes; /**< Total number of writes that have occrurred */ +}; + static void buf_free(void* p_buf); buf_t* buf_new(size_t size) @@ -26,9 +33,20 @@ buf_t* buf_new(size_t size) size_t buf_size(buf_t* buf) { - return (size_t)buf->size; + return buf->size; +} + +size_t buf_reads(buf_t* buf) +{ + return buf->reads; } +size_t buf_writes(buf_t* buf) +{ + return buf->writes; +} + + bool buf_empty(buf_t* buf) { return (buf->reads == buf->writes); diff --git a/source/buffer/buf.h b/source/buffer/buf.h index b9a53b6..d3ba854 100644 --- a/source/buffer/buf.h +++ b/source/buffer/buf.h @@ -14,13 +14,11 @@ extern "C" { #include #include +/* Forward declare our structure */ +struct buf_t; + /** A structure defining a circular buffer */ -typedef struct { - void** buffer; /**< Pointer to the buffer */ - size_t size /**< Size of the allocated buffer */; - size_t reads /**< Total number of reads that have occurred */; - size_t writes /**< Total number of writes that have occrurred */; -} buf_t; +typedef struct buf_t buf_t; /** * @brief Creates a new buffer. @@ -40,6 +38,24 @@ buf_t* buf_new(size_t size); */ size_t buf_size(buf_t* buf); +/** + * @brief The number of reads from the buffer. + * + * @param buf The buffer on which to operate. + * + * @return The number of reads. + */ +size_t buf_reads(buf_t* buf); + +/** + * @brief Return the number of writes to the buffer. + * + * @param buf The buffer on which to operate. + * + * @return The number of writes. + */ +size_t buf_writes(buf_t* buf); + /** * @brief Returns whether the buffer is empty. * diff --git a/tests/test_buf.c b/tests/test_buf.c index 0dab271..7cdd22a 100644 --- a/tests/test_buf.c +++ b/tests/test_buf.c @@ -18,10 +18,9 @@ TEST_SUITE(Buffer) { { buf_t* buf = buf_new(5); CHECK( NULL != buf ); - CHECK( NULL != buf->buffer ); - CHECK( 5 == buf->size ); - CHECK( 0 == buf->reads ); - CHECK( 0 == buf->writes ); + CHECK( 5 == buf_size(buf) ); + CHECK( 0 == buf_reads(buf) ); + CHECK( 0 == buf_writes(buf) ); mem_release(buf); } @@ -45,14 +44,17 @@ TEST_SUITE(Buffer) { //------------------------------------------------------------------------- TEST(Verify_buf_empty_returns_1_when_buffer_is_empty) { - buf_t buf = { NULL, 5, 1, 1 }; - CHECK( true == buf_empty( &buf ) ); + buf_t* buf = buf_new(5); + CHECK( true == buf_empty( buf ) ); + mem_release(buf); } TEST(Verify_buf_empty_returns_0_when_buffer_is_empty) { - buf_t buf = { NULL, 5, 1, 2 }; - CHECK( false == buf_empty( &buf ) ); + buf_t* buf = buf_new(5); + buf_write(buf, mem_box(0x1234)); + CHECK( false == buf_empty( buf ) ); + mem_release(buf); } //------------------------------------------------------------------------- @@ -60,20 +62,25 @@ TEST_SUITE(Buffer) { //------------------------------------------------------------------------- TEST(Verify_buf_full_returns_1_if_buffer_is_full) { - buf_t buf = { NULL, 5, 1, 6 }; - CHECK( true == buf_full( &buf ) ); + buf_t* buf = buf_new(1); + buf_write(buf, mem_box(0x1234)); + CHECK( true == buf_full( buf ) ); + mem_release(buf); } TEST(Verify_buf_full_returns_0_if_buffer_empty) { - buf_t buf = { NULL, 5, 1, 1 }; - CHECK( false == buf_full( &buf ) ); + buf_t* buf = buf_new(5); + CHECK( false == buf_full( buf ) ); + mem_release(buf); } TEST(Verify_buf_full_returns_0_if_buffer_not_full) { - buf_t buf = { NULL, 5, 1, 5 }; - CHECK( false == buf_full( &buf ) ); + buf_t* buf = buf_new(5); + buf_write(buf, mem_box(0x1234)); + CHECK( false == buf_full( buf ) ); + mem_release(buf); } //------------------------------------------------------------------------- @@ -86,8 +93,8 @@ TEST_SUITE(Buffer) { buf_write( buf, mem_box(0x1235) ); buf_write( buf, mem_box(0x1236) ); buf_clear( buf ); - CHECK( buf->reads == 0 ); - CHECK( buf->writes == 0 ); + CHECK( buf_reads(buf) == 0 ); + CHECK( buf_writes(buf) == 0 ); mem_release(buf); }