mirror of
https://github.com/yquake2/zaero.git
synced 2024-11-22 03:51:13 +00:00
This commit is contained in:
parent
3272fedbdb
commit
c8c834c79e
4 changed files with 0 additions and 286 deletions
|
@ -1,6 +0,0 @@
|
|||
#include "g_local.h"
|
||||
|
||||
void assertMsg(const char *msg, const char *file, int line)
|
||||
{
|
||||
gi.dprintf("DEBUG[%s:%i] %s\n", file, line, msg);
|
||||
}
|
|
@ -1,12 +0,0 @@
|
|||
#ifndef __Z_DEBUG_H
|
||||
#define __Z_DEBUG_H
|
||||
|
||||
#if defined(_DEBUG) && defined(_Z_TESTMODE)
|
||||
void assertMsg(const char *msg, const char *file, int line);
|
||||
|
||||
#define DEBUG(expr, msg) ((!(expr)) ? assertMsg(msg, __FILE__, __LINE__),1 : 0)
|
||||
#else
|
||||
#define DEBUG(expr, msg) 0
|
||||
#endif
|
||||
|
||||
#endif
|
216
src/z_list.c
216
src/z_list.c
|
@ -1,216 +0,0 @@
|
|||
#include "g_local.h"
|
||||
#include "z_list.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
typedef struct listNode_s
|
||||
{
|
||||
void *data;
|
||||
struct listNode_s *next;
|
||||
struct listNode_s *prev;
|
||||
} listNode_t;
|
||||
|
||||
void initializeList(list_t *list)
|
||||
{
|
||||
// initialize the list to be empty
|
||||
memset(list, 0, sizeof(list_t));
|
||||
list->head = NULL;
|
||||
list->tail = NULL;
|
||||
list->numNodes = 0;
|
||||
list->curNode = 0;
|
||||
list->currentNode = NULL;
|
||||
}
|
||||
|
||||
void emptyList(list_t *list)
|
||||
{
|
||||
while (list->head != NULL)
|
||||
{
|
||||
// get the node
|
||||
listNode_t *node = list->head;
|
||||
list->head = node->next;
|
||||
|
||||
// free it up
|
||||
Z_FREE(node);
|
||||
}
|
||||
initializeList(list);
|
||||
}
|
||||
|
||||
int listLength(list_t const *list)
|
||||
{
|
||||
return list->numNodes;
|
||||
}
|
||||
|
||||
void addHead(list_t *list, void *data)
|
||||
{
|
||||
// add a node to the head of the list
|
||||
listNode_t *node = (listNode_t*)Z_MALLOC(sizeof(listNode_t));
|
||||
|
||||
// fill it and put it in the front of the list
|
||||
node->data = data;
|
||||
node->next = list->head;
|
||||
node->prev = NULL;
|
||||
list->head = node;
|
||||
list->numNodes++;
|
||||
|
||||
if (list->numNodes == 1)
|
||||
list->tail = list->head;
|
||||
|
||||
// reset the currentNode
|
||||
list->currentNode = list->head;
|
||||
list->curNode = 0;
|
||||
}
|
||||
|
||||
void addTail(list_t *list, void *data)
|
||||
{
|
||||
// add a node to the head of the list
|
||||
listNode_t *node = (listNode_t*)Z_MALLOC(sizeof(listNode_t));
|
||||
|
||||
// fill it and put it in the front of the list
|
||||
node->data = data;
|
||||
node->next = NULL;
|
||||
node->prev = list->tail;
|
||||
if (list->tail != NULL)
|
||||
list->tail->next = node;
|
||||
list->tail = node;
|
||||
list->numNodes++;
|
||||
|
||||
if (list->numNodes == 1)
|
||||
list->head = list->tail;
|
||||
|
||||
// reset the currentNode
|
||||
list->currentNode = list->head;
|
||||
list->curNode = 0;
|
||||
}
|
||||
|
||||
void *getItem(list_t *list, int num)
|
||||
{
|
||||
listNode_t *node = NULL;
|
||||
int indexNum = 0;
|
||||
int diffH = 0;
|
||||
int diffT = 0;
|
||||
int diffC = 0;
|
||||
|
||||
// safety check
|
||||
if (num >= list->numNodes || num < 0)
|
||||
return NULL;
|
||||
|
||||
// which is closer, head, tail or currentNode?
|
||||
diffH = num;
|
||||
diffT = list->numNodes - num - 1;
|
||||
diffC = abs(list->curNode - num);
|
||||
|
||||
if (diffH < diffT &&
|
||||
diffH < diffC)
|
||||
{
|
||||
node = list->head;
|
||||
indexNum = 0;
|
||||
}
|
||||
else if (diffT < diffC)
|
||||
{
|
||||
node = list->tail;
|
||||
indexNum = list->numNodes - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
node = list->currentNode;
|
||||
indexNum = list->curNode;
|
||||
}
|
||||
|
||||
// go thru the list searching
|
||||
while (indexNum != num)
|
||||
{
|
||||
if (indexNum < num)
|
||||
{
|
||||
indexNum++;
|
||||
node = node->next;
|
||||
}
|
||||
else if (indexNum > num)
|
||||
{
|
||||
indexNum--;
|
||||
node = node->prev;
|
||||
}
|
||||
}
|
||||
|
||||
// update the current node
|
||||
list->currentNode = node;
|
||||
list->curNode = indexNum;
|
||||
|
||||
// return the current node
|
||||
return list->currentNode->data;
|
||||
}
|
||||
|
||||
void removeItem(list_t *list, int num)
|
||||
{
|
||||
// find the item
|
||||
listNode_t *node = NULL;
|
||||
void *item = getItem(list, num);
|
||||
|
||||
if (item == NULL)
|
||||
return;
|
||||
|
||||
// ok, currentNode points to the node
|
||||
// remove it
|
||||
node = list->currentNode;
|
||||
|
||||
// previous?
|
||||
if (node->prev == NULL) // front of the list
|
||||
list->head = node->next;
|
||||
else
|
||||
node->prev->next = node->next;
|
||||
|
||||
if (node->next == NULL) // tail of the list
|
||||
list->tail = node->prev;
|
||||
else
|
||||
node->next->prev = node->prev;
|
||||
|
||||
// delete the node
|
||||
Z_FREE(node);
|
||||
list->numNodes--;
|
||||
|
||||
// reset the current node
|
||||
list->currentNode = list->head;
|
||||
list->curNode = 0;
|
||||
}
|
||||
|
||||
void copyList(list_t *src, list_t *dest)
|
||||
{
|
||||
// get and put the data
|
||||
int i = 0;
|
||||
|
||||
// empty the destination
|
||||
emptyList(dest);
|
||||
for (i = 0; i < src->numNodes; i++)
|
||||
{
|
||||
void *item = getItem(src, i);
|
||||
addTail(dest, item);
|
||||
}
|
||||
}
|
||||
|
||||
void stealList(list_t *src, list_t *dest)
|
||||
{
|
||||
// copy over the pointer info
|
||||
dest->head = src->head;
|
||||
dest->tail = src->tail;
|
||||
dest->numNodes = src->numNodes;
|
||||
dest->curNode = src->curNode;
|
||||
dest->currentNode = src->currentNode;
|
||||
|
||||
// init src
|
||||
initializeList(src);
|
||||
}
|
||||
|
||||
int findIndex(list_t *list, void *data)
|
||||
{
|
||||
listNode_t *node = list->head;
|
||||
int i = 0;
|
||||
while (node != NULL)
|
||||
{
|
||||
if (node->data == data)
|
||||
return i;
|
||||
|
||||
i++;
|
||||
node = node->next;
|
||||
}
|
||||
|
||||
// failure
|
||||
return -1;
|
||||
}
|
52
src/z_list.h
52
src/z_list.h
|
@ -1,52 +0,0 @@
|
|||
#ifndef __Z_LIST_H
|
||||
#define __Z_LIST_H
|
||||
|
||||
/*
|
||||
Linked List structure
|
||||
|
||||
All items contained in this list but be pointers. The list does not claim
|
||||
"ownership" of the data, so it is not the responsibility of the list to
|
||||
free the memory allocated by the data. It will, however, free the memory taken
|
||||
by the nodes
|
||||
*/
|
||||
|
||||
// dummy for internals
|
||||
struct listNode_s;
|
||||
|
||||
typedef struct list_s
|
||||
{
|
||||
// start of the list
|
||||
struct listNode_s *head;
|
||||
struct listNode_s *tail;
|
||||
|
||||
// # of nodes in the list
|
||||
int numNodes;
|
||||
|
||||
// current node
|
||||
int curNode;
|
||||
struct listNode_s *currentNode;
|
||||
} list_t;
|
||||
|
||||
// init/cleanup
|
||||
void initializeList(list_t *list);
|
||||
void emptyList(list_t *list);
|
||||
|
||||
// get information about the list
|
||||
int listLength(list_t const *list);
|
||||
|
||||
// add items to the list
|
||||
void addHead(list_t *list, void *data);
|
||||
void addTail(list_t *list, void *data);
|
||||
|
||||
// remove items from the list
|
||||
void removeItem(list_t *list, int num);
|
||||
|
||||
// get items from the list (0 based)
|
||||
void *getItem(list_t *list, int num);
|
||||
int findIndex(list_t *list, void *data);
|
||||
|
||||
// data transfer
|
||||
void copyList(list_t *src, list_t *dest);
|
||||
void stealList(list_t *src, list_t *dest);
|
||||
|
||||
#endif
|
Loading…
Reference in a new issue