コード例 #1
0
ファイル: twolist.c プロジェクト: jordibrus/proview
void insort(linktyp *lp, headtyp *hp, int (*is_less)(datatyp d1, datatyp d2))
/* Sätter in länken sorterad enligt is_less */
{
   linktyp *sp, *ep;

   newlink(&sp);
   *sp = *lp;
   infirst(sp, hp);
   ep = lastlink(hp);
//   if(ep == NULL) return;
   while ( is_less(lp->data, ep->data) )
      ep = predlink(ep);
   insucc(lp, ep);
   elimlink(&sp);
}
コード例 #2
0
ファイル: rt_elog.c プロジェクト: ManfredHerrmann/proview
pwr_tInt32 GetOldestEvents(pwr_tUInt32 *nrOfEvents , pwr_tUInt32 *nrOfKeys)
{
  sKey *tmpData;
  pwr_tInt32 ret;
  DBT data, key;
  DBC *dbcp;

  pwr_tUInt32 evCount = 0;
  pwr_tUInt32 tmp = 0;

  dbcp = NULL;

  /* Acquire a cursor for the database. */ 
  if ((ret = dataBaseP->cursor(dataBaseP, NULL, &dbcp, 0)) != 0) 
  { 
    errh_Error("error dataBaseP->cursor: %s\n", db_strerror(ret));
    return RT_ELOG_UNKNOWN_ERROR;
  }

  /* Initialize the key/data return pair. */
  memset(&key, 0, sizeof(key));
  memset(&data, 0, sizeof(data));
  
  /*Get the first event*/
  if((ret = dbcp->c_get(dbcp, &key, &data, DB_FIRST)) != 0)
  {
    *nrOfEvents = 0;
    return RT_ELOG_DB_EMPTY;
  }
  evCount++;

  tmpData = (sKey *)key.data;
  newlink(&lanklank);
  putlink(*tmpData, lanklank);
  insort(lanklank, listhead, &compTime);
  tmp++;

  while((ret = dbcp->c_get(dbcp, &key, &data, DB_NEXT)) == 0)
  {
    evCount++;
    
    tmpData = (sKey *)key.data;
    newlink(&lanklank);
    putlink(*tmpData, lanklank);
    insort(lanklank, listhead, &compTime);
    tmp++;
    if(nrlinks(listhead) > KEY_ARRAY_SIZE)
    {
      tmp--;
      lanklank = lastlink(listhead);
      elimlink(&lanklank);
    }
  }
    
  if(ret != DB_NOTFOUND)
  {
    errh_Error("Error dbcp->c_get(DB_NEXT): %s\n", db_strerror(ret));
    return RT_ELOG_UNKNOWN_ERROR;
  }

  /*Close the cursor*/
  if((ret = dbcp->c_close(dbcp)) != 0)
  {
    errh_Error("Error dbcp_oldest->c_close(): %s\n", db_strerror(ret));
  }
  *nrOfEvents = evCount;
  *nrOfKeys = tmp;
  return RT_ELOG_OK;
}