#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)
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);
#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.
*/
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.
*
{
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);
}
//-------------------------------------------------------------------------
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);
}
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
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);
}
//-------------------------------------------------------------------------
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);
}