00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00028
00029 #ifndef _SML_QUEUE_INTERNALS_H_
00030 #define _SML_QUEUE_INTERNALS_H_
00031
00032 typedef void (*SmlQueueHandler)(void *message, void *userdata);
00033
00036 typedef struct SmlQueue {
00038 GList *head;
00039 GList *tail;
00040
00041 GList *prio;
00043 SmlQueueHandler handler;
00045 void *userdata;
00047 GSource *source;
00049 GMainContext *context;
00050 GSourceFuncs *functions;
00051 GMutex *mutex;
00052 } SmlQueue;
00053
00054 SmlQueue *smlQueueNew(SmlError **error);
00055 void smlQueueFree(SmlQueue *queue);
00056 void smlQueueFlush(SmlQueue *queue);
00057 void smlQueueSetHandler(SmlQueue *queue, SmlQueueHandler handler, void *userdata);
00058 void smlQueueSend(SmlQueue *queue, void *data);
00059 void smlQueueAttach(SmlQueue *queue, GMainContext *context);
00060 void smlQueueDetach(SmlQueue *queue);
00061 void smlQueueDispatch(SmlQueue *queue);
00062 void *smlQueueTryPop(SmlQueue *queue);
00063 SmlBool smlQueueCheck(SmlQueue *queue);
00064 void smlQueuePushHead(SmlQueue *queue, void *data);
00065 SmlBool smlQueueIsAttached(SmlQueue *queue);
00066 void smlQueueLock(SmlQueue *queue);
00067 void smlQueueUnlock(SmlQueue *queue);
00068 void *smlQueuePeek(SmlQueue *queue);
00069 GList *smlQueuePeekNext(SmlQueue *queue, GList *prev);
00070 void *smlQueueTryPopPrio(SmlQueue *queue);
00071 void smlQueuePushHeadPrio(SmlQueue *queue, void *data);
00072 void smlQueueSendPrio(SmlQueue *queue, void *data);
00073 SmlBool smlQueueCheckPrio(SmlQueue *queue);
00074 void smlQueueDispatchPrio(SmlQueue *queue);
00075 void *smlQueuePeekPrio(SmlQueue *queue);
00076 void smlQueuePrint(SmlQueue *queue);
00077 unsigned int smlQueueLength(SmlQueue *queue);
00078 unsigned int smlQueueLengthPrio(SmlQueue *queue);
00079
00080 #endif //_SML_QUEUE_INTERNALS_H_
00081