00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifdef __cplusplus
00022 extern "C" {
00023 #endif
00024
00025
00026 #ifndef __FLGR_DATA_TOOLS_FIFO_H
00027 #define __FLGR_DATA_TOOLS_FIFO_H
00028
00029 #include <flgrCoreDll.h>
00030 #include <flgrCoreTypes.h>
00031 #include <flgrCoreMalloc.h>
00032
00040 typedef struct FLGR_FifoLink FLGR_FifoLink;
00041
00045 struct FLGR_FifoLink {
00046 FLGR_FifoLink *next;
00047 FLGR_FifoLink *previous;
00048 int z;
00049 int y;
00050 int x;
00051 };
00052
00053
00054 typedef struct FLGR_Fifo FLGR_Fifo;
00055
00059 struct FLGR_Fifo{
00060 FLGR_FifoLink *input;
00061 FLGR_FifoLink *output;
00062 int size;
00063 void *label;
00064 };
00065
00066
00068
00072
00073 EXPORT_LIB void flgr_fifo_init(FLGR_Fifo *fifo);
00074
00076
00079
00080 EXPORT_LIB FLGR_Fifo *flgr_fifo_create(void);
00081
00083
00087
00088 EXPORT_LIB void flgr_fifo_destroy(FLGR_Fifo *fifo);
00089
00091
00095
00096 EXPORT_LIB void flgr_fifo_flush(FLGR_Fifo *fifo);
00097
00099
00103
00104 EXPORT_LIB int flgr_fifo_get_size(FLGR_Fifo *fifo);
00105
00106
00108
00112
00113 static __inline__ void flgr_fifo_del_current(FLGR_Fifo *fifo) {
00114 FLGR_FifoLink *tmp;
00115
00116 if(fifo->size==0) return;
00117
00118 tmp = fifo->output;
00119 fifo->output = tmp->previous;
00120 fifo->size--;
00121
00122 if(fifo->size==0) {
00123 fifo->input = NULL;
00124 }else {
00125 fifo->output->next=NULL;
00126 }
00127
00128 flgr_free(tmp);
00129
00130 }
00131
00133
00140
00141 static __inline__ void flgr_fifo_get_current(FLGR_Fifo *fifo, int *z, int *y, int *x) {
00142 FLGR_FifoLink *tmp;
00143 tmp = fifo->output;
00144 *z=tmp->z;
00145 *y=tmp->y;
00146 *x=tmp->x;
00147 }
00148
00150
00157
00158 static __inline__ void flgr_fifo_push(FLGR_Fifo *fifo, int z, int y, int x) {
00159 FLGR_FifoLink *tmp = (FLGR_FifoLink*) flgr_malloc(sizeof(FLGR_FifoLink));
00160
00161 tmp->next = fifo->input;
00162 tmp->previous = NULL;
00163 tmp->z = z;
00164 tmp->y = y;
00165 tmp->x = x;
00166
00167 if(fifo->size==0) {
00168 fifo->output = tmp;
00169 }else {
00170 fifo->input->previous = tmp;
00171 }
00172
00173 fifo->input = tmp;
00174
00175 fifo->size++;
00176 }
00177
00179
00186
00187 static __inline__ void flgr_fifo_pop(FLGR_Fifo *fifo, int *z, int *y, int *x) {
00188 flgr_fifo_get_current(fifo,z,y,x);
00189 flgr_fifo_del_current(fifo);
00190 }
00191
00192
00193
00195
00196
00197 #endif
00198
00199 #ifdef __cplusplus
00200 }
00201 #endif