tree: rename handle_tree -> tree

This commit is contained in:
Bert Belder 2017-09-11 01:50:00 +02:00
parent 4dd57efc8b
commit c4f2b71db4
8 changed files with 125 additions and 133 deletions

View File

@ -57,7 +57,7 @@ ep_sock_t* ep_sock_new(ep_port_t* port_info) {
unused(port_info);
memset(sock_private, 0, sizeof *sock_private);
handle_tree_node_init(&sock_private->pub.tree_node);
tree_node_init(&sock_private->pub.tree_node);
queue_node_init(&sock_private->pub.queue_node);
return &sock_private->pub;
@ -303,7 +303,7 @@ int ep_sock_feed_event(ep_port_t* port_info,
return ev_count;
}
ep_sock_t* ep_sock_from_tree_node(handle_tree_node_t* tree_node) {
ep_sock_t* ep_sock_from_tree_node(tree_node_t* tree_node) {
assert(tree_node != NULL);
return container_of(tree_node, ep_sock_t, tree_node);
}

View File

@ -4,10 +4,10 @@
#include <stdint.h>
#include "epoll.h"
#include "handle-tree.h"
#include "internal.h"
#include "queue.h"
#include "rb.h"
#include "tree.h"
#include "util.h"
#include "win.h"
@ -15,7 +15,7 @@ typedef struct ep_port ep_port_t;
typedef struct poll_req poll_req_t;
typedef struct ep_sock {
handle_tree_node_t tree_node;
tree_node_t tree_node;
queue_node_t queue_node;
} ep_sock_t;
@ -39,7 +39,6 @@ EPOLL_INTERNAL void ep_sock_register_poll_req(ep_port_t* port_info,
EPOLL_INTERNAL void ep_sock_unregister_poll_req(ep_port_t* port_info,
ep_sock_t* sock_info);
EPOLL_INTERNAL ep_sock_t* ep_sock_from_tree_node(
handle_tree_node_t* tree_node);
EPOLL_INTERNAL ep_sock_t* ep_sock_from_tree_node(tree_node_t* tree_node);
#endif /* EPOLL_SOCK_DATA_H_ */

View File

@ -49,10 +49,10 @@ static int _ep_ctl_add(ep_port_t* port_info,
static int _ep_ctl_mod(ep_port_t* port_info,
uintptr_t socket,
struct epoll_event* ev) {
handle_tree_node_t* tree_node;
tree_node_t* tree_node;
ep_sock_t* sock_info;
tree_node = handle_tree_find(&port_info->sock_tree, socket);
tree_node = tree_find(&port_info->sock_tree, socket);
if (tree_node == NULL)
return -1;
@ -65,10 +65,10 @@ static int _ep_ctl_mod(ep_port_t* port_info,
}
static int _ep_ctl_del(ep_port_t* port_info, uintptr_t socket) {
handle_tree_node_t* tree_node;
tree_node_t* tree_node;
ep_sock_t* sock_info;
tree_node = handle_tree_find(&port_info->sock_tree, socket);
tree_node = tree_find(&port_info->sock_tree, socket);
if (tree_node == NULL)
return -1;
@ -232,14 +232,14 @@ epoll_t epoll_create(void) {
queue_init(&port_info->update_queue);
memset(&port_info->driver_sockets, 0, sizeof port_info->driver_sockets);
handle_tree_init(&port_info->sock_tree);
tree_init(&port_info->sock_tree);
return (epoll_t) port_info;
}
int epoll_close(epoll_t port_handle) {
ep_port_t* port_info;
handle_tree_node_t* tree_node;
tree_node_t* tree_node;
port_info = (ep_port_t*) port_handle;
@ -281,7 +281,7 @@ int epoll_close(epoll_t port_handle) {
}
/* Remove all entries from the socket_state tree. */
while ((tree_node = handle_tree_root(&port_info->sock_tree)) != NULL) {
while ((tree_node = tree_root(&port_info->sock_tree)) != NULL) {
ep_sock_t* sock_info = ep_sock_from_tree_node(tree_node);
ep_sock_delete(port_info, sock_info);
}
@ -311,13 +311,13 @@ static int _ep_initialize(void) {
}
int ep_port_add_socket(ep_port_t* port_info,
handle_tree_node_t* tree_node,
tree_node_t* tree_node,
SOCKET socket) {
return handle_tree_add(&port_info->sock_tree, tree_node, socket);
return tree_add(&port_info->sock_tree, tree_node, socket);
}
int ep_port_del_socket(ep_port_t* port_info, handle_tree_node_t* tree_node) {
return handle_tree_del(&port_info->sock_tree, tree_node);
int ep_port_del_socket(ep_port_t* port_info, tree_node_t* tree_node) {
return tree_del(&port_info->sock_tree, tree_node);
}
void ep_port_add_req(ep_port_t* port_info) {

View File

@ -1,85 +0,0 @@
#include <assert.h>
#include "error.h"
#include "handle-tree.h"
#include "rb.h"
static inline int _handle_tree_compare(handle_tree_node_t* a,
handle_tree_node_t* b) {
if (a->key < b->key)
return -1;
else if (a->key > b->key)
return 1;
else
return 0;
}
RB_GENERATE_STATIC(handle_tree, handle_tree_node, node, _handle_tree_compare);
void handle_tree_init(handle_tree_t* tree) {
RB_INIT(tree);
}
void handle_tree_node_init(handle_tree_node_t* node) {
memset(node, 0, sizeof *node);
}
int handle_tree_add(handle_tree_t* tree,
handle_tree_node_t* node,
uintptr_t key) {
handle_tree_node_t* existing_node;
if (key == 0)
return_error(-1, ERROR_INVALID_PARAMETER);
if (node->key != 0)
return_error(-1, ERROR_ALREADY_EXISTS);
node->key = key;
existing_node = RB_INSERT(handle_tree, tree, node);
if (existing_node != NULL) {
node->key = 0;
return_error(-1, ERROR_ALREADY_EXISTS);
}
return 0;
}
int handle_tree_del(handle_tree_t* tree, handle_tree_node_t* node) {
handle_tree_node_t* removed_node;
if (node->key == 0)
return_error(-1, ERROR_NOT_FOUND);
removed_node = RB_REMOVE(handle_tree, tree, node);
if (removed_node == NULL)
return_error(-1, ERROR_NOT_FOUND);
else
assert(removed_node == node);
node->key = 0;
return 0;
}
handle_tree_node_t* handle_tree_find(handle_tree_t* tree, uintptr_t key) {
handle_tree_node_t* node;
handle_tree_node_t lookup;
if (key == 0)
return_error(NULL, ERROR_INVALID_PARAMETER);
memset(&lookup, 0, sizeof lookup);
lookup.key = key;
node = RB_FIND(handle_tree, tree, &lookup);
if (node == NULL)
return_error(NULL, ERROR_NOT_FOUND);
return node;
}
handle_tree_node_t* handle_tree_root(handle_tree_t* tree) {
return RB_ROOT(tree);
}

View File

@ -1,27 +0,0 @@
#ifndef EPOLL_HANDLE_TREE_H_
#define EPOLL_HANDLE_TREE_H_
#include "internal.h"
#include "rb.h"
typedef RB_HEAD(handle_tree, handle_tree_node) handle_tree_t;
typedef struct handle_tree_node {
RB_ENTRY(handle_tree_node) node;
uintptr_t key;
} handle_tree_node_t;
EPOLL_INTERNAL void handle_tree_init(handle_tree_t* tree);
EPOLL_INTERNAL void handle_tree_node_init(handle_tree_node_t* node);
EPOLL_INTERNAL int handle_tree_add(handle_tree_t* tree,
handle_tree_node_t* node,
uintptr_t key);
EPOLL_INTERNAL int handle_tree_del(handle_tree_t* tree,
handle_tree_node_t* node);
EPOLL_INTERNAL handle_tree_node_t* handle_tree_find(handle_tree_t* tree,
uintptr_t key);
EPOLL_INTERNAL handle_tree_node_t* handle_tree_root(handle_tree_t* tree);
#endif /* EPOLL_HANDLE_TREE_H_ */

View File

@ -3,10 +3,10 @@
#include "afd.h"
#include "epoll-socket.h"
#include "handle-tree.h"
#include "internal.h"
#include "queue.h"
#include "rb.h"
#include "tree.h"
#include "util.h"
#include "win.h"
@ -16,7 +16,7 @@ typedef struct ep_sock ep_sock_t;
typedef struct ep_port {
HANDLE iocp;
SOCKET driver_sockets[array_count(AFD_PROVIDER_GUID_LIST)];
handle_tree_t sock_tree;
tree_t sock_tree;
queue_t update_queue;
size_t poll_req_count;
} ep_port_t;
@ -25,10 +25,10 @@ EPOLL_INTERNAL SOCKET ep_port_get_driver_socket(ep_port_t* port_info,
SOCKET socket);
EPOLL_INTERNAL int ep_port_add_socket(ep_port_t* port_info,
handle_tree_node_t* tree_node,
tree_node_t* tree_node,
SOCKET socket);
EPOLL_INTERNAL int ep_port_del_socket(ep_port_t* port_info,
handle_tree_node_t* tree_node);
tree_node_t* tree_node);
EPOLL_INTERNAL void ep_port_add_req(ep_port_t* port_info);
EPOLL_INTERNAL void ep_port_del_req(ep_port_t* port_info);

82
src/tree.c Normal file
View File

@ -0,0 +1,82 @@
#include <assert.h>
#include "error.h"
#include "rb.h"
#include "tree.h"
static inline int _tree_compare(tree_node_t* a, tree_node_t* b) {
if (a->key < b->key)
return -1;
else if (a->key > b->key)
return 1;
else
return 0;
}
RB_GENERATE_STATIC(tree, tree_node, node, _tree_compare);
void tree_init(tree_t* tree) {
RB_INIT(tree);
}
void tree_node_init(tree_node_t* node) {
memset(node, 0, sizeof *node);
}
int tree_add(tree_t* tree, tree_node_t* node, uintptr_t key) {
tree_node_t* existing_node;
if (key == 0)
return_error(-1, ERROR_INVALID_PARAMETER);
if (node->key != 0)
return_error(-1, ERROR_ALREADY_EXISTS);
node->key = key;
existing_node = RB_INSERT(tree, tree, node);
if (existing_node != NULL) {
node->key = 0;
return_error(-1, ERROR_ALREADY_EXISTS);
}
return 0;
}
int tree_del(tree_t* tree, tree_node_t* node) {
tree_node_t* removed_node;
if (node->key == 0)
return_error(-1, ERROR_NOT_FOUND);
removed_node = RB_REMOVE(tree, tree, node);
if (removed_node == NULL)
return_error(-1, ERROR_NOT_FOUND);
else
assert(removed_node == node);
node->key = 0;
return 0;
}
tree_node_t* tree_find(tree_t* tree, uintptr_t key) {
tree_node_t* node;
tree_node_t lookup;
if (key == 0)
return_error(NULL, ERROR_INVALID_PARAMETER);
memset(&lookup, 0, sizeof lookup);
lookup.key = key;
node = RB_FIND(tree, tree, &lookup);
if (node == NULL)
return_error(NULL, ERROR_NOT_FOUND);
return node;
}
tree_node_t* tree_root(tree_t* tree) {
return RB_ROOT(tree);
}

23
src/tree.h Normal file
View File

@ -0,0 +1,23 @@
#ifndef EPOLL_HANDLE_TREE_H_
#define EPOLL_HANDLE_TREE_H_
#include "internal.h"
#include "rb.h"
typedef RB_HEAD(tree, tree_node) tree_t;
typedef struct tree_node {
RB_ENTRY(tree_node) node;
uintptr_t key;
} tree_node_t;
EPOLL_INTERNAL void tree_init(tree_t* tree);
EPOLL_INTERNAL void tree_node_init(tree_node_t* node);
EPOLL_INTERNAL int tree_add(tree_t* tree, tree_node_t* node, uintptr_t key);
EPOLL_INTERNAL int tree_del(tree_t* tree, tree_node_t* node);
EPOLL_INTERNAL tree_node_t* tree_find(tree_t* tree, uintptr_t key);
EPOLL_INTERNAL tree_node_t* tree_root(tree_t* tree);
#endif /* EPOLL_HANDLE_TREE_H_ */