Thinking about eating some fuckin' turkey

This commit is contained in:
XANTRONIX Development 2017-11-23 18:57:33 +00:00
parent 699bbae3e4
commit 8f94512524
8 changed files with 143 additions and 9 deletions

View file

@ -7,7 +7,7 @@ INCLUDE_PATH = ../include
CFLAGS += -I$(INCLUDE_PATH)
LDFLAGS = -L../src -lskipstone
EXAMPLES = read music map test
EXAMPLES = read music map test queue
RM = /bin/rm

25
examples/queue.c Normal file
View file

@ -0,0 +1,25 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <skipstone/queue.h>
int main(int argc, char **argv) {
skipstone_queue *queue;
char *message;
if ((queue = skipstone_queue_new()) == NULL) {
perror("skipstone_queue_new()");
return 1;
}
skipstone_queue_push(queue, "poop");
skipstone_queue_pop(queue, &message);
printf("%s\n", message);
skipstone_queue_destroy(queue);
return 0;
}

25
examples/queue.c-e Normal file
View file

@ -0,0 +1,25 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <skipstone/queue.h>
int main(int argc, char **argv) {
skipstone_queue *queue;
char *message;
if ((queue = skipstone_queue_new()) == NULL) {
perror("skipstone_queue_new()");
return 1;
}
skipstone_queue_push(queue, "poop");
skipstone_queue_pop(queue, &message);
printf("%s\n", message);
skipstone_queue_destroy(queue);
return 0;
}

View file

@ -13,4 +13,6 @@ int skipstone_queue_push(skipstone_queue *queue, void *value);
int skipstone_queue_pop(skipstone_queue *queue, void **value);
void skipstone_queue_destroy(skipstone_queue *queue);
#endif /* _SKIPSTONE_QUEUE_H */

View file

@ -19,7 +19,30 @@ struct _skipstone_message_service {
};
skipstone_message_service *skipstone_message_service_new() {
return (skipstone_message_service *)skipstone_map_new();
skipstone_message_service *service;
if ((service = malloc(sizeof(*service))) == NULL) {
goto error_malloc_service;
}
if ((service->endpoints = skipstone_map_new()) == NULL) {
goto error_map_new_endpoints;
}
if ((service->pending = skipstone_queue_new()) == NULL) {
goto error_queue_new_pending;
}
return service;
error_queue_new_pending:
skipstone_map_destroy(service->endpoints);
error_map_new_endpoints:
free(service);
error_malloc_service:
return NULL;
}
int skipstone_message_service_register(skipstone_message_service *service,

View file

@ -19,7 +19,30 @@ struct _skipstone_message_service {
};
skipstone_message_service *skipstone_message_service_new() {
return (skipstone_message_service *)skipstone_map_new();
skipstone_message_service *service;
if ((service = malloc(sizeof(*service))) == NULL) {
goto error_malloc_service;
}
if ((service->endpoints = skipstone_map_new()) == NULL) {
goto error_map_new_endpoints;
}
if ((service->pending = skipstone_queue_new()) == NULL) {
goto error_queue_new_pending;
}
return service;
error_queue_new_pending:
skipstone_map_destroy(service->endpoints);
error_map_new_endpoints:
free(service);
error_malloc_service:
return NULL;
}
int skipstone_message_service_register(skipstone_message_service *service,

View file

@ -28,6 +28,18 @@ error_malloc_queue:
return NULL;
}
void skipstone_queue_destroy(skipstone_queue *queue) {
while (queue->last) {
struct entry *entry = queue->last;
queue->last = entry->prev;
free(entry);
}
free(queue);
}
size_t skipstone_queue_count(skipstone_queue *queue) {
return queue->count;
}
@ -41,10 +53,14 @@ int skipstone_queue_push(skipstone_queue *queue, void *value) {
next->value = value;
next->next = NULL;
next->prev = NULL;
next->prev = queue->last;
queue->last->next = next;
queue->last = next;
if (queue->last) {
next->prev = queue->last;
queue->last->next = next;
}
queue->last = next;
return 0;
@ -59,6 +75,8 @@ int skipstone_queue_pop(skipstone_queue *queue, void **value) {
return 0;
}
*value = last->value;
queue->last = last->prev;
free(last);

View file

@ -28,6 +28,18 @@ error_malloc_queue:
return NULL;
}
void skipstone_queue_destroy(skipstone_queue *queue) {
while (queue->last) {
struct entry *entry = queue->last;
queue->last = entry->prev;
free(entry);
}
free(queue);
}
size_t skipstone_queue_count(skipstone_queue *queue) {
return queue->count;
}
@ -41,10 +53,14 @@ int skipstone_queue_push(skipstone_queue *queue, void *value) {
next->value = value;
next->next = NULL;
next->prev = NULL;
next->prev = queue->last;
queue->last->next = next;
queue->last = next;
if (queue->last) {
next->prev = queue->last;
queue->last->next = next;
}
queue->last = next;
return 0;
@ -59,6 +75,8 @@ int skipstone_queue_pop(skipstone_queue *queue, void **value) {
return 0;
}
*value = last->value;
queue->last = last->prev;
free(last);