Refactoring and renaming
This commit is contained in:
1 parent
e17e1ba240
commit
137e35d998
11 files changed
+325
-317
No files matched your search
@@ -3,11 +3,11 @@ CFLAGS = -Wall -Wextra
|
||||
INCLUDE = ./
|
||||
SRC = ../../src
|
||||
|
||||
main.exe: containers.o main.o $(SRC)/macro_containers.h
|
||||
main.exe: containers.o main.o $(SRC)/macro_collections.h
|
||||
$(CC) $^ -o $@
|
||||
|
||||
%.o: %.c $(SRC)/macro_containers.h
|
||||
%.o: %.c $(SRC)/macro_collections.h
|
||||
$(CC) -I $(INCLUDE) -I $(SRC) $(CFLAGS) -c $< -o $@
|
||||
|
||||
run: main.exe $(SRC)/macro_containers.h
|
||||
run: main.exe $(SRC)/macro_collections.h
|
||||
./main.exe
|
||||
@@ -1,7 +1,7 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
#include "macro_containers.h"
|
||||
#include "macro_collections.h"
|
||||
|
||||
CONTAINER_GENERATE_HEADER(LIST, PUBLIC, il, int_list, , , int)
|
||||
CONTAINER_GENERATE_HEADER(STACK, PRIVATE, cs, char_stack, , , char)
|
||||
|
||||
+184
-184
@@ -5,261 +5,261 @@
|
||||
#include <inttypes.h>
|
||||
#include <math.h>
|
||||
#include <time.h>
|
||||
#include "macro_containers.h"
|
||||
#include "macro_collections.h"
|
||||
#include "containers.h"
|
||||
|
||||
double rrandom()
|
||||
{
|
||||
return (double)rand() / ((double)RAND_MAX + 1.0);
|
||||
return (double)rand() / ((double)RAND_MAX + 1.0);
|
||||
}
|
||||
|
||||
int8_t random_int8_t(int8_t min, int8_t max)
|
||||
{
|
||||
return (int8_t)floor(rrandom() * ((double)max - (double)min + 1.0) + (double)min);
|
||||
return (int8_t)floor(rrandom() * ((double)max - (double)min + 1.0) + (double)min);
|
||||
}
|
||||
|
||||
size_t random_size_t(size_t min, size_t max)
|
||||
{
|
||||
return (size_t)floor(rrandom() * ((double)max - (double)min + 1.0) + (double)min);
|
||||
return (size_t)floor(rrandom() * ((double)max - (double)min + 1.0) + (double)min);
|
||||
}
|
||||
|
||||
char random_alpha()
|
||||
{
|
||||
const char alpha[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
|
||||
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
|
||||
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
|
||||
'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D',
|
||||
'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
|
||||
'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
|
||||
'Y', 'Z'};
|
||||
return alpha[random_int8_t(0, 61)];
|
||||
const char alpha[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
|
||||
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j',
|
||||
'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
|
||||
'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D',
|
||||
'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
|
||||
'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
|
||||
'Y', 'Z'};
|
||||
return alpha[random_int8_t(0, 61)];
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
srand((unsigned)time(NULL));
|
||||
srand((unsigned)time(NULL));
|
||||
|
||||
int_list *list = il_new(10);
|
||||
int_list *list = il_new(10);
|
||||
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
il_push(list, i, list->count == 0 ? list->count : i % list->count);
|
||||
}
|
||||
for (int i = 0; i < 100; i++)
|
||||
{
|
||||
il_push(list, i, list->count == 0 ? list->count : i % list->count);
|
||||
}
|
||||
|
||||
printf("\n[ ");
|
||||
printf("\n[ ");
|
||||
|
||||
for (size_t i = 0; i < list->count - 1; i++)
|
||||
printf("%d, ", il_get(list, i));
|
||||
for (size_t i = 0; i < list->count - 1; i++)
|
||||
printf("%d, ", il_get(list, i));
|
||||
|
||||
printf("%d ]\n", il_get(list, list->count - 1));
|
||||
printf("%d ]\n", il_get(list, list->count - 1));
|
||||
|
||||
il_free(list);
|
||||
il_free(list);
|
||||
|
||||
list = il_new(10);
|
||||
list = il_new(10);
|
||||
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
// Add elements
|
||||
il_push_back(list, i);
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
// Add elements
|
||||
il_push_back(list, i);
|
||||
|
||||
// Print
|
||||
if (!il_empty(list))
|
||||
{
|
||||
// Print
|
||||
printf("\n[ ");
|
||||
for (size_t i = 0; i < list->count - 1; i++)
|
||||
{
|
||||
printf("%d, ", il_get(list, i));
|
||||
}
|
||||
printf("%d ]\n", il_get(list, list->count - 1));
|
||||
}
|
||||
}
|
||||
// Print
|
||||
if (!il_empty(list))
|
||||
{
|
||||
// Print
|
||||
printf("\n[ ");
|
||||
for (size_t i = 0; i < list->count - 1; i++)
|
||||
{
|
||||
printf("%d, ", il_get(list, i));
|
||||
}
|
||||
printf("%d ]\n", il_get(list, list->count - 1));
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
// Remove elements
|
||||
il_pop_back(list);
|
||||
for (int i = 0; i < 10; i++)
|
||||
{
|
||||
// Remove elements
|
||||
il_pop_back(list);
|
||||
|
||||
if (!il_empty(list))
|
||||
{
|
||||
// Print
|
||||
printf("\n[ ");
|
||||
for (size_t i = 0; i < list->count - 1; i++)
|
||||
{
|
||||
printf("%d, ", il_get(list, i));
|
||||
}
|
||||
printf("%d ]\n", il_get(list, list->count - 1));
|
||||
}
|
||||
}
|
||||
if (!il_empty(list))
|
||||
{
|
||||
// Print
|
||||
printf("\n[ ");
|
||||
for (size_t i = 0; i < list->count - 1; i++)
|
||||
{
|
||||
printf("%d, ", il_get(list, i));
|
||||
}
|
||||
printf("%d ]\n", il_get(list, list->count - 1));
|
||||
}
|
||||
}
|
||||
|
||||
il_free(list);
|
||||
il_free(list);
|
||||
|
||||
list = il_new(1000);
|
||||
list = il_new(1000);
|
||||
|
||||
for (int i = 0; i < 1000; i++)
|
||||
{
|
||||
il_insert_if(list, i, list->count, i % 2 == 0);
|
||||
}
|
||||
for (int i = 0; i < 1000; i++)
|
||||
{
|
||||
il_insert_if(list, i, list->count, i % 2 == 0);
|
||||
}
|
||||
|
||||
// Print all even numbers
|
||||
if (!il_empty(list))
|
||||
{
|
||||
// Print
|
||||
printf("\n[ ");
|
||||
for (size_t i = 0; i < list->count - 1; i++)
|
||||
{
|
||||
printf("%d, ", il_get(list, i));
|
||||
}
|
||||
printf("%d ]\n", il_get(list, list->count - 1));
|
||||
}
|
||||
// Print all even numbers
|
||||
if (!il_empty(list))
|
||||
{
|
||||
// Print
|
||||
printf("\n[ ");
|
||||
for (size_t i = 0; i < list->count - 1; i++)
|
||||
{
|
||||
printf("%d, ", il_get(list, i));
|
||||
}
|
||||
printf("%d ]\n", il_get(list, list->count - 1));
|
||||
}
|
||||
|
||||
il_free(list);
|
||||
il_free(list);
|
||||
|
||||
char_stack *stack = cs_new(100);
|
||||
char_stack *stack = cs_new(100);
|
||||
|
||||
for (int i = 0; i < 2000; i++)
|
||||
{
|
||||
cs_push(stack, random_alpha());
|
||||
}
|
||||
for (int i = 0; i < 2000; i++)
|
||||
{
|
||||
cs_push(stack, random_alpha());
|
||||
}
|
||||
|
||||
size_t s = cs_count(stack);
|
||||
size_t c = cs_capacity(stack);
|
||||
printf("Stack size : %" PRIu64 "\n", s);
|
||||
printf("Stack capacity : %" PRIu64 "\n", c);
|
||||
size_t s = cs_count(stack);
|
||||
size_t c = cs_capacity(stack);
|
||||
printf("Stack size : %" PRIu64 "\n", s);
|
||||
printf("Stack capacity : %" PRIu64 "\n", c);
|
||||
|
||||
for (size_t i = 0; i < s; i++)
|
||||
{
|
||||
printf("%c ", cs_top(stack));
|
||||
cs_pop(stack);
|
||||
}
|
||||
for (size_t i = 0; i < s; i++)
|
||||
{
|
||||
printf("%c ", cs_top(stack));
|
||||
cs_pop(stack);
|
||||
}
|
||||
|
||||
printf("\nStack size: %" PRIu64 "", cs_count(stack));
|
||||
printf("\nStack capacity : %" PRIu64 "\n", cs_capacity(stack));
|
||||
printf("\nStack size: %" PRIu64 "", cs_count(stack));
|
||||
printf("\nStack capacity : %" PRIu64 "\n", cs_capacity(stack));
|
||||
|
||||
cs_free(stack);
|
||||
cs_free(stack);
|
||||
|
||||
index_queue *idxs = queue_new(100);
|
||||
index_queue *idxs = queue_new(100);
|
||||
|
||||
size_t sum0 = 0, sum1 = 0, curr;
|
||||
size_t sum0 = 0, sum1 = 0, curr;
|
||||
|
||||
printf("\nQueue size : %" PRIu64 "\n", queue_count(idxs));
|
||||
printf("Queue capacity : %" PRIu64 "\n", queue_capacity(idxs));
|
||||
printf("\nQueue size : %" PRIu64 "\n", queue_count(idxs));
|
||||
printf("Queue capacity : %" PRIu64 "\n", queue_capacity(idxs));
|
||||
|
||||
for (int i = 1; i <= 600; i++)
|
||||
{
|
||||
curr = random_size_t(0, 100);
|
||||
if (queue_enqueue(idxs, curr))
|
||||
sum0 += curr;
|
||||
for (int i = 1; i <= 600; i++)
|
||||
{
|
||||
curr = random_size_t(0, 100);
|
||||
if (queue_enqueue(idxs, curr))
|
||||
sum0 += curr;
|
||||
|
||||
if (i % 11 == 0 && queue_count(idxs) > 0)
|
||||
{
|
||||
sum0 -= queue_peek(idxs);
|
||||
queue_dequeue(idxs);
|
||||
}
|
||||
}
|
||||
if (i % 11 == 0 && queue_count(idxs) > 0)
|
||||
{
|
||||
sum0 -= queue_peek(idxs);
|
||||
queue_dequeue(idxs);
|
||||
}
|
||||
}
|
||||
|
||||
printf("\nQueue size : %" PRIu64 "\n", queue_count(idxs));
|
||||
printf("Queue capacity : %" PRIu64 "\n", queue_capacity(idxs));
|
||||
printf("\nQueue size : %" PRIu64 "\n", queue_count(idxs));
|
||||
printf("Queue capacity : %" PRIu64 "\n", queue_capacity(idxs));
|
||||
|
||||
while (!queue_empty(idxs))
|
||||
{
|
||||
sum1 += queue_peek(idxs);
|
||||
while (!queue_empty(idxs))
|
||||
{
|
||||
sum1 += queue_peek(idxs);
|
||||
|
||||
queue_dequeue(idxs);
|
||||
}
|
||||
queue_dequeue(idxs);
|
||||
}
|
||||
|
||||
printf("\nQueue size : %" PRIu64 "\n", queue_count(idxs));
|
||||
printf("Queue capacity : %" PRIu64 "\n", queue_capacity(idxs));
|
||||
printf("\nQueue size : %" PRIu64 "\n", queue_count(idxs));
|
||||
printf("Queue capacity : %" PRIu64 "\n", queue_capacity(idxs));
|
||||
|
||||
if (sum0 == sum1)
|
||||
printf("\nElements were preserved -> %" PRIu64 " : %" PRIu64 "\n", sum0, sum1);
|
||||
if (sum0 == sum1)
|
||||
printf("\nElements were preserved -> %" PRIu64 " : %" PRIu64 "\n", sum0, sum1);
|
||||
|
||||
queue_free(idxs);
|
||||
queue_free(idxs);
|
||||
|
||||
printf("\nUsing ForEach\n\n");
|
||||
printf("\nUsing ForEach\n\n");
|
||||
|
||||
int_list *integers = il_new(1000);
|
||||
int_list *integers = il_new(1000);
|
||||
|
||||
for (size_t i = 0; i < il_capacity(integers); i++)
|
||||
il_push_back(integers, i);
|
||||
for (size_t i = 0; i < il_capacity(integers); i++)
|
||||
il_push_back(integers, i);
|
||||
|
||||
int sum = 0;
|
||||
FOR_EACH(il, int_list, , int, integers, {
|
||||
printf("%d, ", var);
|
||||
sum += var;
|
||||
})
|
||||
int sum = 0;
|
||||
FOR_EACH(il, int_list, , int, integers, {
|
||||
printf("%d, ", var);
|
||||
sum += var;
|
||||
})
|
||||
|
||||
printf("\n\nSUM: %d\n", sum);
|
||||
printf("\n\nSUM: %d\n", sum);
|
||||
|
||||
il_free(integers);
|
||||
il_free(integers);
|
||||
|
||||
deque *d = dq_new(1000);
|
||||
deque *d = dq_new(1000);
|
||||
|
||||
int sum2 = 0, numbers = 0, r = 0;
|
||||
int sum2 = 0, numbers = 0, r = 0;
|
||||
|
||||
for (int i = 0; numbers < 10000; i = rand())
|
||||
{
|
||||
if (i % 2 == 0 || dq_empty(d))
|
||||
{
|
||||
if (i % 4 == 0)
|
||||
{
|
||||
dq_push_front(d, ++numbers);
|
||||
}
|
||||
else
|
||||
{
|
||||
dq_push_back(d, ++numbers);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (i % 3 == 0)
|
||||
{
|
||||
r = dq_front(d);
|
||||
dq_pop_front(d);
|
||||
}
|
||||
else
|
||||
{
|
||||
r = dq_back(d);
|
||||
dq_pop_back(d);
|
||||
}
|
||||
for (int i = 0; numbers < 10000; i = rand())
|
||||
{
|
||||
if (i % 2 == 0 || dq_empty(d))
|
||||
{
|
||||
if (i % 4 == 0)
|
||||
{
|
||||
dq_push_front(d, ++numbers);
|
||||
}
|
||||
else
|
||||
{
|
||||
dq_push_back(d, ++numbers);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (i % 3 == 0)
|
||||
{
|
||||
r = dq_front(d);
|
||||
dq_pop_front(d);
|
||||
}
|
||||
else
|
||||
{
|
||||
r = dq_back(d);
|
||||
dq_pop_back(d);
|
||||
}
|
||||
|
||||
sum2 += r;
|
||||
}
|
||||
}
|
||||
sum2 += r;
|
||||
}
|
||||
}
|
||||
|
||||
// Emptying the queue
|
||||
while (!dq_empty(d))
|
||||
{
|
||||
if (rand() % 2 == 0)
|
||||
{
|
||||
r = dq_front(d);
|
||||
dq_pop_front(d);
|
||||
}
|
||||
else
|
||||
{
|
||||
r = dq_back(d);
|
||||
dq_pop_back(d);
|
||||
}
|
||||
// Emptying the queue
|
||||
while (!dq_empty(d))
|
||||
{
|
||||
if (rand() % 2 == 0)
|
||||
{
|
||||
r = dq_front(d);
|
||||
dq_pop_front(d);
|
||||
}
|
||||
else
|
||||
{
|
||||
r = dq_back(d);
|
||||
dq_pop_back(d);
|
||||
}
|
||||
|
||||
sum2 += r;
|
||||
}
|
||||
sum2 += r;
|
||||
}
|
||||
|
||||
printf("Theoretical Sum: 50005000\nTotal Sum: %d\n", sum2);
|
||||
printf("Theoretical Sum: 50005000\nTotal Sum: %d\n", sum2);
|
||||
|
||||
dq_free(d);
|
||||
dq_free(d);
|
||||
|
||||
d = dq_new(32);
|
||||
d = dq_new(32);
|
||||
|
||||
for (int i = 1; i < 1001; i++)
|
||||
i % 2 == 0 ? dq_push_front(d, i) : dq_push_back(d, i);
|
||||
for (int i = 1; i < 1001; i++)
|
||||
i % 2 == 0 ? dq_push_front(d, i) : dq_push_back(d, i);
|
||||
|
||||
int sum3 = 0;
|
||||
int sum3 = 0;
|
||||
|
||||
FOR_EACH(dq, deque, , int, d, {
|
||||
sum3 += var;
|
||||
})
|
||||
FOR_EACH(dq, deque, , int, d, {
|
||||
sum3 += var;
|
||||
})
|
||||
|
||||
printf("Deque sum: %d\n", sum3);
|
||||
printf("Deque sum: %d\n", sum3);
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
+63
-55
@@ -1,8 +1,9 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
#include "../../src/macro_containers.h"
|
||||
#include "../../src/macro_collections.h"
|
||||
|
||||
// Create containers to use only in this file
|
||||
CONTAINER_GENERATE(LIST, PUBLIC, l, list, static, , int)
|
||||
CONTAINER_GENERATE(STACK, PUBLIC, s, stack, static, , int)
|
||||
CONTAINER_GENERATE(QUEUE, PUBLIC, q, queue, static, , int)
|
||||
@@ -10,66 +11,73 @@ CONTAINER_GENERATE(DEQUE, PUBLIC, d, deque, static, , int)
|
||||
|
||||
int main(int argc, char const *argv[])
|
||||
{
|
||||
list *l = l_new(100);
|
||||
stack *s = s_new(100);
|
||||
queue *q = q_new(100);
|
||||
deque *d = d_new(100);
|
||||
// Initialize all of them with an internal capacity of 100
|
||||
list *l = l_new(100);
|
||||
stack *s = s_new(100);
|
||||
queue *q = q_new(100);
|
||||
deque *d = d_new(100);
|
||||
|
||||
for (int i = 0; i < 20; i++)
|
||||
{
|
||||
l_push_back(l, i);
|
||||
s_push(s, i);
|
||||
q_enqueue(q, i);
|
||||
d_push_back(d, i);
|
||||
}
|
||||
// Add 20 elements to each of them
|
||||
for (int i = 0; i < 20; i++)
|
||||
{
|
||||
l_push_back(l, i);
|
||||
s_push(s, i);
|
||||
q_enqueue(q, i);
|
||||
d_push_back(d, i);
|
||||
}
|
||||
|
||||
s_push(s, 21);
|
||||
q_enqueue(q, 21);
|
||||
q_enqueue(q, 22);
|
||||
d_push_back(d, 21);
|
||||
d_push_back(d, 22);
|
||||
d_push_back(d, 23);
|
||||
// Some extra elements
|
||||
s_push(s, 21);
|
||||
q_enqueue(q, 21);
|
||||
q_enqueue(q, 22);
|
||||
d_push_back(d, 21);
|
||||
d_push_back(d, 22);
|
||||
d_push_back(d, 23);
|
||||
|
||||
FOR_EACH(l, list, , int, l, {
|
||||
if (index == 0)
|
||||
printf("[ %d, ", var);
|
||||
else if (index == l_count(l) - 1)
|
||||
printf("%d ]\n", var);
|
||||
else
|
||||
printf("%d, ", var);
|
||||
})
|
||||
// All FOR_EACH macros contains three available variables:
|
||||
// - var : the elements that changes with each iteration
|
||||
// - index : iteration index (first iteration is 0 and last is count - 1)
|
||||
// - iter : iterator struct
|
||||
FOR_EACH(l, list, , int, l, {
|
||||
if (index == 0)
|
||||
printf("[ %d, ", var);
|
||||
else if (index == l_count(l) - 1)
|
||||
printf("%d ]\n", var);
|
||||
else
|
||||
printf("%d, ", var);
|
||||
})
|
||||
|
||||
FOR_EACH(s, stack, , int, s, {
|
||||
if (index == 0)
|
||||
printf("[ %d, ", var);
|
||||
else if (index == s_count(s) - 1)
|
||||
printf("%d ]\n", var);
|
||||
else
|
||||
printf("%d, ", var);
|
||||
})
|
||||
FOR_EACH(s, stack, , int, s, {
|
||||
if (index == 0)
|
||||
printf("[ %d, ", var);
|
||||
else if (index == s_count(s) - 1)
|
||||
printf("%d ]\n", var);
|
||||
else
|
||||
printf("%d, ", var);
|
||||
})
|
||||
|
||||
FOR_EACH(q, queue, , int, q, {
|
||||
if (index == 0)
|
||||
printf("[ %d, ", var);
|
||||
else if (index == q_count(q) - 1)
|
||||
printf("%d ]\n", var);
|
||||
else
|
||||
printf("%d, ", var);
|
||||
})
|
||||
FOR_EACH(q, queue, , int, q, {
|
||||
if (index == 0)
|
||||
printf("[ %d, ", var);
|
||||
else if (index == q_count(q) - 1)
|
||||
printf("%d ]\n", var);
|
||||
else
|
||||
printf("%d, ", var);
|
||||
})
|
||||
|
||||
FOR_EACH(d, deque, , int, d, {
|
||||
if (index == 0)
|
||||
printf("[ %d, ", var);
|
||||
else if (index == d_count(d) - 1)
|
||||
printf("%d ]\n", var);
|
||||
else
|
||||
printf("%d, ", var);
|
||||
})
|
||||
FOR_EACH(d, deque, , int, d, {
|
||||
if (index == 0)
|
||||
printf("[ %d, ", var);
|
||||
else if (index == d_count(d) - 1)
|
||||
printf("%d ]\n", var);
|
||||
else
|
||||
printf("%d, ", var);
|
||||
})
|
||||
|
||||
l_free(l);
|
||||
s_free(s);
|
||||
q_free(q);
|
||||
d_free(d);
|
||||
l_free(l);
|
||||
s_free(s);
|
||||
q_free(q);
|
||||
d_free(d);
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @file deque.h
|
||||
* deque.h
|
||||
*
|
||||
* Last Update: 22/03/2019
|
||||
*
|
||||
|
||||
+11
-11
@@ -8,15 +8,15 @@
|
||||
*
|
||||
*/
|
||||
|
||||
#define FOR_EACH(PFX, SNAME, K, T, TARGET, BODY) \
|
||||
do \
|
||||
{ \
|
||||
size_t index; \
|
||||
T var; \
|
||||
SNAME##_iter _iter_; \
|
||||
PFX##_iter(&_iter_, TARGET); \
|
||||
while (PFX##_iter_next(&_iter_, &var, &index)) \
|
||||
{ \
|
||||
BODY; \
|
||||
} \
|
||||
#define FOR_EACH(PFX, SNAME, K, T, TARGET, BODY) \
|
||||
do \
|
||||
{ \
|
||||
size_t index; \
|
||||
T var; \
|
||||
SNAME##_iter iter; \
|
||||
PFX##_iter(&iter, TARGET); \
|
||||
while (PFX##_iter_next(&iter, &var, &index)) \
|
||||
{ \
|
||||
BODY; \
|
||||
} \
|
||||
} while (0);
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @file list.h
|
||||
* list.h
|
||||
*
|
||||
* Last Update: 22/03/2019
|
||||
*
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
/**
|
||||
* @file macro_containers.h
|
||||
* macro_collections.h
|
||||
*
|
||||
* @author Leonardo Vencovsky (https://github.com/LeoVen)
|
||||
* @date 11/02/2019
|
||||
* Last Update: 22/03/2019
|
||||
*
|
||||
* Macro based generic containers.
|
||||
* Authors:
|
||||
* Leonardo Vencovsky (https://github.com/LeoVen)
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef MACRO_CONTAINERS
|
||||
#define MACRO_CONTAINERS
|
||||
#ifndef CMC_MACRO_COLLECTIONS
|
||||
#define CMC_MACRO_COLLECTIONS
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdbool.h>
|
||||
@@ -21,16 +21,16 @@
|
||||
#define CONCATC(C, P) CONCATC_(C, P)
|
||||
|
||||
#define CONTAINER_GENERATE(C, P, PFX, SNAME, FMOD, K, V) \
|
||||
CONTAINER_GENERATE_HEADER(C, P, PFX, SNAME, FMOD, K, V) \
|
||||
CONTAINER_GENERATE_SOURCE(C, P, PFX, SNAME, FMOD, K, V)
|
||||
CONTAINER_GENERATE_HEADER(C, P, PFX, SNAME, FMOD, K, V) \
|
||||
CONTAINER_GENERATE_SOURCE(C, P, PFX, SNAME, FMOD, K, V)
|
||||
|
||||
#define CONTAINER_GENERATE_HEADER(C, P, PFX, SNAME, FMOD, K, V) \
|
||||
CONCATH(C, P) \
|
||||
(PFX, SNAME, FMOD, K, V)
|
||||
CONCATH(C, P) \
|
||||
(PFX, SNAME, FMOD, K, V)
|
||||
|
||||
#define CONTAINER_GENERATE_SOURCE(C, P, PFX, SNAME, FMOD, K, V) \
|
||||
CONCATC(C, P) \
|
||||
(PFX, SNAME, FMOD, K, V)
|
||||
CONCATC(C, P) \
|
||||
(PFX, SNAME, FMOD, K, V)
|
||||
|
||||
#include "list.h"
|
||||
#include "stack.h"
|
||||
@@ -38,4 +38,4 @@
|
||||
#include "deque.h"
|
||||
#include "foreach.h"
|
||||
|
||||
#endif /* MACRO_CONTAINERS */
|
||||
#endif /* CMC_MACRO_COLLECTIONS */
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @file queue.h
|
||||
* queue.h
|
||||
*
|
||||
* Last Update: 22/03/2019
|
||||
*
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @file stack.h
|
||||
* stack.h
|
||||
*
|
||||
* Last Update: 22/03/2019
|
||||
*
|
||||
|
||||
+46
-46
@@ -1,6 +1,6 @@
|
||||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
#include "../src/macro_containers.h"
|
||||
#include "../src/macro_collections.h"
|
||||
|
||||
CONTAINER_GENERATE(LIST, PUBLIC, l, list, /**/, /**/, int)
|
||||
CONTAINER_GENERATE(STACK, PUBLIC, s, stack, /**/, /**/, int)
|
||||
@@ -9,59 +9,59 @@ CONTAINER_GENERATE(DEQUE, PUBLIC, d, deque, /**/, /**/, int)
|
||||
|
||||
int main(int argc, char const *argv[])
|
||||
{
|
||||
list *l = l_new(1000);
|
||||
stack *s = s_new(1000);
|
||||
queue *q = q_new(1000);
|
||||
deque *d = d_new(1000);
|
||||
list *l = l_new(1000);
|
||||
stack *s = s_new(1000);
|
||||
queue *q = q_new(1000);
|
||||
deque *d = d_new(1000);
|
||||
|
||||
for (int i = 1; i < 10001; i++)
|
||||
{
|
||||
if (i % 2 == 0)
|
||||
{
|
||||
d_push_front(d, i);
|
||||
l_push_front(l, i);
|
||||
}
|
||||
else
|
||||
{
|
||||
d_push_back(d, i);
|
||||
l_push_back(l, i);
|
||||
}
|
||||
for (int i = 1; i < 10001; i++)
|
||||
{
|
||||
if (i % 2 == 0)
|
||||
{
|
||||
d_push_front(d, i);
|
||||
l_push_front(l, i);
|
||||
}
|
||||
else
|
||||
{
|
||||
d_push_back(d, i);
|
||||
l_push_back(l, i);
|
||||
}
|
||||
|
||||
s_push(s, i);
|
||||
q_enqueue(q, i);
|
||||
}
|
||||
s_push(s, i);
|
||||
q_enqueue(q, i);
|
||||
}
|
||||
|
||||
int sum0 = 0, sum1 = 0, sum2 = 0, sum3 = 0;
|
||||
int sum0 = 0, sum1 = 0, sum2 = 0, sum3 = 0;
|
||||
|
||||
FOR_EACH(l, list, , int, l, {
|
||||
sum0 += var;
|
||||
})
|
||||
FOR_EACH(l, list, , int, l, {
|
||||
sum0 += var;
|
||||
})
|
||||
|
||||
FOR_EACH(s, stack, , int, s, {
|
||||
sum1 += var;
|
||||
})
|
||||
FOR_EACH(s, stack, , int, s, {
|
||||
sum1 += var;
|
||||
})
|
||||
|
||||
FOR_EACH(q, queue, , int, q, {
|
||||
sum2 += var;
|
||||
})
|
||||
FOR_EACH(q, queue, , int, q, {
|
||||
sum2 += var;
|
||||
})
|
||||
|
||||
FOR_EACH(d, deque, , int, d, {
|
||||
sum3 += var;
|
||||
})
|
||||
FOR_EACH(d, deque, , int, d, {
|
||||
sum3 += var;
|
||||
})
|
||||
|
||||
if (sum0 == 50005000)
|
||||
printf("%10s PASSED\n", "LIST");
|
||||
if (sum1 == 50005000)
|
||||
printf("%10s PASSED\n", "STACK");
|
||||
if (sum2 == 50005000)
|
||||
printf("%10s PASSED\n", "QUEUE");
|
||||
if (sum3 == 50005000)
|
||||
printf("%10s PASSED\n", "DEQUE");
|
||||
if (sum0 == 50005000)
|
||||
printf("%10s PASSED\n", "LIST");
|
||||
if (sum1 == 50005000)
|
||||
printf("%10s PASSED\n", "STACK");
|
||||
if (sum2 == 50005000)
|
||||
printf("%10s PASSED\n", "QUEUE");
|
||||
if (sum3 == 50005000)
|
||||
printf("%10s PASSED\n", "DEQUE");
|
||||
|
||||
l_free(l);
|
||||
s_free(s);
|
||||
q_free(q);
|
||||
d_free(d);
|
||||
l_free(l);
|
||||
s_free(s);
|
||||
q_free(q);
|
||||
d_free(d);
|
||||
|
||||
return 0;
|
||||
return 0;
|
||||
}
|
||||
Reference in new issue
Block a user