| /* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */ |
| /* dbus-dataslot.h storing data on objects |
| * |
| * Copyright (C) 2003 Red Hat, Inc. |
| * |
| * Licensed under the Academic Free License version 2.1 |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation; either version 2 of the License, or |
| * (at your option) any later version. |
| * |
| * This program 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 General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| * |
| */ |
| #ifndef DBUS_DATASLOT_H |
| #define DBUS_DATASLOT_H |
| |
| #include <dbus/dbus-internals.h> |
| |
| DBUS_BEGIN_DECLS |
| |
| typedef struct DBusDataSlotAllocator DBusDataSlotAllocator; |
| typedef struct DBusDataSlotList DBusDataSlotList; |
| |
| /** Opaque typedef for DBusDataSlot */ |
| typedef struct DBusDataSlot DBusDataSlot; |
| /** DBusDataSlot is used to store application data on the connection */ |
| struct DBusDataSlot |
| { |
| void *data; /**< The application data */ |
| DBusFreeFunction free_data_func; /**< Free the application data */ |
| }; |
| |
| typedef struct DBusAllocatedSlot DBusAllocatedSlot; |
| |
| /** An allocated slot for storing data |
| */ |
| struct DBusAllocatedSlot |
| { |
| dbus_int32_t slot_id; /**< ID of this slot */ |
| int refcount; /**< Number of uses of the slot */ |
| }; |
| |
| /** |
| * An allocator that tracks a set of slot IDs. |
| */ |
| struct DBusDataSlotAllocator |
| { |
| DBusAllocatedSlot *allocated_slots; /**< Allocated slots */ |
| int n_allocated_slots; /**< number of slots malloc'd */ |
| int n_used_slots; /**< number of slots used */ |
| DBusRMutex **lock_loc; /**< location of thread lock */ |
| }; |
| |
| /** |
| * Data structure that stores the actual user data set at a given |
| * slot. |
| */ |
| struct DBusDataSlotList |
| { |
| DBusDataSlot *slots; /**< Data slots */ |
| int n_slots; /**< Slots we have storage for in data_slots */ |
| }; |
| |
| dbus_bool_t _dbus_data_slot_allocator_init (DBusDataSlotAllocator *allocator); |
| dbus_bool_t _dbus_data_slot_allocator_alloc (DBusDataSlotAllocator *allocator, |
| DBusRMutex **mutex_loc, |
| int *slot_id_p); |
| void _dbus_data_slot_allocator_free (DBusDataSlotAllocator *allocator, |
| int *slot_id_p); |
| void _dbus_data_slot_list_init (DBusDataSlotList *list); |
| dbus_bool_t _dbus_data_slot_list_set (DBusDataSlotAllocator *allocator, |
| DBusDataSlotList *list, |
| int slot, |
| void *data, |
| DBusFreeFunction free_data_func, |
| DBusFreeFunction *old_free_func, |
| void **old_data); |
| void* _dbus_data_slot_list_get (DBusDataSlotAllocator *allocator, |
| DBusDataSlotList *list, |
| int slot); |
| void _dbus_data_slot_list_clear (DBusDataSlotList *list); |
| void _dbus_data_slot_list_free (DBusDataSlotList *list); |
| |
| |
| DBUS_END_DECLS |
| |
| #endif /* DBUS_DATASLOT_H */ |