tree: rename handle_tree -> tree
This commit is contained in:
parent
4dd57efc8b
commit
c4f2b71db4
@ -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);
|
||||
}
|
||||
|
||||
@ -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_ */
|
||||
|
||||
22
src/epoll.c
22
src/epoll.c
@ -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) {
|
||||
|
||||
@ -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);
|
||||
}
|
||||
@ -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_ */
|
||||
@ -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
82
src/tree.c
Normal 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
23
src/tree.h
Normal 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_ */
|
||||
Loading…
x
Reference in New Issue
Block a user