#define FIFO_SIZE_T size_t#define FIFO_MIN 0x4000typedef struct {   char * data;   size_t allocation;   /* Number of bytes allocated for data. */   size_t item_size;    /* Size of each item in data */   size_t begin;        /* Offset of the first byte to read. */   size_t end;          /* 1 + Offset of the last byte byte to read. */} fifo_t;static void fifo_clear(fifo_t * f){   f->end = f->begin = 0;}static void * fifo_reserve(fifo_t * f, FIFO_SIZE_T n){   n *= f->item_size;   if (f->begin == f->end)      fifo_clear(f);   while (1) {      if (f->end + n <= f->allocation) {         void *p = f->data + f->end;         f->end += n;         return p;      }      if (f->begin > FIFO_MIN) {         memmove(f->data, f->data + f->begin, f->end - f->begin);         f->end -= f->begin;         f->begin = 0;         continue;      }      f->allocation += n;      f->data = (char *)realloc(f->data, f->allocation);   }}static void * fifo_write(fifo_t * f, FIFO_SIZE_T n, void const * data){   void * s = fifo_reserve(f, n);   if (data)      memcpy(s, data, n * f->item_size);   return s;}static void * fifo_read(fifo_t * f, FIFO_SIZE_T n, void * data){   char * ret = f->data + f->begin;   n *= f->item_size;   if (n > (FIFO_SIZE_T)(f->end - f->begin))      return NULL;   if (data)      memcpy(data, ret, (size_t)n);   f->begin += n;   return ret;}static void fifo_delete(fifo_t * f){   free(f->data);}static void fifo_create(fifo_t * f, FIFO_SIZE_T item_size){   f->item_size = item_size;   f->allocation = FIFO_MIN;   f->data = (char *)malloc(f->allocation);   fifo_clear(f);}

更多相关文章

  1. 代码中设置drawableleft
  2. android 3.0 隐藏 系统标题栏
  3. Android开发中activity切换动画的实现
  4. Android(安卓)学习 笔记_05. 文件下载
  5. Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
  6. 技术博客汇总
  7. android 2.3 wifi (一)
  8. AndRoid Notification的清空和修改
  9. Android中的Chronometer

随机推荐

  1. Android(安卓)问题集
  2. Android(安卓)studio ndk编译配置
  3. Android通过http协议POST传输方式
  4. android stuido解决MissingTranslation
  5. 自定义 Toast
  6. android EditText自定义样式
  7. Android结束进程的方法
  8. Android中RadioGroup组与onCheckedChange
  9. Android中的searchView去掉前面的搜索圈
  10. Android(安卓)在两个Activity之间切换