void schedule_remove(void (*callback)(void *p), void *p) { PblIterator *iterator; struct nscallback *nscb; bool restoreheap = false; if(schedule_list == NULL) return; if(pblHeapIsEmpty(schedule_list)) return; iterator = pblHeapIterator(schedule_list); while ((nscb = pblIteratorNext(iterator)) != -1) { if((nscb->callback == callback) && (nscb->p == p)) { ami_remove_timer_event(nscb); pblIteratorRemove(iterator); FreeVec(nscb); restoreheap = true; } }; pblIteratorFree(iterator); if(restoreheap) pblHeapConstruct(schedule_list); }
/** * Constructs a priority queue using 'bottom-up heap construction'. * * This function has a time complexity of O(N), * with N being the number of elements in the queue. * * This function together with \Ref{pblPriorityQueueAddLast}() * can be used to build a priority queue with N elements * in time proportional to N. * * First create an empty queue with \Ref{pblPriorityQueueNew}() * and ensure the queue has space for N elements via a * call to \Ref{pblPriorityQueueEnsureCapacity}(), * then add all elements via calls to \Ref{pblPriorityQueueAddLast}(), * and finally ensure the heap condition with a call * to this function. */ void pblPriorityQueueConstruct( /* */ PblPriorityQueue * queue /** The queue to use */ ) { pblHeapConstruct((PblHeap *) queue); }