www.pudn.com > ezw_davis.rar > fifo.c


/* 
FIFO.C 
 
Simple implementation of a fifo in ANSI-C. 
 
This file is part of my Embedded Zerotree Wavelet Encoder Tutorial. 
 
(C) C. Valens,  
 
Created    : 04/09/1999 
Last update: 29/09/1999 
*/ 
 
 
#include "fifo.h" 
#include  
 
typedef struct __fifo_element {   //建立一个fifo的数据链表 
  ezw_element data;               //data中的值是x,y坐标和(x,y)的值 
  struct __fifo_element *previous; 
} fifo_element; 
 
 
fifo_element *fifo_first = NULL; 
fifo_element *fifo_last = NULL; 
char fifo_empty = 1;//fifo空的标志 
 
 
void put_in_fifo(ezw_element d)//将一个ezw_element元素放入fifo链表中 
{ 
  fifo_element *p; 
 
  p = malloc(sizeof(fifo_element));//申请一个新的空间 
  if (p!=NULL) { 
    p->data = d; 
    p->previous = NULL; 
    if (fifo_last!=NULL) fifo_last->previous = p; 
    fifo_last = p; 
    if (fifo_first==NULL) fifo_first = p; 
    fifo_empty = 0; 
  } 
} 
 
ezw_element get_from_fifo(void)//从fifo中得到一个ezw_element元素 
{ 
  ezw_element d; 
  fifo_element *p; 
 
  p = fifo_first; 
  if (p!=NULL) { 
    d = p->data; 
    fifo_first = p->previous; 
    free(p); 
  } 
  else { 
    fifo_last = NULL; 
    fifo_empty = 1; 
  } 
  return d; 
} 
 
void destroy_fifo(void)//清除整个fifo链表 
{ 
  fifo_element *p; 
  while (fifo_first!=NULL) { 
    p = fifo_first; 
    fifo_first = p->previous; 
    free(p); 
  } 
  fifo_last = NULL; 
  fifo_empty = 1; 
} 
 
void initialize_fifo(void)//初始化fifo, 
                          //令fifo_first和fifo_last为NULL且fifo_empty为1 
{ 
  fifo_first = NULL; 
  fifo_last = NULL; 
  fifo_empty = 1; 
}