diff options
author | Søren Sandmann Pedersen <sandmann@redhat.com> | 2009-08-22 00:40:06 -0400 |
---|---|---|
committer | Søren Sandmann Pedersen <sandmann@redhat.com> | 2009-08-22 00:40:06 -0400 |
commit | f61470d0bf5a9473e6faf54b7241126cc217c426 (patch) | |
tree | c0ba0b37cb85428b208d25cec1c021ca40f8224e | |
parent | ba8d2b59c5fb4dee638cae30001521fb0be4e6bf (diff) |
Add array_set_size() methods; port nul_poll to use it
-rw-r--r-- | TODO | 2 | ||||
-rw-r--r-- | array.c | 22 | ||||
-rw-r--r-- | epoll.c | 16 | ||||
-rw-r--r-- | libnul.h | 14 |
4 files changed, 40 insertions, 14 deletions
@@ -210,7 +210,7 @@ Things from glib: - gstring.h Should probably be replaced with byte array (which in turn must get equivalent API to gstring) - Is GStringChunk useful? + Is GStringChunk useful? probably not - gthreadpool.h maybe (replace with executor?) - gasyncqueue.h probably - G*Array Direct pointers, byte queue @@ -239,6 +239,22 @@ array_remove (void *data, return array->data; } +static void * +array_set_size (void *data, + const int *magic, + gsize n_elements) +{ + array_t *array = get_array (data, magic); + + array = realloc_array (array, n_elements); + + array->n_elements = n_elements; + + nul_terminate (array); + + return array->data; +} + static gssize array_len (const void *data, const int *magic) { @@ -306,6 +322,12 @@ nul_garray_remove_fast (nul_ptr_t arr, nul_ptr_t element) return array_remove (arr, &arr_t_magic, element, TRUE); } +nul_ptr_t +nul_garray_set_size (nul_ptr_t arr, gsize n_elements) +{ + return array_set_size (arr, &arr_t_magic, n_elements); +} + /* * Strings */ @@ -14,7 +14,6 @@ struct FdInfo struct nul_poll_t { int n_fds; - gsize n_fd_infos; FdInfo * fd_info; }; @@ -24,8 +23,7 @@ nul_poll_new (void) nul_poll_t *nul_poll = g_new0 (nul_poll_t, 1); nul_poll->n_fds = 0; - nul_poll->n_fd_infos = 1; - nul_poll->fd_info = g_new0 (FdInfo, 1); + nul_poll->fd_info = nul_array_new (FdInfo); return nul_poll; } @@ -40,10 +38,8 @@ nul_poll_add_fd (nul_poll_t *nul_poll, mask &= (NUL_POLL_RESERVED - 1); - while (fd >= nul_poll->n_fd_infos) - nul_poll->n_fd_infos *= 2; - - nul_poll->fd_info = g_renew (FdInfo, nul_poll->fd_info, nul_poll->n_fd_infos); + while (fd >= nul_array_len (nul_poll->fd_info)) + nul_poll->fd_info = nul_array_set_size (nul_poll->fd_info, fd + 1); nul_poll->n_fds++; @@ -59,7 +55,9 @@ nul_poll_has_fd (nul_poll_t *nul_poll, { g_return_val_if_fail (nul_poll != NULL, FALSE); - return (fd < nul_poll->n_fd_infos && nul_poll->fd_info[fd].valid); + return + fd < nul_array_len (nul_poll->fd_info) && + nul_poll->fd_info[fd].valid; } gint @@ -114,7 +112,7 @@ nul_poll_wait (nul_poll_t *nul_poll, fds = g_new (struct pollfd, nul_poll->n_fds); j = 0; - for (i = 0; i < nul_poll->n_fd_infos; ++i) + for (i = 0; i < nul_array_len (nul_poll->fd_info); ++i) { if (nul_poll->fd_info[i].valid && nul_poll->fd_info[i].enabled && @@ -60,7 +60,8 @@ nul_ptr_t nul_garray_new_prefix (int element_size, int prefix_size) NUL_UR; nul_ptr_t nul_garray_append (nul_ptr_t array, nul_ptr_t element) NUL_UR; nul_ptr_t nul_garray_remove (nul_ptr_t array, nul_ptr_t element) NUL_UR; nul_ptr_t nul_garray_remove_fast (nul_ptr_t array, nul_ptr_t element) NUL_UR; -gsize nul_garray_len (nul_ptr_t array); +nul_ptr_t nul_garray_set_size (nul_ptr_t array, gsize n_elements) NUL_UR; +gsize nul_garray_len (nul_ptr_t array); /* In number of elements */ void nul_garray_free (nul_ptr_t array); #define nul_array_new(type) _nul_array_new_impl(type) @@ -69,6 +70,7 @@ void nul_garray_free (nul_ptr_t array); #define nul_array_remove_fast(array,value) _nul_array_remove_fast_impl(array,value) #define nul_array_len(array) nul_garray_len(array) #define nul_array_free(array) nul_garray_free(array) +#define nul_array_set_size(array,size) nul_garray_set_size(array,size); #define nul_prefix_array_new(type,member) \ _nul_prefix_array_new_impl(type,member) @@ -82,6 +84,8 @@ void nul_garray_free (nul_ptr_t array); _nul_prefix_array_len_impl(array,member) #define nul_prefix_array_free(array,member) \ _nul_prefix_array_free_impl(array,member) +#define nul_prefix_array_set_size(array,member,size) \ + _nul_prefix_array_set_size_impl(array,member,size) /* * Strings @@ -407,12 +411,14 @@ void nul_dbus_invoke (nul_dbus_service_t *service, nul_garray_len(array); \ }) +#define _nul_prefix_array_set_size_impl(array,member,size) \ + ({ (void)((array)->member); \ + nul_garray_set_size(array,size); \ + }) + #define _nul_prefix_array_free_impl(array,member) \ ({ (void)((array)->member); \ nul_garray_free(array); \ }) - - - #endif |