diff options
author | jim <jim@13f79535-47bb-0310-9956-ffa450edef68> | 2013-09-30 13:01:21 +0000 |
---|---|---|
committer | jim <jim@13f79535-47bb-0310-9956-ffa450edef68> | 2013-09-30 13:01:21 +0000 |
commit | 6627c49635d09fa36a9fc96eb9a6db83476c8a7d (patch) | |
tree | 0f03267792ea39b7a064b36be470628fdf36396c /include/apr_skiplist.h | |
parent | c82fea660957caf33ddc0398e0b71d6caabf0c3f (diff) | |
download | libapr-6627c49635d09fa36a9fc96eb9a6db83476c8a7d.tar.gz |
Add in apr_skiplist
git-svn-id: http://svn.apache.org/repos/asf/apr/apr/branches/1.5.x@1527536 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'include/apr_skiplist.h')
-rw-r--r-- | include/apr_skiplist.h | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/include/apr_skiplist.h b/include/apr_skiplist.h new file mode 100644 index 000000000..37306da2a --- /dev/null +++ b/include/apr_skiplist.h @@ -0,0 +1,82 @@ +/* Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _APR_SKIPLIST_P_H +#define _APR_SKIPLIST_P_H + +#include "apr.h" +#include "apr_portable.h" +#include <stdlib.h> + + +/* This is the function type that must be implemented per object type + that is used in a skiplist for comparisons to maintain order */ +typedef int (*apr_skiplist_compare) (void *, void *); +typedef void (*apr_skiplist_freefunc) (void *); + +struct apr_skiplist; +struct apr_skiplistnode; + +typedef struct apr_skiplistnode apr_skiplistnode; +typedef struct apr_skiplist apr_skiplist; + +APR_DECLARE(void *) apr_skiplist_alloc(apr_skiplist *sl, size_t size); + +APR_DECLARE(void) apr_skiplist_free(apr_skiplist *sl, void *mem); + +APR_DECLARE(apr_status_t) apr_skiplist_init(apr_skiplist **sl, apr_pool_t *p); + +APR_DECLARE(void) apr_skiplist_set_compare(apr_skiplist *sl, apr_skiplist_compare, + apr_skiplist_compare); + +APR_DECLARE(void) apr_skiplist_add_index(apr_skiplist *sl, apr_skiplist_compare, + apr_skiplist_compare); + +APR_DECLARE(apr_skiplistnode *) apr_skiplist_getlist(apr_skiplist *sl); + +APR_DECLARE(void *) apr_skiplist_find_compare(apr_skiplist *sl, + void *data, + apr_skiplistnode **iter, + apr_skiplist_compare func); + +APR_DECLARE(void *) apr_skiplist_find(apr_skiplist *sl, void *data, apr_skiplistnode **iter); + +APR_DECLARE(void *) apr_skiplist_next(apr_skiplist *sl, apr_skiplistnode **iter); + +APR_DECLARE(void *) apr_skiplist_previous(apr_skiplist *sl, apr_skiplistnode **iter); + + +APR_DECLARE(apr_skiplistnode *) apr_skiplist_insert_compare(apr_skiplist *sl, + void *data, apr_skiplist_compare comp); + +APR_DECLARE(apr_skiplistnode *) apr_skiplist_insert(apr_skiplist* sl, void *data); + +APR_DECLARE(int) apr_skiplist_remove_compare(apr_skiplist *sl, void *data, + apr_skiplist_freefunc myfree, apr_skiplist_compare comp); + +APR_DECLARE(int) apr_skiplist_remove(apr_skiplist *sl, void *data, apr_skiplist_freefunc myfree); + +APR_DECLARE(void) apr_skiplist_remove_all(apr_skiplist *sl, apr_skiplist_freefunc myfree); + +APR_DECLARE(void) apr_skiplist_destroy(apr_skiplist *sl, apr_skiplist_freefunc myfree); + +APR_DECLARE(void *) apr_skiplist_pop(apr_skiplist *a, apr_skiplist_freefunc myfree); + +APR_DECLARE(void *) apr_skiplist_peek(apr_skiplist *a); + +APR_DECLARE(apr_skiplist *) apr_skiplist_merge(apr_skiplist *sl1, apr_skiplist *sl2); + +#endif |