Change Deque init to return pointer
This commit is contained in:
parent
599ac8a23e
commit
62c1cad3da
3 changed files with 70 additions and 66 deletions
|
@ -3,25 +3,28 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
int UDPC_Deque_init(UDPC_Deque *deque, uint32_t alloc_size)
|
UDPC_Deque* UDPC_Deque_init(uint32_t alloc_size)
|
||||||
{
|
{
|
||||||
|
UDPC_Deque *deque = malloc(sizeof(UDPC_Deque));
|
||||||
UDPC_Deque_clear(deque);
|
UDPC_Deque_clear(deque);
|
||||||
deque->alloc_size = alloc_size;
|
deque->alloc_size = alloc_size;
|
||||||
deque->buf = malloc(alloc_size);
|
deque->buf = malloc(alloc_size);
|
||||||
if(deque->buf)
|
if(deque->buf)
|
||||||
{
|
{
|
||||||
return 1;
|
return deque;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return 0;
|
free(deque);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UDPC_Deque_destroy(UDPC_Deque *deque)
|
void UDPC_Deque_destroy(UDPC_Deque **deque)
|
||||||
{
|
{
|
||||||
free(deque->buf);
|
free((*deque)->buf);
|
||||||
deque->buf = NULL;
|
free(*deque);
|
||||||
|
*deque = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
int UDPC_Deque_realloc(UDPC_Deque *deque, uint32_t new_size)
|
int UDPC_Deque_realloc(UDPC_Deque *deque, uint32_t new_size)
|
||||||
|
|
|
@ -13,14 +13,14 @@ typedef struct
|
||||||
} UDPC_Deque;
|
} UDPC_Deque;
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \return non-zero on success
|
* \return non-null on success
|
||||||
*/
|
*/
|
||||||
int UDPC_Deque_init(UDPC_Deque *deque, uint32_t alloc_size);
|
UDPC_Deque* UDPC_Deque_init(uint32_t alloc_size);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Frees resources used by a UDPC_Deque
|
* Frees resources used by a UDPC_Deque
|
||||||
*/
|
*/
|
||||||
void UDPC_Deque_destroy(UDPC_Deque *deque);
|
void UDPC_Deque_destroy(UDPC_Deque **deque);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* Fails if new_size is smaller than current size of Deque.
|
* Fails if new_size is smaller than current size of Deque.
|
||||||
|
|
|
@ -14,123 +14,124 @@ int main()
|
||||||
{
|
{
|
||||||
arr[x] = x;
|
arr[x] = x;
|
||||||
}
|
}
|
||||||
UDPC_Deque deque;
|
UDPC_Deque *deque;
|
||||||
|
|
||||||
// init
|
// init
|
||||||
ASSERT_TRUE(UDPC_Deque_init(&deque, sizeof(int) * 32));
|
deque = UDPC_Deque_init(sizeof(int) * 32);
|
||||||
ASSERT_TRUE(deque.buf);
|
ASSERT_TRUE(deque);
|
||||||
ASSERT_EQ(deque.head, 0);
|
ASSERT_TRUE(deque->buf);
|
||||||
ASSERT_EQ(deque.tail, 0);
|
ASSERT_EQ(deque->head, 0);
|
||||||
ASSERT_EQ(deque.size, 0);
|
ASSERT_EQ(deque->tail, 0);
|
||||||
ASSERT_EQ(deque.alloc_size, sizeof(int) * 32);
|
ASSERT_EQ(deque->size, 0);
|
||||||
|
ASSERT_EQ(deque->alloc_size, sizeof(int) * 32);
|
||||||
|
|
||||||
// realloc smaller success
|
// realloc smaller success
|
||||||
ASSERT_TRUE(UDPC_Deque_realloc(&deque, sizeof(int) * 16));
|
ASSERT_TRUE(UDPC_Deque_realloc(deque, sizeof(int) * 16));
|
||||||
ASSERT_TRUE(deque.buf);
|
ASSERT_TRUE(deque->buf);
|
||||||
ASSERT_EQ(deque.head, 0);
|
ASSERT_EQ(deque->head, 0);
|
||||||
ASSERT_EQ(deque.tail, 0);
|
ASSERT_EQ(deque->tail, 0);
|
||||||
ASSERT_EQ(deque.size, 0);
|
ASSERT_EQ(deque->size, 0);
|
||||||
ASSERT_EQ(deque.alloc_size, sizeof(int) * 16);
|
ASSERT_EQ(deque->alloc_size, sizeof(int) * 16);
|
||||||
|
|
||||||
// push back success
|
// push back success
|
||||||
ASSERT_TRUE(UDPC_Deque_push_back(&deque, arr, sizeof(int) * 4));
|
ASSERT_TRUE(UDPC_Deque_push_back(deque, arr, sizeof(int) * 4));
|
||||||
ASSERT_EQ_MEM(arr, deque.buf, sizeof(int) * 4);
|
ASSERT_EQ_MEM(arr, deque->buf, sizeof(int) * 4);
|
||||||
ASSERT_EQ(deque.size, sizeof(int) * 4);
|
ASSERT_EQ(deque->size, sizeof(int) * 4);
|
||||||
|
|
||||||
// push front success
|
// push front success
|
||||||
ASSERT_TRUE(UDPC_Deque_push_front(&deque, &arr[4], sizeof(int) * 4));
|
ASSERT_TRUE(UDPC_Deque_push_front(deque, &arr[4], sizeof(int) * 4));
|
||||||
ASSERT_EQ_MEM(&arr[4], &deque.buf[sizeof(int) * 12], sizeof(int) * 4);
|
ASSERT_EQ_MEM(&arr[4], &deque->buf[sizeof(int) * 12], sizeof(int) * 4);
|
||||||
ASSERT_EQ(deque.size, sizeof(int) * 8);
|
ASSERT_EQ(deque->size, sizeof(int) * 8);
|
||||||
|
|
||||||
// realloc bigger success
|
// realloc bigger success
|
||||||
ASSERT_TRUE(UDPC_Deque_realloc(&deque, sizeof(int) * 32));
|
ASSERT_TRUE(UDPC_Deque_realloc(deque, sizeof(int) * 32));
|
||||||
ASSERT_EQ_MEM(&arr[4], deque.buf, sizeof(int) * 4);
|
ASSERT_EQ_MEM(&arr[4], deque->buf, sizeof(int) * 4);
|
||||||
ASSERT_EQ_MEM(arr, &deque.buf[sizeof(int) * 4], sizeof(int) * 4);
|
ASSERT_EQ_MEM(arr, &deque->buf[sizeof(int) * 4], sizeof(int) * 4);
|
||||||
ASSERT_EQ(deque.alloc_size, sizeof(int) * 32);
|
ASSERT_EQ(deque->alloc_size, sizeof(int) * 32);
|
||||||
|
|
||||||
// pop front success
|
// pop front success
|
||||||
UDPC_Deque_pop_front(&deque, sizeof(int) * 4);
|
UDPC_Deque_pop_front(deque, sizeof(int) * 4);
|
||||||
ASSERT_EQ(deque.size, sizeof(int) * 4);
|
ASSERT_EQ(deque->size, sizeof(int) * 4);
|
||||||
|
|
||||||
// get front success
|
// get front success
|
||||||
size = sizeof(int) * 4;
|
size = sizeof(int) * 4;
|
||||||
ASSERT_TRUE(UDPC_Deque_get_front(&deque, (void**)&temp, &size));
|
ASSERT_TRUE(UDPC_Deque_get_front(deque, (void**)&temp, &size));
|
||||||
ASSERT_EQ(size, sizeof(int) * 4);
|
ASSERT_EQ(size, sizeof(int) * 4);
|
||||||
ASSERT_EQ_MEM(arr, temp, size);
|
ASSERT_EQ_MEM(arr, temp, size);
|
||||||
free(temp);
|
free(temp);
|
||||||
|
|
||||||
// pop back success
|
// pop back success
|
||||||
UDPC_Deque_pop_back(&deque, sizeof(int) * 4);
|
UDPC_Deque_pop_back(deque, sizeof(int) * 4);
|
||||||
ASSERT_EQ(deque.size, 0);
|
ASSERT_EQ(deque->size, 0);
|
||||||
|
|
||||||
// push front success
|
// push front success
|
||||||
ASSERT_TRUE(UDPC_Deque_push_front(&deque, arr, sizeof(int) * 16));
|
ASSERT_TRUE(UDPC_Deque_push_front(deque, arr, sizeof(int) * 16));
|
||||||
ASSERT_EQ(deque.size, sizeof(int) * 16);
|
ASSERT_EQ(deque->size, sizeof(int) * 16);
|
||||||
|
|
||||||
// get front success
|
// get front success
|
||||||
size = sizeof(int) * 16;
|
size = sizeof(int) * 16;
|
||||||
ASSERT_TRUE(UDPC_Deque_get_front(&deque, (void**)&temp, &size));
|
ASSERT_TRUE(UDPC_Deque_get_front(deque, (void**)&temp, &size));
|
||||||
ASSERT_EQ(size, sizeof(int) * 16);
|
ASSERT_EQ(size, sizeof(int) * 16);
|
||||||
ASSERT_EQ_MEM(arr, temp, size);
|
ASSERT_EQ_MEM(arr, temp, size);
|
||||||
free(temp);
|
free(temp);
|
||||||
|
|
||||||
// get back success
|
// get back success
|
||||||
size = sizeof(int) * 16;
|
size = sizeof(int) * 16;
|
||||||
ASSERT_TRUE(UDPC_Deque_get_back(&deque, (void**)&temp, &size));
|
ASSERT_TRUE(UDPC_Deque_get_back(deque, (void**)&temp, &size));
|
||||||
ASSERT_EQ(size, sizeof(int) * 16);
|
ASSERT_EQ(size, sizeof(int) * 16);
|
||||||
ASSERT_EQ_MEM(arr, temp, size);
|
ASSERT_EQ_MEM(arr, temp, size);
|
||||||
free(temp);
|
free(temp);
|
||||||
|
|
||||||
// realloc smaller fail
|
// realloc smaller fail
|
||||||
ASSERT_FALSE(UDPC_Deque_realloc(&deque, sizeof(int) * 8));
|
ASSERT_FALSE(UDPC_Deque_realloc(deque, sizeof(int) * 8));
|
||||||
ASSERT_EQ(deque.size, sizeof(int) * 16);
|
ASSERT_EQ(deque->size, sizeof(int) * 16);
|
||||||
ASSERT_EQ(deque.alloc_size, sizeof(int) * 32);
|
ASSERT_EQ(deque->alloc_size, sizeof(int) * 32);
|
||||||
|
|
||||||
// realloc smaller success
|
// realloc smaller success
|
||||||
ASSERT_TRUE(UDPC_Deque_realloc(&deque, sizeof(int) * 16));
|
ASSERT_TRUE(UDPC_Deque_realloc(deque, sizeof(int) * 16));
|
||||||
ASSERT_EQ(deque.size, sizeof(int) * 16);
|
ASSERT_EQ(deque->size, sizeof(int) * 16);
|
||||||
ASSERT_EQ(deque.alloc_size, sizeof(int) * 16);
|
ASSERT_EQ(deque->alloc_size, sizeof(int) * 16);
|
||||||
ASSERT_EQ_MEM(deque.buf, arr, sizeof(int) * 16);
|
ASSERT_EQ_MEM(deque->buf, arr, sizeof(int) * 16);
|
||||||
|
|
||||||
// push back fail
|
// push back fail
|
||||||
ASSERT_FALSE(UDPC_Deque_push_back(&deque, arr, sizeof(int) * 16));
|
ASSERT_FALSE(UDPC_Deque_push_back(deque, arr, sizeof(int) * 16));
|
||||||
ASSERT_EQ(deque.size, sizeof(int) * 16);
|
ASSERT_EQ(deque->size, sizeof(int) * 16);
|
||||||
ASSERT_EQ(deque.alloc_size, sizeof(int) * 16);
|
ASSERT_EQ(deque->alloc_size, sizeof(int) * 16);
|
||||||
ASSERT_EQ_MEM(deque.buf, arr, sizeof(int) * 16);
|
ASSERT_EQ_MEM(deque->buf, arr, sizeof(int) * 16);
|
||||||
|
|
||||||
// push front fail
|
// push front fail
|
||||||
ASSERT_FALSE(UDPC_Deque_push_back(&deque, arr, sizeof(int) * 16));
|
ASSERT_FALSE(UDPC_Deque_push_back(deque, arr, sizeof(int) * 16));
|
||||||
ASSERT_EQ(deque.size, sizeof(int) * 16);
|
ASSERT_EQ(deque->size, sizeof(int) * 16);
|
||||||
ASSERT_EQ(deque.alloc_size, sizeof(int) * 16);
|
ASSERT_EQ(deque->alloc_size, sizeof(int) * 16);
|
||||||
ASSERT_EQ_MEM(deque.buf, arr, sizeof(int) * 16);
|
ASSERT_EQ_MEM(deque->buf, arr, sizeof(int) * 16);
|
||||||
|
|
||||||
// pop back
|
// pop back
|
||||||
UDPC_Deque_pop_back(&deque, sizeof(int) * 8);
|
UDPC_Deque_pop_back(deque, sizeof(int) * 8);
|
||||||
|
|
||||||
// get front success
|
// get front success
|
||||||
size = sizeof(int) * 8;
|
size = sizeof(int) * 8;
|
||||||
ASSERT_TRUE(UDPC_Deque_get_front(&deque, (void**)&temp, &size));
|
ASSERT_TRUE(UDPC_Deque_get_front(deque, (void**)&temp, &size));
|
||||||
ASSERT_EQ(size, sizeof(int) * 8);
|
ASSERT_EQ(size, sizeof(int) * 8);
|
||||||
ASSERT_EQ_MEM(temp, arr, sizeof(int) * 8);
|
ASSERT_EQ_MEM(temp, arr, sizeof(int) * 8);
|
||||||
free(temp);
|
free(temp);
|
||||||
|
|
||||||
// get front fail
|
// get front fail
|
||||||
size = sizeof(int) * 16;
|
size = sizeof(int) * 16;
|
||||||
ASSERT_FALSE(UDPC_Deque_get_front(&deque, (void**)&temp, &size));
|
ASSERT_FALSE(UDPC_Deque_get_front(deque, (void**)&temp, &size));
|
||||||
ASSERT_EQ(size, sizeof(int) * 8);
|
ASSERT_EQ(size, sizeof(int) * 8);
|
||||||
ASSERT_EQ_MEM(temp, arr, sizeof(int) * 8);
|
ASSERT_EQ_MEM(temp, arr, sizeof(int) * 8);
|
||||||
free(temp);
|
free(temp);
|
||||||
|
|
||||||
// get back success
|
// get back success
|
||||||
size = sizeof(int) * 8;
|
size = sizeof(int) * 8;
|
||||||
ASSERT_TRUE(UDPC_Deque_get_back(&deque, (void**)&temp, &size));
|
ASSERT_TRUE(UDPC_Deque_get_back(deque, (void**)&temp, &size));
|
||||||
ASSERT_EQ(size, sizeof(int) * 8);
|
ASSERT_EQ(size, sizeof(int) * 8);
|
||||||
ASSERT_EQ_MEM(temp, arr, sizeof(int) * 8);
|
ASSERT_EQ_MEM(temp, arr, sizeof(int) * 8);
|
||||||
free(temp);
|
free(temp);
|
||||||
|
|
||||||
// get back fail
|
// get back fail
|
||||||
size = sizeof(int) * 16;
|
size = sizeof(int) * 16;
|
||||||
ASSERT_FALSE(UDPC_Deque_get_back(&deque, (void**)&temp, &size));
|
ASSERT_FALSE(UDPC_Deque_get_back(deque, (void**)&temp, &size));
|
||||||
ASSERT_EQ(size, sizeof(int) * 8);
|
ASSERT_EQ(size, sizeof(int) * 8);
|
||||||
ASSERT_EQ_MEM(temp, arr, sizeof(int) * 8);
|
ASSERT_EQ_MEM(temp, arr, sizeof(int) * 8);
|
||||||
free(temp);
|
free(temp);
|
||||||
|
@ -138,7 +139,7 @@ int main()
|
||||||
// index success
|
// index success
|
||||||
for(int x = 0; x < 8; ++x)
|
for(int x = 0; x < 8; ++x)
|
||||||
{
|
{
|
||||||
ASSERT_TRUE(UDPC_Deque_index(&deque, sizeof(int), x, (void**)&temp));
|
ASSERT_TRUE(UDPC_Deque_index(deque, sizeof(int), x, (void**)&temp));
|
||||||
if(temp)
|
if(temp)
|
||||||
{
|
{
|
||||||
ASSERT_EQ_MEM(temp, &arr[x], sizeof(int));
|
ASSERT_EQ_MEM(temp, &arr[x], sizeof(int));
|
||||||
|
@ -147,13 +148,13 @@ int main()
|
||||||
}
|
}
|
||||||
|
|
||||||
// index fail
|
// index fail
|
||||||
ASSERT_FALSE(UDPC_Deque_index(&deque, sizeof(int), 8, (void**)&temp));
|
ASSERT_FALSE(UDPC_Deque_index(deque, sizeof(int), 8, (void**)&temp));
|
||||||
ASSERT_FALSE(temp);
|
ASSERT_FALSE(temp);
|
||||||
|
|
||||||
// index_rev success
|
// index_rev success
|
||||||
for(int x = 0; x < 8; ++x)
|
for(int x = 0; x < 8; ++x)
|
||||||
{
|
{
|
||||||
ASSERT_TRUE(UDPC_Deque_index_rev(&deque, sizeof(int), x, (void**)&temp));
|
ASSERT_TRUE(UDPC_Deque_index_rev(deque, sizeof(int), x, (void**)&temp));
|
||||||
if(temp)
|
if(temp)
|
||||||
{
|
{
|
||||||
ASSERT_EQ_MEM(temp, &arr[7 - x], sizeof(int));
|
ASSERT_EQ_MEM(temp, &arr[7 - x], sizeof(int));
|
||||||
|
@ -162,12 +163,12 @@ int main()
|
||||||
}
|
}
|
||||||
|
|
||||||
// index_rev fail
|
// index_rev fail
|
||||||
ASSERT_FALSE(UDPC_Deque_index_rev(&deque, sizeof(int), 8, (void**)&temp));
|
ASSERT_FALSE(UDPC_Deque_index_rev(deque, sizeof(int), 8, (void**)&temp));
|
||||||
ASSERT_FALSE(temp);
|
ASSERT_FALSE(temp);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
printf("asize %d, size %d, head %d, tail %d\n",
|
printf("asize %d, size %d, head %d, tail %d\n",
|
||||||
deque.alloc_size, deque.size, deque.head, deque.tail);
|
deque->alloc_size, deque->size, deque->head, deque->tail);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
UDPC_Deque_destroy(&deque);
|
UDPC_Deque_destroy(&deque);
|
||||||
|
|
Loading…
Reference in a new issue