Thinking about eating some fuckin' turkey
This commit is contained in:
parent
699bbae3e4
commit
8f94512524
8 changed files with 143 additions and 9 deletions
|
@ -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
25
examples/queue.c
Normal 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
25
examples/queue.c-e
Normal 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;
|
||||
}
|
|
@ -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 */
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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,
|
||||
|
|
24
src/queue.c
24
src/queue.c
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Add table
Reference in a new issue