00001 #ifndef QUEUEING_H
00002 #define QUEUEING_H
00003
00004
00014 #include "conv-config.h"
00015
00016 #ifdef __cplusplus
00017 extern "C" {
00018 #endif
00019
00020
00022 extern int schedAdaptMemThresholdMB;
00023
00024 #ifndef CINTBITS
00025 #define CINTBITS ((unsigned int) (sizeof(int)*8))
00026 #endif
00027 #ifndef CLONGBITS
00028 #define CLONGBITS ((unsigned int) (sizeof(CmiInt8)*8))
00029 #endif
00030
00032 typedef struct prio_struct
00033 {
00034 unsigned short bits;
00035 unsigned short ints;
00036 unsigned int data[1];
00037 }
00038 *_prio;
00039
00044 typedef struct deq_struct
00045 {
00046
00047 void **bgn;
00048 void **end;
00049 void **head;
00050 void **tail;
00051 void *space[4];
00052 }
00053 *_deq;
00054
00055 #ifndef FASTQ
00056
00061 typedef struct prioqelt_struct
00062 {
00063 struct deq_struct data;
00064 struct prioqelt_struct *ht_next;
00065 struct prioqelt_struct **ht_handle;
00066 struct prio_struct pri;
00067 }
00068 *_prioqelt;
00069 #else
00070 typedef struct prioqelt_struct
00071 {
00072 struct deq_struct data;
00073 struct prioqelt_struct *ht_left;
00074 struct prioqelt_struct *ht_right;
00075 struct prioqelt_struct *ht_parent;
00076 struct prioqelt_struct **ht_handle;
00077 struct prio_struct pri;
00078
00079 }
00080 *_prioqelt;
00081 #endif
00082
00083
00084
00085
00086 #define PRIOQ_TABSIZE 1017
00087
00088
00089
00095 typedef struct prioq_struct
00096 {
00097 int heapsize;
00098 int heapnext;
00099 _prioqelt *heap;
00100 _prioqelt *hashtab;
00101 int hash_key_size;
00102 int hash_entry_size;
00103 }
00104 *_prioq;
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00125 typedef struct Queue_struct
00126 {
00127 #if CMK_USE_STL_MSGQ
00128 void *stlQ;
00129 #else
00130 unsigned int length;
00131 unsigned int maxlen;
00132 struct deq_struct zeroprio;
00133 struct prioq_struct negprioq;
00134 struct prioq_struct posprioq;
00135 #endif
00136 }
00137 *Queue;
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00155 Queue CqsCreate(void);
00156
00158 void CqsDelete(Queue);
00159
00161 void CqsEnqueue(Queue, void *msg);
00162
00164 void CqsEnqueueFifo(Queue, void *msg);
00165
00167 void CqsEnqueueLifo(Queue, void *msg);
00168
00173 void CqsEnqueueGeneral(Queue, void *msg, int strategy,
00174 int priobits, unsigned int *prioPtr);
00175
00185 void CqsEnumerateQueue(Queue q, void ***resp);
00186
00191 void CqsDequeue(Queue, void **msgPtr);
00192
00193 unsigned int CqsLength(Queue);
00194 int CqsEmpty(Queue);
00195 int CqsPrioGT_(unsigned int ints1, unsigned int *data1, unsigned int ints2, unsigned int *data2);
00196 int CqsPrioGT(_prio, _prio);
00197
00199 _prio CqsGetPriority(Queue);
00200
00201 void CqsIncreasePriorityForEntryMethod(Queue q, const int entrymethod);
00202
00210 void CqsRemoveSpecific(Queue, const void *msgPtr);
00211
00212 #ifdef ADAPT_SCHED_MEM
00213 void CqsIncreasePriorityForMemCriticalEntries(Queue q);
00214 #endif
00215
00216 #ifdef __cplusplus
00217 }
00218 #endif
00219
00222 #endif