From cb9c6b049a77ae4d71d2d8314a084294b760ed91 Mon Sep 17 00:00:00 2001 From: cherierm Date: Tue, 19 Dec 2006 16:27:16 +0000 Subject: [PATCH] buffer concept implementation git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@3010 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- win32_test_app/src/TBuffer.c | 123 +++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 win32_test_app/src/TBuffer.c diff --git a/win32_test_app/src/TBuffer.c b/win32_test_app/src/TBuffer.c new file mode 100644 index 0000000000..d7a6ccef26 --- /dev/null +++ b/win32_test_app/src/TBuffer.c @@ -0,0 +1,123 @@ +#include + +/* struct s_Buffer connected functions. */ + +/* Constructs an new buffer. + * If successful, the function returns a pointer to + * the new buffer. Otherwise, the function returns + * NULL. + */ +Buffer_t Buffer_new(void) +{ + Buffer_t buffer = (Buffer_t)calloc(1,sizeof(s_Buffer_t)); + + if(NULL == buffer) + { + setErrno(E_BUFFER_ALLOCATION_FAILED); + return NULL; + } + + buffer->data = (char*)calloc(1,DEFAULT_Buffer_CAPACITY); + + + if(NULL == buffer->data) + { + Buffer_free(buffer); + setErrno(E_BUFFER_DATA_ALLOCATION_FAILED); + return NULL; + } + + buffer->capacity = DEFAULT_Buffer_CAPACITY; + Buffer_clear(buffer); + return buffer; +} + +/* Clears the buffer (this function don't destroy it, + * see Buffer_free function.). + */ +void Buffer_clear(Buffer_t buffer) +{ + /* must be a valid buffer. */ + ASSERT_VALID_Buffer(buffer); + + buffer->size = 0; + buffer->data[0]='\n'; + buffer->data[1]='\0'; +} + +/* Appends a string in the buffer. If successful, + * the function returns true. Otherwise the function + * returns false. + */ +bool Buffer_append(Buffer_t buffer,char* str) +{ + size_t len= strlen(str); + size_t capacity_needed = buffer->size + len + 1; + size_t capacity_available = buffer->capacity - buffer->size; + + /* must be a valid buffer. */ + ASSERT_VALID_Buffer(buffer); + /* must be a valid string. */ + ASSERT_NOT_NULL(str); + + if(capacity_available < capacity_needed) + { + buffer->data = (char*)realloc(buffer->data, capacity_needed); + + if(NULL == buffer->data) + { + setErrno(E_Buffer_DATA_REALLOCATION_FAILED); + return false; + } + + buffer->capacity = capacity_needed; + } + + strcpy(buffer->data + buffer->size,str); + buffer->size += len;/* + 1*/ ; + + return true; +} + +/* + * Removes all the linefeed from the buffer. + */ +void Buffer_chomp(Buffer_t buffer) +{ + /* must be a valid buffer. */ + ASSERT_VALID_Buffer(buffer); + + while ((buffer->data[buffer->size-1] == '\n') || (buffer->data[buffer->size-1] == '\r')) + { + buffer->data[buffer->size-1] = '\0'; + + if(buffer->size) + (buffer->size)--; + } +} + +/* + * Destroy the buffer. + */ +void Buffer_free(Buffer_t buffer) +{ + if(NULL == buffer) + return; + + if(NULL != buffer->data) + free(buffer->data); + + if(NULL != buffer) + free(buffer); +} + +/* + * This function returns true is the buffer is empty. + * Otherwrise the function returns false. + */ +bool Buffer_empty(Buffer_t buffer) +{ + /* must be a valid buffer. */ + ASSERT_VALID_Buffer(buffer); + return (buffer->size) == 0; +} -- 2.20.1