⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shlist.c

📁 Android 一些工具
💻 C
字号:
/*-------------------------------------------------------------------*//*                         List  Functionality                       *//*-------------------------------------------------------------------*//* #define SH_LIST_DEBUG *//*-------------------------------------------------------------------*/#include <stdio.h>#include <stdlib.h>#include "shlist.h"/*-------------------------------------------------------------------*/void shListInitList( SHLIST *listPtr ){  listPtr->data = (void *)0L;  listPtr->next = listPtr;  listPtr->prev = listPtr;}SHLIST *shListFindItem( SHLIST *head, void *val, shListEqual func ){  SHLIST *item;  for(item=head->next;( item != head );item=item->next)    if( func ) {      if( func( val, item->data ) ) {        return( item );      }    }    else {      if( item->data == val ) {        return( item );      }    }  return( NULL );}SHLIST *shListGetLastItem( SHLIST *head ){  if( head->prev != head )    return( head->prev );  return( NULL );}SHLIST *shListGetFirstItem( SHLIST *head ){  if( head->next != head )    return( head->next );  return( NULL );}SHLIST *shListGetNItem( SHLIST *head, unsigned long num ){  SHLIST *item;  unsigned long i;  for(i=0,item=head->next;( (i < num) && (item != head) );i++,item=item->next);  if( item != head )    return( item );  return( NULL );}SHLIST *shListGetNextItem( SHLIST *head, SHLIST *item ){  if( item == NULL )    return( NULL );  if( item->next != head )    return( item->next );  return( NULL );}SHLIST *shListGetPrevItem( SHLIST *head, SHLIST *item ){  if( item == NULL )    return( NULL );  if( item->prev != head )    return( item->prev );  return( NULL );}void shListDelItem( SHLIST *head, SHLIST *item, shListFree func ){  if( item == NULL )    return;#ifdef SH_LIST_DEBUG  fprintf(stderr, "Del %lx\n", (unsigned long)(item->data));#endif  (item->prev)->next = item->next;  (item->next)->prev = item->prev;  if( func && item->data ) {    func( (void *)(item->data) );  }  free( item );  head->data = (void *)((unsigned long)(head->data) - 1);}void shListInsFirstItem( SHLIST *head, void *val ){ /* Insert to the beginning of the list */  SHLIST *item;  item = (SHLIST *)malloc( sizeof(SHLIST) );  if( item == NULL )    return;  item->data = val;  item->next = head->next;  item->prev = head;  (head->next)->prev = item;  head->next = item;#ifdef SH_LIST_DEBUG  fprintf(stderr, "Ins First %lx\n", (unsigned long)(item->data));#endif  head->data = (void *)((unsigned long)(head->data) + 1);}void shListInsLastItem( SHLIST *head, void *val ){ /* Insert to the end of the list */  SHLIST *item;  item = (SHLIST *)malloc( sizeof(SHLIST) );  if( item == NULL )    return;  item->data = val;  item->next = head;  item->prev = head->prev;  (head->prev)->next = item;  head->prev = item;#ifdef SH_LIST_DEBUG  fprintf(stderr, "Ins Last %lx\n", (unsigned long)(item->data));#endif  head->data = (void *)((unsigned long)(head->data) + 1);}void shListInsBeforeItem( SHLIST *head, void *val, void *etal,                           shListCmp func ){  SHLIST *item, *iptr;  if( func == NULL )    shListInsFirstItem( head, val );  else {    item = (SHLIST *)malloc( sizeof(SHLIST) );    if( item == NULL )      return;    item->data = val;    for(iptr=head->next;( iptr != head );iptr=iptr->next)      if( func( val, iptr->data, etal ) )         break;    item->next = iptr;    item->prev = iptr->prev;    (iptr->prev)->next = item;    iptr->prev = item;#ifdef SH_LIST_DEBUG    fprintf(stderr, "Ins Before %lx\n", (unsigned long)(item->data));#endif    head->data = (void *)((unsigned long)(head->data) + 1);  }}void shListDelAllItems( SHLIST *head, shListFree func ){  SHLIST *item;  for(item=head->next;( item != head );) {    shListDelItem( head, item, func );    item = head->next;  }  head->data = (void *)0L;}void shListPrintAllItems( SHLIST *head, shListPrint func ){#ifdef SH_LIST_DEBUG  SHLIST *item;  for(item=head->next;( item != head );item=item->next)    if( func ) {      func(item->data);    }    else {      fprintf(stderr, "Item: %lx\n",(unsigned long)(item->data));    }#endif}unsigned long shListGetCount( SHLIST *head ){  return( (unsigned long)(head->data) );}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -