/*
* scamper_queue.h
*
* $Id: scamper_queue.h,v 1.5 2005/03/15 19:04:06 mjl Exp $
*
* Copyright (C) 2005 The University of Waikato
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, version 2.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#ifndef __SCAMPER_QUEUE_H
#define __SCAMPER_QUEUE_H
typedef struct scamper_queue scamper_queue_t;
/*
* a scamper task can be in one of the following queues at any one time
*
* the probe queue is for storing tasks that are ready to be probed now.
* the wait queue is for storing tasks that have to wait a particular amount
* of time before timing out and going back into the probe queue.
* the done queue is for storing tasks that have completed and will not
* go back into the probe queue. some tasks may have to spend some amount
* of time in the done queue before being taken out.
*/
int scamper_queue_probe(scamper_queue_t *queue);
int scamper_queue_wait(scamper_queue_t *queue, int msec);
int scamper_queue_done(scamper_queue_t *queue, int msec);
int scamper_queue_alloc(scamper_task_t *task);
void scamper_queue_free(scamper_queue_t *queue);
/* if a node needs to be removed from a queue, this function will do that */
void scamper_queue_detach(scamper_queue_t *queue);
/* get the next task to do something with */
struct scamper_task *scamper_queue_select(void);
/* get the next task that is completed and ready to be written out */
struct scamper_task *scamper_queue_getdone(void);
/* return the time that the first task on the queue will time out */
int scamper_queue_waittime(struct timeval *tv);
/* return the number of tasks in the various queues */
int scamper_queue_count(void);
/* return the number of tasks that are ready to be probed now */
int scamper_queue_readycount(void);
/* flush the queues of all non-completed tasks */
void scamper_queue_empty(void);
int scamper_queue_init(void);
void scamper_queue_cleanup(void);
#endif /* __SCAMPER_QUEUE_H */
syntax highlighted by Code2HTML, v. 0.9.1