void * owner(void * arg) { int i; for(i=0; i<ROUNDS; ++i) { if(nondet()) { popBottom(); } else { pushBottom(); } } }
/* Remove an item from the Deque */ bool removeItem(Deque* d, int item) { Node* h = d->head; // get pointer to head and tail of Deque Node* t = d->tail; // iterate front to back and back to front simultaneously while (true) { if (h->data == item) { // iterate forwards if (h->prev == NULL) { popTop(d); } else { Node* n = h; n->prev->next = h->next; n->next->prev = h->prev; } return true; } else if (t->data == item) { // iterate backwards if (t->next == NULL) { popBottom(d); } else { Node* n = t; n->prev->next = t->next; n->next->prev = t->prev; } return true; } h = h->next; // if pointing to same value, i.e. meet in the middle of the Deque, return if (h == t) return false; t = t->prev; // if end of deque has been reached (shouldn't occur because of if(h == t) if (h == NULL || t == NULL) return false; } return false; }