00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef DBUS_DATASLOT_H
00024 #define DBUS_DATASLOT_H
00025
00026 #include <dbus/dbus-internals.h>
00027
00028 DBUS_BEGIN_DECLS
00029
00030 typedef struct DBusDataSlotAllocator DBusDataSlotAllocator;
00031 typedef struct DBusDataSlotList DBusDataSlotList;
00032
00034 typedef struct DBusDataSlot DBusDataSlot;
00036 struct DBusDataSlot
00037 {
00038 void *data;
00039 DBusFreeFunction free_data_func;
00040 };
00041
00042 typedef struct DBusAllocatedSlot DBusAllocatedSlot;
00043
00046 struct DBusAllocatedSlot
00047 {
00048 dbus_int32_t slot_id;
00049 int refcount;
00050 };
00051
00055 struct DBusDataSlotAllocator
00056 {
00057 DBusAllocatedSlot *allocated_slots;
00058 int n_allocated_slots;
00059 int n_used_slots;
00060 DBusMutex **lock_loc;
00061 };
00062
00067 struct DBusDataSlotList
00068 {
00069 DBusDataSlot *slots;
00070 int n_slots;
00071 };
00072
00073 dbus_bool_t _dbus_data_slot_allocator_init (DBusDataSlotAllocator *allocator);
00074 dbus_bool_t _dbus_data_slot_allocator_alloc (DBusDataSlotAllocator *allocator,
00075 DBusMutex **mutex_loc,
00076 int *slot_id_p);
00077 void _dbus_data_slot_allocator_free (DBusDataSlotAllocator *allocator,
00078 int *slot_id_p);
00079 void _dbus_data_slot_list_init (DBusDataSlotList *list);
00080 dbus_bool_t _dbus_data_slot_list_set (DBusDataSlotAllocator *allocator,
00081 DBusDataSlotList *list,
00082 int slot,
00083 void *data,
00084 DBusFreeFunction free_data_func,
00085 DBusFreeFunction *old_free_func,
00086 void **old_data);
00087 void* _dbus_data_slot_list_get (DBusDataSlotAllocator *allocator,
00088 DBusDataSlotList *list,
00089 int slot);
00090 void _dbus_data_slot_list_clear (DBusDataSlotList *list);
00091 void _dbus_data_slot_list_free (DBusDataSlotList *list);
00092
00093
00094 DBUS_END_DECLS
00095
00096 #endif