add ClientArray struct and functions, add _free() functions
This commit is contained in:
parent
434e83d570
commit
c66eb85cc6
86
util.c
86
util.c
@ -79,3 +79,89 @@ bool wm_nodearray_remove(NodeArray *arr, size_t index)
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void wm_nodearray_free(NodeArray *arr)
|
||||
{
|
||||
assert(arr);
|
||||
|
||||
arr->capacity = 0;
|
||||
arr->size = 0;
|
||||
free(arr->nodes);
|
||||
}
|
||||
|
||||
void wm_clientarray_init(ClientArray *arr)
|
||||
{
|
||||
assert(arr);
|
||||
|
||||
arr->capacity = 10;
|
||||
arr->clients = calloc(arr->capacity, sizeof(TreeNode));
|
||||
arr->size = 0;
|
||||
}
|
||||
|
||||
void wm_clientarray_push(ClientArray *arr, Client node)
|
||||
{
|
||||
assert(arr);
|
||||
|
||||
arr->size++;
|
||||
|
||||
if (arr->size >= arr->capacity) {
|
||||
Client* temp = calloc(arr->capacity, sizeof(Client));
|
||||
memcpy(temp, arr->clients, arr->capacity * sizeof(Client));
|
||||
free(arr->clients);
|
||||
size_t old_capacity = arr->capacity;
|
||||
arr->capacity = old_capacity * 2;
|
||||
|
||||
arr->clients = calloc(arr->capacity, sizeof(Client));
|
||||
memcpy(arr->clients, temp, old_capacity);
|
||||
|
||||
free(temp);
|
||||
arr->clients[arr->size - 1] = node;
|
||||
return;
|
||||
}
|
||||
|
||||
arr->clients[arr->size - 1] = node;
|
||||
}
|
||||
|
||||
bool wm_clientarray_pop(ClientArray *arr, Client *ret)
|
||||
{
|
||||
assert(arr);
|
||||
|
||||
if (!ret || !arr)
|
||||
return false;
|
||||
|
||||
if (arr->size == 0)
|
||||
return false;
|
||||
|
||||
*ret = arr->clients[arr->size - 1];
|
||||
arr->size--;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool wm_clientarray_remove(ClientArray *arr, size_t index)
|
||||
{
|
||||
assert(arr);
|
||||
|
||||
if (!arr)
|
||||
return false;
|
||||
|
||||
if (index >= arr->size)
|
||||
return false;
|
||||
|
||||
if (index == arr->size - 1) {
|
||||
arr->size--;
|
||||
return true;
|
||||
}
|
||||
|
||||
memmove(arr->clients + index, arr->clients + index+1, arr->size-1 * sizeof(Client));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void wm_clientarray_free(ClientArray *arr)
|
||||
{
|
||||
assert(arr);
|
||||
|
||||
arr->capacity = 0;
|
||||
arr->size = 0;
|
||||
free(arr->clients);
|
||||
}
|
||||
|
21
util.h
21
util.h
@ -5,6 +5,8 @@
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "client.h"
|
||||
|
||||
#define WM_VERT_LEFT 0
|
||||
#define WM_VERT_RIGHT 1
|
||||
#define WM_HORIZ_TOP 0
|
||||
@ -19,14 +21,18 @@ typedef enum NodeType {
|
||||
} NodeType;
|
||||
|
||||
typedef struct TreeNode TreeNode;
|
||||
typedef struct NodeArray NodeArray;
|
||||
typedef struct Client Client;
|
||||
|
||||
struct NodeArray {
|
||||
typedef struct {
|
||||
TreeNode *nodes;
|
||||
size_t size;
|
||||
size_t capacity;
|
||||
};
|
||||
} NodeArray;
|
||||
|
||||
typedef struct {
|
||||
Client *clients;
|
||||
size_t size;
|
||||
size_t capacity;
|
||||
} ClientArray;
|
||||
|
||||
struct TreeNode {
|
||||
NodeType type;
|
||||
@ -49,5 +55,12 @@ void wm_nodearray_init(NodeArray *arr);
|
||||
void wm_nodearray_push(NodeArray *arr, TreeNode node);
|
||||
bool wm_nodearray_pop(NodeArray *arr, TreeNode *ret);
|
||||
bool wm_nodearray_remove(NodeArray *arr, size_t index);
|
||||
void wm_nodearray_free(NodeArray *arr);
|
||||
|
||||
void wm_clientarray_init(ClientArray *arr);
|
||||
void wm_clientarray_push(ClientArray *arr, Client node);
|
||||
bool wm_clientarray_pop(ClientArray *arr, Client *ret);
|
||||
bool wm_clientarray_remove(ClientArray *arr, size_t index);
|
||||
void wm_clientarray_free(ClientArray *arr);
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user