1 /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ 2 /* dbus-list.h Generic linked list utility (internal to D-Bus implementation) 3 * 4 * Copyright (C) 2002, 2003 Red Hat, Inc. 5 * 6 * Licensed under the Academic Free License version 2.1 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 * 22 */ 23 24 #ifndef DBUS_LIST_H 25 #define DBUS_LIST_H 26 27 #include <dbus/dbus-internals.h> 28 #include <dbus/dbus-memory.h> 29 #include <dbus/dbus-types.h> 30 #include <dbus/dbus-sysdeps.h> 31 32 DBUS_BEGIN_DECLS 33 34 struct DBusList 35 { 36 DBusList *prev; /**< Previous list node. */ 37 DBusList *next; /**< Next list node. */ 38 void *data; /**< Data stored at this element. */ 39 }; 40 DBUS_PRIVATE_EXPORT 41 dbus_bool_t _dbus_list_append (DBusList **list, 42 void *data); 43 DBUS_PRIVATE_EXPORT 44 dbus_bool_t _dbus_list_prepend (DBusList **list, 45 void *data); 46 dbus_bool_t _dbus_list_insert_before (DBusList **list, 47 DBusList *before_this_link, 48 void *data); 49 DBUS_PRIVATE_EXPORT 50 dbus_bool_t _dbus_list_insert_after (DBusList **list, 51 DBusList *after_this_link, 52 void *data); 53 DBUS_PRIVATE_EXPORT 54 void _dbus_list_insert_before_link (DBusList **list, 55 DBusList *before_this_link, 56 DBusList *link); 57 DBUS_PRIVATE_EXPORT 58 void _dbus_list_insert_after_link (DBusList **list, 59 DBusList *after_this_link, 60 DBusList *link); 61 DBUS_PRIVATE_EXPORT 62 dbus_bool_t _dbus_list_remove (DBusList **list, 63 void *data); 64 DBUS_PRIVATE_EXPORT 65 dbus_bool_t _dbus_list_remove_last (DBusList **list, 66 void *data); 67 DBUS_PRIVATE_EXPORT 68 void _dbus_list_remove_link (DBusList **list, 69 DBusList *link); 70 DBUS_PRIVATE_EXPORT 71 DBusList* _dbus_list_find_last (DBusList **list, 72 void *data); 73 DBUS_PRIVATE_EXPORT 74 void _dbus_list_clear (DBusList **list); 75 DBUS_PRIVATE_EXPORT 76 DBusList* _dbus_list_get_first_link (DBusList **list); 77 DBUS_PRIVATE_EXPORT 78 DBusList* _dbus_list_get_last_link (DBusList **list); 79 DBUS_PRIVATE_EXPORT 80 void* _dbus_list_get_last (DBusList **list); 81 DBUS_PRIVATE_EXPORT 82 void* _dbus_list_get_first (DBusList **list); 83 DBUS_PRIVATE_EXPORT 84 void* _dbus_list_pop_first (DBusList **list); 85 DBUS_PRIVATE_EXPORT 86 void* _dbus_list_pop_last (DBusList **list); 87 DBUS_PRIVATE_EXPORT 88 DBusList* _dbus_list_pop_first_link (DBusList **list); 89 DBUS_PRIVATE_EXPORT 90 dbus_bool_t _dbus_list_copy (DBusList **list, 91 DBusList **dest); 92 DBUS_PRIVATE_EXPORT 93 int _dbus_list_get_length (DBusList **list); 94 DBUS_PRIVATE_EXPORT 95 DBusList* _dbus_list_alloc_link (void *data); 96 DBUS_PRIVATE_EXPORT 97 void _dbus_list_free_link (DBusList *link); 98 DBUS_PRIVATE_EXPORT 99 void _dbus_list_unlink (DBusList **list, 100 DBusList *link); 101 DBUS_PRIVATE_EXPORT 102 void _dbus_list_append_link (DBusList **list, 103 DBusList *link); 104 DBUS_PRIVATE_EXPORT 105 void _dbus_list_prepend_link (DBusList **list, 106 DBusList *link); 107 DBUS_PRIVATE_EXPORT 108 dbus_bool_t _dbus_list_length_is_one (DBusList **list); 109 110 111 DBUS_PRIVATE_EXPORT 112 void _dbus_list_foreach (DBusList **list, 113 DBusForeachFunction function, 114 void *data); 115 116 #define _dbus_list_get_next_link(list, link) ((link)->next == *(list) ? NULL : (link)->next) 117 #define _dbus_list_get_prev_link(list, link) ((link) == *(list) ? NULL : (link)->prev) 118 119 /* if DBUS_ENABLE_STATS */ 120 DBUS_PRIVATE_EXPORT 121 void _dbus_list_get_stats (dbus_uint32_t *in_use_p, 122 dbus_uint32_t *in_free_list_p, 123 dbus_uint32_t *allocated_p); 124 125 DBUS_END_DECLS 126 127 #endif /* DBUS_LIST_H */ 128