gotta work dat queue the other way

This commit is contained in:
XANTRONIX Development 2017-11-24 12:18:02 -06:00
parent a6e50b93e1
commit c11fe005b3
7 changed files with 36 additions and 26 deletions

View file

@ -15,7 +15,7 @@ int main(int argc, char **argv) {
}
skipstone_queue_push(queue, "poop");
skipstone_queue_pop(queue, &message);
skipstone_queue_pop(queue, (void **)&message);
printf("%s\n", message);

View file

@ -15,7 +15,7 @@ int main(int argc, char **argv) {
}
skipstone_queue_push(queue, "poop");
skipstone_queue_pop(queue, &message);
skipstone_queue_pop(queue, (void **)&message);
printf("%s\n", message);

View file

@ -9,9 +9,9 @@ skipstone_queue *skipstone_queue_new();
size_t skipstone_queue_count(skipstone_queue *queue);
int skipstone_queue_push(skipstone_queue *queue, void *value);
int skipstone_queue_add(skipstone_queue *queue, void *value);
int skipstone_queue_pop(skipstone_queue *queue, void **value);
int skipstone_queue_remove(skipstone_queue *queue, void **value);
void skipstone_queue_destroy(skipstone_queue *queue);

View file

@ -79,13 +79,13 @@ int skipstone_message_service_queue(skipstone_message_service *service,
memcpy(message + 1, buf, size);
if (skipstone_queue_push(service->pending, message) < 0) {
goto error_queue_push_pending;
if (skipstone_queue_add(service->pending, message) < 0) {
goto error_queue_add_pending;
}
return 0;
error_queue_push_pending:
error_queue_add_pending:
free(message);
error_malloc_message:
@ -117,7 +117,7 @@ int skipstone_message_service_run(skipstone_message_service *service,
}
}
while (skipstone_queue_pop(service->pending, (void **)&message)) {
while (skipstone_queue_remove(service->pending, (void **)&message)) {
printf("Sending message %hu\n", message->id);
if (skipstone_link_send(link, message + 1, message->size, message->id) < 0) {
goto error_io;

View file

@ -79,13 +79,13 @@ int skipstone_message_service_queue(skipstone_message_service *service,
memcpy(message + 1, buf, size);
if (skipstone_queue_push(service->pending, message) < 0) {
goto error_queue_push_pending;
if (skipstone_queue_add(service->pending, message) < 0) {
goto error_queue_add_pending;
}
return 0;
error_queue_push_pending:
error_queue_add_pending:
free(message);
error_malloc_message:
@ -117,7 +117,7 @@ int skipstone_message_service_run(skipstone_message_service *service,
}
}
while (skipstone_queue_pop(service->pending, (void **)&message)) {
while (skipstone_queue_remove(service->pending, (void **)&message)) {
printf("Sending message %hu\n", message->id);
if (skipstone_link_send(link, message + 1, message->size, message->id) < 0) {
goto error_io;

View file

@ -9,7 +9,7 @@ struct entry {
struct _skipstone_queue {
size_t count;
struct entry *last;
struct entry *first, *last;
};
skipstone_queue *skipstone_queue_new() {
@ -20,6 +20,7 @@ skipstone_queue *skipstone_queue_new() {
}
queue->count = 0;
queue->first = NULL;
queue->last = NULL;
return queue;
@ -44,7 +45,7 @@ size_t skipstone_queue_count(skipstone_queue *queue) {
return queue->count;
}
int skipstone_queue_push(skipstone_queue *queue, void *value) {
int skipstone_queue_add(skipstone_queue *queue, void *value) {
struct entry *next;
if ((next = malloc(sizeof(*next))) == NULL) {
@ -55,6 +56,10 @@ int skipstone_queue_push(skipstone_queue *queue, void *value) {
next->next = NULL;
next->prev = queue->last;
if (queue->first == NULL) {
queue->first = next;
}
if (queue->last) {
next->prev = queue->last;
queue->last->next = next;
@ -69,18 +74,18 @@ error_malloc_next:
return -1;
}
int skipstone_queue_pop(skipstone_queue *queue, void **value) {
struct entry *last = queue->last;
int skipstone_queue_remove(skipstone_queue *queue, void **value) {
struct entry *first = queue->first;
if (queue->count == 0) {
return 0;
}
*value = last->value;
queue->last = last->prev;
*value = first->value;
queue->first = first->next;
queue->count--;
free(last);
free(first);
return 1;
}

View file

@ -9,7 +9,7 @@ struct entry {
struct _skipstone_queue {
size_t count;
struct entry *last;
struct entry *first, *last;
};
skipstone_queue *skipstone_queue_new() {
@ -20,6 +20,7 @@ skipstone_queue *skipstone_queue_new() {
}
queue->count = 0;
queue->first = NULL;
queue->last = NULL;
return queue;
@ -44,7 +45,7 @@ size_t skipstone_queue_count(skipstone_queue *queue) {
return queue->count;
}
int skipstone_queue_push(skipstone_queue *queue, void *value) {
int skipstone_queue_add(skipstone_queue *queue, void *value) {
struct entry *next;
if ((next = malloc(sizeof(*next))) == NULL) {
@ -55,6 +56,10 @@ int skipstone_queue_push(skipstone_queue *queue, void *value) {
next->next = NULL;
next->prev = queue->last;
if (queue->first == NULL) {
queue->first = next;
}
if (queue->last) {
next->prev = queue->last;
queue->last->next = next;
@ -69,18 +74,18 @@ error_malloc_next:
return -1;
}
int skipstone_queue_pop(skipstone_queue *queue, void **value) {
struct entry *last = queue->last;
int skipstone_queue_remove(skipstone_queue *queue, void **value) {
struct entry *first = queue->first;
if (queue->count == 0) {
return 0;
}
*value = last->value;
queue->last = last->prev;
*value = first->value;
queue->first = first->next;
queue->count--;
free(last);
free(first);
return 1;
}