diff options
author | npmccallum <npmccallum@c587cffe-e639-0410-9787-d7902ae8ed56> | 2008-06-05 20:56:04 +0000 |
---|---|---|
committer | npmccallum <npmccallum@c587cffe-e639-0410-9787-d7902ae8ed56> | 2008-06-05 20:56:04 +0000 |
commit | 9a401f3d7392134859a809905b11b7bcfaeea50b (patch) | |
tree | f34c169d4e4f43546bd4404af8c69be09e30ea55 /src/lib/array.c | |
parent | 197ba7edc0ce6f6758b198821a9c6bf7c1fd1932 (diff) | |
download | libproxy-git-libproxy-0.2.3.tar.gz |
The real 0.2.3 releaselibproxy-0.2.3
Diffstat (limited to 'src/lib/array.c')
-rw-r--r-- | src/lib/array.c | 138 |
1 files changed, 0 insertions, 138 deletions
diff --git a/src/lib/array.c b/src/lib/array.c deleted file mode 100644 index 5441d9e..0000000 --- a/src/lib/array.c +++ /dev/null @@ -1,138 +0,0 @@ -/******************************************************************************* - * libproxy - A library for proxy configuration - * Copyright (C) 2006 Nathaniel McCallum <nathaniel@natemccallum.com> - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - ******************************************************************************/ - -#include <stdint.h> -#include <string.h> - -#include "misc.h" -#include "array.h" - -struct _pxArray { - pxArrayItemsEqual equals; - pxArrayItemCallback free; - bool unique; - bool replace; - unsigned int length; - void **data; -}; - -static bool -identity(void *a, void *b) -{ - return (a == b); -} - -static void -nothing(void *a) -{ - return; -} - -pxArray * -px_array_new(pxArrayItemsEqual equals, pxArrayItemCallback free, bool unique, bool replace) -{ - pxArray *self = px_malloc0(sizeof(pxArray)); - self->equals = equals ? equals : &identity; - self->free = free ? free : ¬hing; - self->unique = unique; - self->replace = replace; - self->length = 0; - self->data = px_malloc0(sizeof(void *)); - return self; -} - -bool -px_array_add(pxArray *self, void *item) -{ - /* Verify some basic stuff */ - if (!self || !item) return false; - - /* If we are a unique array and a dup is found, either bail or replace the item */ - if (self->unique && px_array_find(self, item) >= 0) - { - if (!self->replace) - return false; - - self->free(self->data[px_array_find(self, item)]); - self->data[px_array_find(self, item)] = item; - return true; - } - - self->length++; - void **data = px_malloc0(sizeof(void *) * (self->length + 1)); - memcpy(data, self->data, sizeof(void *) * self->length); - data[self->length] = item; - px_free(self->data); - self->data = data; - return true; -} - -bool -px_array_del(pxArray *self, const void *item) -{ - unsigned int index = px_array_find(self, item); - if (index < 0) return false; - - /* Free the old one and shift elements down */ - self->free(self->data[index]); - memmove(self->data+index, - self->data+index+1, - sizeof(void *) * (self->length - index)); - - return true; -} - -void -px_array_foreach(pxArray *self, pxArrayItemCallbackWithArg cb, void *arg) -{ - for (int i=0 ; self->data[i] ; i++) - cb(self->data[i], arg); -} - -int -px_array_find(pxArray *self, const void *item) -{ - if (!self || !item) return -1; - - for (int i=0 ; self->data[i] ; i++) - if (self->equals(self->data[i], (void *) item)) - return i; - - return -1; -} - -const void * -px_array_get(pxArray *self, int index) -{ - if (!self) return NULL; - if (index < 0) index = self->length + index; - if (index < 0) return NULL; - - return self->data[index]; -} - -void -px_array_free(pxArray *self) -{ - if (!self) return; - - for (int i=0 ; self->data[i] ; i++) - self->free(self->data[i]); - px_free(self); -} |