C Standard Library Extensions
1.1
|
00001 /* $Id: cxdeque.h,v 1.3 2011/02/21 14:15:31 rpalsa Exp $ 00002 * 00003 * This file is part of the ESO C Extension Library 00004 * Copyright (C) 2001-2011 European Southern Observatory 00005 * 00006 * This program is free software; you can redistribute it and/or modify 00007 * it under the terms of the GNU General Public License as published by 00008 * the Free Software Foundation; either version 2 of the License, or 00009 * (at your option) any later version. 00010 * 00011 * This program is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00014 * GNU General Public License for more details. 00015 * 00016 * You should have received a copy of the GNU General Public License 00017 * along with this program; if not, write to the Free Software 00018 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 00019 */ 00020 00021 /* 00022 * $Author: rpalsa $ 00023 * $Date: 2011/02/21 14:15:31 $ 00024 * $Revision: 1.3 $ 00025 * $Name: cpl-6_1_1 $ 00026 */ 00027 00028 #ifndef CX_DEQUE_H 00029 #define CX_DEQUE_H 00030 00031 #include <cxtypes.h> 00032 #include <cxmemory.h> 00033 00034 CX_BEGIN_DECLS 00035 00036 typedef struct _cx_deque_ cx_deque; 00037 00038 typedef cxsize cx_deque_const_iterator; 00039 typedef cxsize cx_deque_iterator; 00040 00041 00042 /* 00043 * Create, copy and destroy operations 00044 */ 00045 00046 cx_deque *cx_deque_new(void); 00047 void cx_deque_delete(cx_deque* deque); 00048 void cx_deque_destroy(cx_deque *deque, cx_free_func deallocate); 00049 00050 /* 00051 * Non-modifying operations 00052 */ 00053 00054 cxsize cx_deque_size(const cx_deque *deque); 00055 cxbool cx_deque_empty(const cx_deque *deque); 00056 cxsize cx_deque_max_size(const cx_deque *deque); 00057 00058 /* 00059 * Assignment operations 00060 */ 00061 00062 void cx_deque_swap(cx_deque *deque, cx_deque *other); 00063 cxptr cx_deque_assign(cx_deque *deque, cx_deque_iterator position, cxptr data); 00064 00065 /* 00066 * Element access 00067 */ 00068 00069 cxptr cx_deque_front(const cx_deque *deque); 00070 cxptr cx_deque_back(const cx_deque *deque); 00071 cxptr cx_deque_get(const cx_deque *deque, cx_deque_const_iterator position); 00072 00073 /* 00074 * Iterator functions 00075 */ 00076 00077 cx_deque_iterator cx_deque_begin(const cx_deque *deque); 00078 cx_deque_iterator cx_deque_end(const cx_deque *deque); 00079 cx_deque_iterator cx_deque_next(const cx_deque *deque, 00080 cx_deque_const_iterator position); 00081 cx_deque_iterator cx_deque_previous(const cx_deque *deque, 00082 cx_deque_const_iterator position); 00083 00084 /* 00085 * Inserting and removing elements 00086 */ 00087 00088 void cx_deque_push_front(cx_deque *deque, cxcptr data); 00089 cxptr cx_deque_pop_front(cx_deque *deque); 00090 void cx_deque_push_back(cx_deque *deque, cxcptr data); 00091 cxptr cx_deque_pop_back(cx_deque *deque); 00092 00093 cx_deque_iterator cx_deque_insert(cx_deque *deque, cx_deque_iterator position, 00094 cxcptr data); 00095 cx_deque_iterator cx_deque_erase(cx_deque *deque, cx_deque_iterator position, 00096 cx_free_func deallocate); 00097 void cx_deque_clear(cx_deque *deque); 00098 00099 00100 /* 00101 * Extra deque interfaces 00102 */ 00103 00104 /* 00105 * Removing elements 00106 */ 00107 00108 cxptr cx_deque_extract(cx_deque *deque, cx_deque_iterator position); 00109 void cx_deque_remove(cx_deque *deque, cxcptr data); 00110 00111 /* 00112 * Splice functions 00113 */ 00114 00115 void cx_deque_unique(cx_deque *deque, cx_compare_func compare); 00116 void cx_deque_splice(cx_deque *deque, cx_deque_iterator position, 00117 cx_deque *other, cx_deque_iterator start, 00118 cx_deque_iterator end); 00119 void cx_deque_merge(cx_deque *deque, cx_deque *other, cx_compare_func compare); 00120 void cx_deque_sort(cx_deque *deque, cx_compare_func compare); 00121 void cx_deque_reverse(cx_deque *deque); 00122 00123 CX_END_DECLS 00124 00125 #endif /* CX_DEQUE_H */