OSX compilation fixes
[lumina.git] / core / include / data_item.h
blob039c9c50458272f8e1d42a6aa079fc550dc60a9b
1 #ifndef DATA_ITEM_H
2 #define DATA_ITEM_H
4 #include "config.h"
5 #include <sys/queue.h>
7 #include <assert.h>
9 typedef enum DataItemType {
10 DATA_ITEM_NULL = 0,
11 DATA_ITEM_MEMORY
12 } DataItemType;
14 typedef struct DataItem DataItem;
15 typedef struct DataItem_ops DataItem_ops;
17 STAILQ_HEAD(DataItem_queue, DataItem);
18 typedef struct DataItem_queue DataItem_queue;
20 struct DataItem_ops {
21 /** Completely 'free' all resources of the DataItem */
22 void (*free)(DataItem *);
23 /** Release expensive resources, leaving identity information */
24 void (*clear)(DataItem *);
25 enum DataItemType typeID;
26 const char **fullType;
29 struct DataItem {
30 DataItem_ops *ops;
31 STAILQ_ENTRY(DataItem) entries;
34 INLINE void free_DataItem(DataItem *item) {
35 assert(item && item->ops && item->ops->free);
36 item->ops->free(item);
39 INLINE void DataItem_clear(DataItem *item) {
40 assert(item && item->ops && item->ops->clear);
41 item->ops->clear(item);
44 INLINE DataItemType DataItem_getTypeID(DataItem *item) {
45 assert(item && item->ops);
46 return item->ops->typeID;
49 INLINE const char** DataItem_getFullType(DataItem *item) {
50 assert(item && item->ops);
51 return item->ops->fullType;
54 #endif