* Insert a new entry between two known consecutive entries. * * This is only for internal list manipulation where we know * the prev/next entries already! */ @ @ requires \valid(newe); @ requires \valid(prev); @ requires \valid(next); @ requires separation: \separated(newe, \union(prev,next)); @ requires prev == next || \separated(prev,next,newe); @ requires finite(prev); @ requi
| 119 | @ assigns next->prev,newe->next,newe->prev,prev->next; |
| 120 | @*/ |
| 121 | static inline void __td_list_add(struct td_list_head *newe, |
| 122 | struct td_list_head *prev, |
| 123 | struct td_list_head *next) |
| 124 | { |
| 125 | /*@ assert finite(prev); */ |
| 126 | /*@ assert finite(next); */ |
| 127 | /*@ assert reachable_forward(prev->next,prev); */ |
| 128 | /*@ assert reachable_forward(next->next,next); */ |
| 129 | /*@ assert reachable_backward(prev->prev,prev); */ |
| 130 | /*@ assert reachable_backward(next->prev,next); */ |
| 131 | |
| 132 | /*@ assert reachable_forward(next,prev); */ |
| 133 | newe->next = next; |
| 134 | newe->prev = prev; |
| 135 | prev->next = newe; |
| 136 | next->prev = newe; |
| 137 | /*@ assert next->prev == newe; */ |
| 138 | /*@ assert newe->next == next; */ |
| 139 | /*@ assert newe->prev == prev; */ |
| 140 | /*@ assert prev->next == newe; */ |
| 141 | /*@ assert reachable_forward(prev,newe); */ |
| 142 | /*@ assert reachable_backward(next,newe); */ |
| 143 | } |
| 144 | |
| 145 | /** |
| 146 | * td_list_add - add a new entry |
no outgoing calls
no test coverage detected