]> git.mdlowis.com Git - projs/libcds.git/commitdiff
Convert circular buffer over to using opaque pointers
authorMichael D. Lowis <mike.lowis@gentex.com>
Wed, 30 Jul 2014 20:12:33 +0000 (16:12 -0400)
committerMichael D. Lowis <mike.lowis@gentex.com>
Wed, 30 Jul 2014 20:12:33 +0000 (16:12 -0400)
source/buffer/buf.c
source/buffer/buf.h
tests/test_buf.c

index 5a8bc79697b7b710c446f6d216fc56f9fa00638d..956d73491aad0fdf9cd3af87b0279484b2b925d3 100644 (file)
@@ -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);
index b9a53b61b5beeaeb2bfb05c39b8a78f86c135449..d3ba854043094572eea3e5ab7962ae2eaf2e4a70 100644 (file)
@@ -14,13 +14,11 @@ extern "C" {
 #include <string.h>
 #include <stdbool.h>
 
+/* 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.
  *
index 0dab2716c8d42a7a1edd44927ad1121cbe9170eb..7cdd22a20a019d04ca7495b59d681a9746fd7d49 100644 (file)
@@ -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);
     }