首页 > 其他分享 >3任务的创建-列表项的删除&遍历

3任务的创建-列表项的删除&遍历

时间:2022-12-30 18:55:36浏览次数:56  
标签:遍历 删除 pxConstList pxIndex pxItemToRemove 列表 pxNext pxList

 1、列表项的删除:从列表中删除指定的列表项,通过uxListRemove()函数来完成

pxItemToRemove:要删除的列表项
uxListRemove:剩余列表项的数目
步骤:
  1. 获取列表项所在的列表地址将要删除的
  2. 列表项的前后两个列表项进行连接
  3. 索引是否需要更新
  4. 被删除列表项的成员变量pvContainer清零
  5. 列表项数量减一
  6. 返回当前列表的有效列表项数量
 1 UBaseType_t uxListRemove( ListItem_t * const pxItemToRemove )
 2 {
 3     List_t * const pxList = ( List_t * ) pxItemToRemove->pvContainer;
 4 
 5     pxItemToRemove->pxNext->pxPrevious = pxItemToRemove->pxPrevious;
 6     pxItemToRemove->pxPrevious->pxNext = pxItemToRemove->pxNext;
 7     /* Only used during decision coverage testing. */
 8     mtCOVERAGE_TEST_DELAY();
 9 
10     if( pxList->pxIndex == pxItemToRemove )
11     {
12         pxList->pxIndex = pxItemToRemove->pxPrevious;
13     }
14     else
15     {
16         mtCOVERAGE_TEST_MARKER();
17     }
18 
19     pxItemToRemove->pvContainer = NULL;
20 
21     ( pxList->uxNumberOfItems )--;
22 
23     return pxList->uxNumberOfItems;
24 }

2、 列表项的遍历

 每调用一次这个函数,列表的pxIndex变量就会指向下一个列表项,并返回这个列表项的pvOwner变量值

 pxTCB:用来保存pxIndex所指向的列表项的pvOwner
 pxList:表示要遍历的列表

步骤:

  1. 首先获取当前列表
  2. 列表的pxIndex变量指向下一个列表项
  3.  如果pxIndex指向了列表的xListEnd成员变量,表示到了列表末尾
  4. 此时就跳过xListEnd,pxIndex再次指向列表头的列表项,这样就完成了一次列表遍历 
  5. 获取当前pxIndex指向的所有者(其实就是任务控制块)
 1 #define listGET_OWNER_OF_NEXT_ENTRY( pxTCB, pxList )    
 2 {    
 3     List_t * const pxConstList = ( pxList );    
 4     
 5     ( pxConstList )->pxIndex = ( pxConstList )->pxIndex->pxNext;    
 6     
 7     if( ( void * ) ( pxConstList )->pxIndex == ( void * ) &( ( pxConstList )->xListEnd ) )    
 8     {         
 9         ( pxConstList )->pxIndex = ( pxConstList )->pxIndex->pxNext;    
10     }    
11     ( pxTCB ) = ( pxConstList )->pxIndex->pvOwner;    
12 }

 

 




 

标签:遍历,删除,pxConstList,pxIndex,pxItemToRemove,列表,pxNext,pxList
From: https://www.cnblogs.com/CC-C/p/17012193.html

相关文章

  • #yyds干货盘点# 名企真题专题:删除重复字符
    1.简述:描述牛牛有一个由小写字母组成的字符串s,在s中可能有一些字母重复出现。比如在"banana"中,字母'a'和字母'n'分别出现了三次和两次。但是牛牛不喜欢重复。对于同一个字......
  • centos 7 删除乱码文件
    1、通过ls-li获取要删除乱码文件名文件的inode号,比如得到的是 335750292、通过以下命令删除文件:find./-inum33575029-execrm-rf{}\;注意:“{}”后要空一格再......
  • 删除文件中每个标签最后几行数据
    文本文件中有两列第一列是标签第二列是对应的值使用逗号分隔例如:2,1+1但因为一些问题,这个标签并不是每行都一一对应的,每个标签的后5行是错误的,所以需要删除这5行例如:2,1+......
  • 全文检索工具elasticsearch:第四章:开发电商的搜索列表功能
    1、功能简介1.1入口:两个首页的分类搜索栏列表展示页面2根据业务搭建数据结构这时我们要思考三个问题:哪些字段需要分词我们用哪些字段进行过滤哪些字段我们需......
  • 迭代(遍历数组)forEach
    1.forEach用法vararr=[13,2,2,5] varsum=0 //forEach用法:Array.forEach(function(数组当前项的值,数组当前项的索引值,数组本身){}) arr.forEach(function(valu......
  • activiti删除某个流程对应的实例数据sql
    #根据流程key查询所有的流程实例id(历史和运行时)SELECTGROUP_CONCAT(t.PROC_INST_ID_)FROM(SELECTPROC_INST_ID_FROMACT_RU_TASKwhereINSTR(PROC_DEF_ID_,'d......
  • java list集合存储学生对象3种遍历方式
        ......
  • Microsoft 365 开发:如何用脚本删除个人邮箱和共享邮箱的权限
    Blog链接:​​​https://blog.51cto.com/13969817​​在日常维护和管理中,删除现有邮箱权限也是Exchange管理的重要任务之一。今天本文将给大家分享使用Remove-MailboxPermiss......
  • Opnecv_遍历Mat
    opencv图像数据是BGR的顺序,其它的通常为RGB的顺序。Theefficientway Mat&ScanImageAndReduceC(Mat&I,constuchar*consttable){//acceptonlychartypematri......
  • redis 批量删除key
    以14号库为例,8号库照猫画虎即可1.首先先尝试连接redis,-h指定地址-p指定端口-n指定第几个库切记不要先执行keys*,可以先执行dbsize查看一下key的数量再决定是否执行......