sachikong is my 2d queue_t
This commit is contained in:
parent
b1b96ba3e9
commit
db39759d42
8 changed files with 152 additions and 10 deletions
|
@ -16,7 +16,6 @@ void ui_refresh() {
|
||||||
clear();
|
clear();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ui_draw_borders();
|
ui_draw_borders();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
95
src/queue.c
Normal file
95
src/queue.c
Normal file
|
@ -0,0 +1,95 @@
|
||||||
|
#include "queue.h"
|
||||||
|
|
||||||
|
queue_t* queue_init() {
|
||||||
|
queue_t *queue = (queue_t*)malloc(sizeof(queue_t));
|
||||||
|
queue->front = NULL;
|
||||||
|
queue->back = NULL;
|
||||||
|
|
||||||
|
return queue;
|
||||||
|
}
|
||||||
|
|
||||||
|
static queue_node_t* queue_node_init() {
|
||||||
|
queue_node_t *node = (queue_node_t*)malloc(sizeof(queue_node_t));
|
||||||
|
node->next = NULL;
|
||||||
|
node->data = NULL;
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
|
void queue_push(queue_t *queue, void *data) {
|
||||||
|
queue_node_t *node = queue_node_init();
|
||||||
|
node->data = data;
|
||||||
|
|
||||||
|
if(queue->front == NULL)
|
||||||
|
queue->front = queue->back = node;
|
||||||
|
else
|
||||||
|
queue->back = queue->back->next = node;
|
||||||
|
}
|
||||||
|
|
||||||
|
void* queue_pop(queue_t *queue) {
|
||||||
|
if(queue_can_pop(queue) == FALSE)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
queue_node_t *this = queue->front;
|
||||||
|
void *data = this->data;
|
||||||
|
if(queue->front == queue->back)
|
||||||
|
queue->front = queue->back = NULL;
|
||||||
|
else
|
||||||
|
queue->front = queue->front->next;
|
||||||
|
free(this);
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL queue_can_pop(queue_t *queue) {
|
||||||
|
return queue->front != NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int queue_depth(queue_t *queue) {
|
||||||
|
queue_node_t *ptr = queue->front;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for(i = 0; ptr != NULL; ++i)
|
||||||
|
ptr = ptr->next;
|
||||||
|
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
void queue_free(queue_t *queue) {
|
||||||
|
queue_node_t *ptr = queue->front, *next;
|
||||||
|
while(ptr != NULL) {
|
||||||
|
next = ptr->next;
|
||||||
|
free(ptr);
|
||||||
|
ptr = next;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(queue);
|
||||||
|
}
|
||||||
|
|
||||||
|
void queue_nodes_free(queue_t *queue) {
|
||||||
|
queue_node_t *ptr = queue->front, *next;
|
||||||
|
while(ptr != NULL) {
|
||||||
|
next = ptr->next;
|
||||||
|
if(ptr->data != NULL)
|
||||||
|
free(ptr->data);
|
||||||
|
|
||||||
|
free(ptr);
|
||||||
|
ptr = next;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(queue);
|
||||||
|
}
|
||||||
|
|
||||||
|
void queue_nodes_func_free(queue_t *queue, queueffptr ffptr) {
|
||||||
|
queue_node_t *ptr = queue->front, *next;
|
||||||
|
while(ptr != NULL) {
|
||||||
|
next = ptr->next;
|
||||||
|
if(ptr->data != NULL)
|
||||||
|
(*ffptr)(ptr->data);
|
||||||
|
|
||||||
|
free(ptr);
|
||||||
|
ptr = next;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(queue);
|
||||||
|
}
|
32
src/queue.h
Normal file
32
src/queue.h
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
#ifndef QUEUE_H
|
||||||
|
#define QUEUE_H
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "common.h"
|
||||||
|
|
||||||
|
typedef void(*queueffptr)(void*);
|
||||||
|
|
||||||
|
typedef struct queue_node_t queue_node_t;
|
||||||
|
struct queue_node_t {
|
||||||
|
queue_node_t *next;
|
||||||
|
void *data;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct queue_t queue_t;
|
||||||
|
struct queue_t {
|
||||||
|
queue_node_t *front;
|
||||||
|
queue_node_t *back;
|
||||||
|
};
|
||||||
|
|
||||||
|
queue_t* queue_init();
|
||||||
|
|
||||||
|
void queue_push(queue_t*, void*);
|
||||||
|
void* queue_pop(queue_t*);
|
||||||
|
BOOL queue_can_pop(queue_t*);
|
||||||
|
int queue_depth(queue_t*);
|
||||||
|
|
||||||
|
void queue_free(queue_t*);
|
||||||
|
void queue_nodes_free(queue_t*);
|
||||||
|
void queue_nodes_func_free(queue_t*, queueffptr);
|
||||||
|
|
||||||
|
#endif
|
|
@ -2,24 +2,26 @@
|
||||||
|
|
||||||
struct {
|
struct {
|
||||||
BOOL running;
|
BOOL running;
|
||||||
pthread_t *thread;
|
pthread_t thread;
|
||||||
} ctx;
|
} ctx;
|
||||||
|
|
||||||
void server_context() {
|
void* server_context(void *params) {
|
||||||
while(ctx.running == TRUE) {
|
while(ctx.running == TRUE) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void server_context_start() {
|
void server_context_start() {
|
||||||
if(ctx.running == TRUE)
|
if(ctx.running == TRUE)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
pthread_create(ctx.thread, NULL, server_context, NULL);
|
pthread_create(&ctx.thread, NULL, &server_context, NULL);
|
||||||
ctx.running = TRUE;
|
ctx.running = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void server_context_stop() {
|
void server_context_stop() {
|
||||||
ctx.running = FALSE;
|
ctx.running = FALSE;
|
||||||
|
pthread_join(ctx.thread, NULL);
|
||||||
}
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
#include "server.h"
|
#include "server.h"
|
||||||
|
|
||||||
void server() {
|
void server() {
|
||||||
|
server_context_start();
|
||||||
socket_t *sock = sock_server_init("6770");
|
socket_t *sock = sock_server_init("6770");
|
||||||
sock_start(sock);
|
sock_start(sock);
|
||||||
|
|
||||||
|
@ -18,6 +19,7 @@ void server() {
|
||||||
sock_recv(conn, in, 10);
|
sock_recv(conn, in, 10);
|
||||||
printf("got %s\r\n", in);
|
printf("got %s\r\n", in);
|
||||||
|
|
||||||
|
server_context_stop();
|
||||||
sock_stop(sock);
|
sock_stop(sock);
|
||||||
sock_free(sock);
|
sock_free(sock);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "sock.h"
|
#include "sock.h"
|
||||||
|
#include "queue.h"
|
||||||
|
|
||||||
void server();
|
void server();
|
||||||
|
|
||||||
|
|
10
src/stack.c
10
src/stack.c
|
@ -31,6 +31,16 @@ BOOL stack_can_pop(stack_t *stack) {
|
||||||
return stack->next != NULL;
|
return stack->next != NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int stack_depth(stack_t *stack) {
|
||||||
|
stack_t *ptr = stack;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for(i = -1; ptr != NULL; ++i)
|
||||||
|
ptr = ptr->next;
|
||||||
|
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
|
||||||
void stack_free(stack_t *stack) {
|
void stack_free(stack_t *stack) {
|
||||||
stack_t *ptr = stack, *next;
|
stack_t *ptr = stack, *next;
|
||||||
while(ptr != NULL) {
|
while(ptr != NULL) {
|
||||||
|
|
|
@ -17,6 +17,7 @@ stack_t* stack_init();
|
||||||
void stack_push(stack_t*, void*);
|
void stack_push(stack_t*, void*);
|
||||||
void* stack_pop(stack_t*);
|
void* stack_pop(stack_t*);
|
||||||
BOOL stack_can_pop(stack_t*);
|
BOOL stack_can_pop(stack_t*);
|
||||||
|
int stack_depth(stack_t*);
|
||||||
|
|
||||||
void stack_free(stack_t*);
|
void stack_free(stack_t*);
|
||||||
void stack_nodes_free(stack_t*);
|
void stack_nodes_free(stack_t*);
|
||||||
|
|
Loading…
Reference in a new issue