/* Syfte: L�gga till ett v�rde p� r�tt st�lle utifr�n sin prioritet i priok�n Parametrar: q - priok�n (pqueue *) d- v�rdet som ska l�ggas till (data) Kommentarer: */ void pqueue_insert(pqueue *q,data d){ MyPQ *prioq = (MyPQ*)q; int placed = 0; list_position pos =list_first(prioq->pq); if (list_isEmpty(prioq->pq)){ list_insert(prioq->pq, d, list_first(prioq->pq)); }else{ while(!placed && pos!=list_end(prioq->pq)){ if(prioq->cf(d, list_inspect(prioq->pq, pos))){ placed = 1; list_insert(prioq->pq, d, pos); } pos = list_next(prioq->pq, pos); } if (!placed){ list_insert(prioq->pq, d, pos); } } }
/* Syfte: Hämtar första värdet i kön Parametrar: q - Kön (queue *) Returvärde: värdet som fanns längst fram i kön Kommentarer: ej definierad för tom kö. */ data queue_front(queue *q) { return list_inspect(q,list_first(q)); }
/* Syfte: H�mtar f�rsta v�rdet i priok�n Parametrar: q - priok�n (pqueue *) Returv�rde: v�rdet som fanns l�ngst ram i priok�n Kommentarer: ej definierad f�r tom priok�. */ data pqueue_inspect_first(pqueue *q){ MyPQ *prioq = (MyPQ*)q; return list_inspect(prioq->pq,list_first(prioq->pq)); }