Blame view

Common/gen_linklist.c 3.29 KB
9d8bbd1c   李外   改升级前备份
1
  #include    "gen_linklist.h"
32fa5493   李外   移植快速下发完成,快速下发与17信...
2
  #include "platform.h"
a0293f87   李外   1、用新写法替换所有开关总中断的语句;
3
  #include <stdio.h>
9d8bbd1c   李外   改升级前备份
4
5
6
  
  // https://blog.csdn.net/swwlqw/article/details/22498833
  
9d8bbd1c   李外   改升级前备份
7
8
9
  /*-------------- insert ------------------------------
  * insert data to any postion
  */
a0293f87   李外   1、用新写法替换所有开关总中断的语句;
10
11
12
  #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
  #undef container_of
  #define container_of(ptr, type, member) ((type *)(((size_t)ptr) - offsetof(type, member)))
a0293f87   李外   1、用新写法替换所有开关总中断的语句;
13
14
15
  
  typedef struct gen_linknodebuf_STR{
  	unsigned char status;
39cd6b75   李外   V100.0.10
16
  	GenLinkNode node;
a0293f87   李外   1、用新写法替换所有开关总中断的语句;
17
18
19
20
21
22
23
24
25
26
  }GenLinkNodebuf;
  
  GenLinkNodebuf gen_linknodebuf[100]={0};
  
  GenLinkNode* gen_malloc(void)
  {
  		for(unsigned short i = 0;i < 100;i++)
  		{
  					if(gen_linknodebuf[i].status == 0 ){
  						gen_linknodebuf[i].status = 1;
39cd6b75   李外   V100.0.10
27
  						return &gen_linknodebuf[i].node;
a0293f87   李外   1、用新写法替换所有开关总中断的语句;
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
  					}
  		}
  		return NULL;
  }
  
  void gen_free(GenLinkNode * nodetemp)
  {
  		GenLinkNodebuf * temp;
  		temp = container_of(nodetemp,struct gen_linknodebuf_STR,node);
  		temp->status = 0;
  }
  
  
  
  
  
9d8bbd1c   李外   改升级前备份
44
45
  unsigned char gen_linklist__insert(GenLinkList* const list,void *pele,unsigned short index)
  {
eec54649   李外   链表 和 队列的中断保护带嵌套且用...
46
47
48
      uint8_t rtn=1;
      PLATFORM_DISABLE_IRQ();
      
6570feac   李外   V100.0.9
49
50
      if(list->length < index) 
      {
eec54649   李外   链表 和 队列的中断保护带嵌套且用...
51
          rtn = 0;
6570feac   李外   V100.0.9
52
      }
eec54649   李外   链表 和 队列的中断保护带嵌套且用...
53
54
      else
      {
a0293f87   李外   1、用新写法替换所有开关总中断的语句;
55
          //GenLinkNode *node = (GenLinkNode *)malloc(sizeof(GenLinkNode));
39cd6b75   李外   V100.0.10
56
  		GenLinkNode *node = gen_malloc();
eec54649   李外   链表 和 队列的中断保护带嵌套且用...
57
58
59
60
61
62
63
64
          if(node ==NULL)
          {
               rtn = 0;
          }
          else
          {
              node->next = NULL;
              node->pdata = pele;
9d8bbd1c   李外   改升级前备份
65
  
eec54649   李外   链表 和 队列的中断保护带嵌套且用...
66
67
              GenLinkNode *pnode_tmp= list->front;
              for(unsigned short i=0;i<index;i++){
a0293f87   李外   1、用新写法替换所有开关总中断的语句;
68
                  if(pnode_tmp!=NULL)
eec54649   李外   链表 和 队列的中断保护带嵌套且用...
69
70
71
72
73
74
75
                  pnode_tmp =pnode_tmp->next;
              }//for
              node->next =pnode_tmp->next;
              pnode_tmp->next =node;
              (list->length)++; 
          }
      }    
a0293f87   李外   1、用新写法替换所有开关总中断的语句;
76
      PLATFORM_ENABLE_IRQ();
eec54649   李外   链表 和 队列的中断保护带嵌套且用...
77
      return rtn; 
9d8bbd1c   李外   改升级前备份
78
  
9d8bbd1c   李外   改升级前备份
79
80
81
82
83
84
85
  }
  
  /* -------------- detele  ------------------------------
  * detele node at any postion
  */
  void* gen_linklist__detele(GenLinkList* const list,unsigned short index)
  {
eec54649   李外   链表 和 队列的中断保护带嵌套且用...
86
87
      void * rtn = NULL;
      PLATFORM_DISABLE_IRQ();
39cd6b75   李外   V100.0.10
88
      if(list->length <= index) 
6570feac   李外   V100.0.9
89
      {
eec54649   李外   链表 和 队列的中断保护带嵌套且用...
90
          rtn = NULL;
6570feac   李外   V100.0.9
91
      }
eec54649   李外   链表 和 队列的中断保护带嵌套且用...
92
93
94
95
      else
      {
          GenLinkNode *pnode_tmp= list->front;
          for(unsigned short i=0;i<index;i++){
a0293f87   李外   1、用新写法替换所有开关总中断的语句;
96
              if(pnode_tmp!=NULL)
eec54649   李外   链表 和 队列的中断保护带嵌套且用...
97
98
              pnode_tmp =pnode_tmp->next;
          }//for
9d8bbd1c   李外   改升级前备份
99
  
eec54649   李外   链表 和 队列的中断保护带嵌套且用...
100
          GenLinkNode *pnode_record= pnode_tmp->next;
39cd6b75   李外   V100.0.10
101
102
103
104
105
106
107
          
          if(pnode_record!=NULL)
          {
              pnode_tmp->next = pnode_tmp->next->next;
              rtn =pnode_record->pdata;
              //free(pnode_record);
  			gen_free(pnode_record);
eec54649   李外   链表 和 队列的中断保护带嵌套且用...
108
109
              if(list->length)
                  (list->length)--;
39cd6b75   李外   V100.0.10
110
111
112
113
114
115
116
          }
          else{
          
              rtn=NULL;
          
          } //
              
eec54649   李外   链表 和 队列的中断保护带嵌套且用...
117
      }
a0293f87   李外   1、用新写法替换所有开关总中断的语句;
118
      PLATFORM_ENABLE_IRQ();	
eec54649   李外   链表 和 队列的中断保护带嵌套且用...
119
      return rtn;
9d8bbd1c   李外   改升级前备份
120
121
122
123
124
125
126
  }
  
  /*-------------- get ele ------------------------------
  * get element of index;
  */
  void* gen_linklist__get_ele(GenLinkList* const list,unsigned short index)
  {
39cd6b75   李外   V100.0.10
127
      if( list->length <= index) return NULL;
9d8bbd1c   李外   改升级前备份
128
129
130
  
      GenLinkNode *pnode_tmp= list->front->next;//diff with no head
      for(unsigned short i=0;i<index;i++){
39cd6b75   李外   V100.0.10
131
  //        if(pnode_tmp->next != NULL)
9d8bbd1c   李外   改升级前备份
132
133
          pnode_tmp =pnode_tmp->next;
      }//for
39cd6b75   李外   V100.0.10
134
135
136
137
138
      
      if(pnode_tmp != NULL)
          return pnode_tmp->pdata;
      else
          return NULL;
9d8bbd1c   李外   改升级前备份
139
140
141
142
143
144
145
146
147
  }
  
  /*-------------- get len ------------------------------
  * get length of linklist 
  */
  unsigned short gen_linklist__get_len(GenLinkList* const list)
  {
      return list->length;
  }