示例#1
0
task deQ(PQueue* pq, int taskID)
{
    int i;
    int found = 0;
    for(i = 0; i < pq->size; i++)
    {
        if (pq->queue[i].tid == taskID)
        {
            found = 1;
            break;
        }
    }
    task to_return;
    if (found && pq->size != 0)
    {
        to_return.tid = taskID;
        to_return.priority = pq->queue[i].tid;
        
        pq->queue[i].priority = 99999999;
        sortQ(pq);
        pq->size--;
        return to_return;
    }
    else
    {
        to_return.tid = -1;
        to_return.priority = -99;
        return to_return;
    }
}
示例#2
0
文件: med.c 项目: tonellotto/MED
/* loadQ:
        load qrels from a named file; sort by topic then docno
*/
static struct qrel *
loadQ (char *qrels, int *size)
{
  FILE *fp;
  char *line;
  struct qrel *q;
  int i,n = 0;

  if ((fp = fopen (qrels, "r")) == NULL)
    error ("cannot open qrels file \"%s\"\n", qrels);

  while (getLine (fp))
    n++;

  fclose (fp);

  if (n == 0)
    error ("qrel file \"%s\" is empty\n", qrels);

  q = localMalloc (n*sizeof (struct qrel));

  if ((fp = fopen (qrels, "r")) == NULL)
    error ("cannot open qrels file \"%s\"\n", qrels);

  while ((line = getLine (fp)))
    {
      char *a[4];
      int i, topic, rel;

      if (
        split (line, a, 4) != 4
        || (topic = naturalNumber (a[0])) < 0
        || (rel = naturalNumber (a[3])) < 0
      )
        error ("syntax error in qrel file \"%s\" at line %d\n", qrels, i + 1);
      else
        {
          q[i].docno = localStrdup (a[2]);
          q[i].topic = topic;
          if (rel > G)
            rel = G;
          q[i].rel = rel;
          i++;
        }
    }


  /* for each topic, verify that docnos have not been duplicated */
  sortQ (q, n);
  for (i = 1; i < n; i++)
    if (q[i].topic == q[i-1].topic && strcmp(q[i].docno,q[i-1].docno) == 0)
      error (
        "duplicate docno (%s) for topic %d in qrels file \"%s\"\n",
        q[i].docno, q[i].topic, qrels
      );

  *size = n;
  return q;
}
示例#3
0
task enQ(PQueue* pq, int t_id, int prior)
{
    pq->elements_added++;
    task to_add;
    to_add.tid = t_id;
    to_add.priority = prior;
    to_add.time_added = pq->elements_added;
    int i;
    for(i = 0; i < pq->size; i++)
    {
        if (pq->queue[i].tid == t_id)
        {
            return to_add;
        }
    }
    
    pq->queue[pq->size] = to_add;
    pq->size++;
    sortQ(pq);
    return to_add;
}