add util.h and util.c
This commit is contained in:
parent
9bb7c645aa
commit
60829dd1c1
81
util.c
Normal file
81
util.c
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
#include "util.h"
|
||||||
|
#include <string.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
void wm_treenode_init(TreeNode *node, NodeType type, TreeNode *parent)
|
||||||
|
{
|
||||||
|
assert(node);
|
||||||
|
|
||||||
|
node->parent = parent;
|
||||||
|
node->type = type;
|
||||||
|
node->children = (NodeArray) {0};
|
||||||
|
wm_nodearray_init(&node->children);
|
||||||
|
}
|
||||||
|
|
||||||
|
void wm_nodearray_init(NodeArray *arr)
|
||||||
|
{
|
||||||
|
assert(arr);
|
||||||
|
|
||||||
|
arr->capacity = 10;
|
||||||
|
arr->nodes = calloc(arr->capacity, sizeof(TreeNode));
|
||||||
|
arr->size = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wm_nodearray_push(NodeArray *arr, TreeNode node)
|
||||||
|
{
|
||||||
|
assert(arr);
|
||||||
|
|
||||||
|
arr->size++;
|
||||||
|
|
||||||
|
if (arr->size >= arr->capacity) {
|
||||||
|
TreeNode* temp = calloc(arr->capacity, sizeof(TreeNode));
|
||||||
|
memcpy(temp, arr->nodes, arr->capacity * sizeof(TreeNode));
|
||||||
|
free(arr->nodes);
|
||||||
|
size_t old_capacity = arr->capacity;
|
||||||
|
arr->capacity = old_capacity * 2;
|
||||||
|
|
||||||
|
arr->nodes = calloc(arr->capacity, sizeof(TreeNode));
|
||||||
|
memcpy(arr->nodes, temp, old_capacity);
|
||||||
|
|
||||||
|
free(temp);
|
||||||
|
arr->nodes[arr->size - 1] = node;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
arr->nodes[arr->size - 1] = node;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wm_nodearray_pop(NodeArray *arr, TreeNode *ret)
|
||||||
|
{
|
||||||
|
assert(arr);
|
||||||
|
|
||||||
|
if (!ret || !arr)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (arr->size == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
*ret = arr->nodes[arr->size - 1];
|
||||||
|
arr->size--;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wm_nodearray_remove(NodeArray *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->nodes + index, arr->nodes + index+1, arr->size-1 * sizeof(TreeNode));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
53
util.h
Normal file
53
util.h
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#ifndef UTIL_H
|
||||||
|
#define UTIL_H
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#define WM_VERT_LEFT 0
|
||||||
|
#define WM_VERT_RIGHT 1
|
||||||
|
#define WM_HORIZ_TOP 0
|
||||||
|
#define WM_HORIZ_BOT 1
|
||||||
|
|
||||||
|
typedef enum NodeType {
|
||||||
|
VERTICAL,
|
||||||
|
HORIZONTAL,
|
||||||
|
TAB,
|
||||||
|
CLIENT,
|
||||||
|
COUNT
|
||||||
|
} NodeType;
|
||||||
|
|
||||||
|
typedef struct TreeNode TreeNode;
|
||||||
|
typedef struct NodeArray NodeArray;
|
||||||
|
typedef struct Client Client;
|
||||||
|
|
||||||
|
struct NodeArray {
|
||||||
|
TreeNode *nodes;
|
||||||
|
size_t size;
|
||||||
|
size_t capacity;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct TreeNode {
|
||||||
|
NodeType type;
|
||||||
|
|
||||||
|
TreeNode *parent;
|
||||||
|
|
||||||
|
NodeArray children;
|
||||||
|
|
||||||
|
int x;
|
||||||
|
int y;
|
||||||
|
int w;
|
||||||
|
int h;
|
||||||
|
|
||||||
|
Client *client;
|
||||||
|
};
|
||||||
|
|
||||||
|
void wm_treenode_init(TreeNode *node, NodeType type, TreeNode *parent);
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
#endif
|
Loading…
x
Reference in New Issue
Block a user