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); }
void schedule_remove_all(void) { PblIterator *iterator; struct nscallback *nscb; if(pblHeapIsEmpty(schedule_list)) return; iterator = pblHeapIterator(schedule_list); while ((nscb = pblIteratorNext(iterator)) != -1) { ami_remove_timer_event(nscb); pblIteratorRemove(iterator); FreeVec(nscb); }; pblIteratorFree(iterator); }
/** * Returns an iterator over the elements in the queue. * * The iterator starts the iteration at the element with the highest priority. * * <B>Note</B>: The memory allocated by this method for the iterator returned needs to be released * by calling \Ref{pblIteratorFree}() once the iterator is no longer needed. * * The pointers returned by the \Ref{pblIteratorNext}() or \Ref{pblIteratorPrevious}() functions * of the iterator are of type \Ref{PblPriorityQueueEntry} allowing to access priority and * element. * * Modifying the priority queue via the Iterator's own remove or add methods * does not maintain the heap property of the priority queue. * In this case the heap property has to be restored by a call * to \Ref{pblPriorityQueueConstruct}(). * * The iterators returned by the this method are fail-fast: * if the queue is structurally modified at any time after the iterator is created, * in any way except through the Iterator's own remove or add methods, * the iterator will return a PBL_ERROR_CONCURRENT_MODIFICATION error. * * Thus, in the face of concurrent modification, * the iterator fails quickly and cleanly, * rather than risking arbitrary, non-deterministic * behavior at an undetermined time in the future. * * This method has a time complexity of O(1). * * @return void * retptr != NULL: The iterator. * @return void * retptr == NULL: An error, see pbl_errno: * * <BR>PBL_ERROR_OUT_OF_MEMORY - Out of memory. */ PblIterator * pblPriorityQueueIterator( /* */ PblPriorityQueue * queue /** The queue to use */ ) { return pblHeapIterator((PblHeap *) queue); }