コード例 #1
0
ファイル: frqueue.C プロジェクト: ralfbrown/framepac
bool FrQueue::remove(const FrObject *item)
{
   FrList *prev = 0 ;
   FrList *curr = qhead ;

   while (curr && curr->first() != item)
      {
      prev = curr ;
      curr = curr->rest() ;
      }
   if (curr)
      {
      if (prev)
	 prev->replacd(curr->rest()) ;
      else
	 qhead = curr->rest() ;
      curr->replaca(0) ;
      curr->replacd(0) ;
      delete curr ;
      qlength-- ;
      return true ;
      }
   else
      return false ;
}
コード例 #2
0
ファイル: frregexp.C プロジェクト: ralfbrown/framepac
static FrRegExElt *compile_class(const char *&re, FrList *&classes)
{
   assertq(*re == FrRE_CLASS_BEG) ;
   re++ ;
   const char *name_end = strchr(re,FrRE_CLASS_END) ;
   if (name_end)
      {
      char name[FrMAX_SYMBOLNAME_LEN+1] ;
      size_t namelen = name_end - re ;
      if (namelen >= sizeof(name))
	 namelen = sizeof(name) - 1 ;
      memcpy(name,re,namelen) ;
      name[namelen] = '\0' ;
      re = name_end + 1 ;
      FrRegExClass *class_members = new FrRegExClass ;
      if (!class_members)
	 return 0 ;			// out of memory!
      FrSymbol *namesym = FrSymbolTable::add(name) ;
      FrList *cl = (FrList*)classes->assoc(namesym) ;
      if (cl)
	 {
	 // add to list of instances of this class
	 FrList *members = cl->rest() ;
	 pushlist((FrObject*)class_members,members) ;
	 cl->replacd(members) ;
	 }
      else
	 {
	 // create a new list of class instances
	 pushlist(new FrList(namesym,(FrObject*)class_members),classes) ;
	 }
      return new FrRegExElt(class_members) ;
      }
   return 0 ;
}
コード例 #3
0
ファイル: frqueue.C プロジェクト: ralfbrown/framepac
void FrQueue::addFront(const FrObject *item, bool do_copy)
{
   FrList *newitem = new FrList ;
   newitem->replaca((item && do_copy) ? item->deepcopy() : item) ;
   newitem->replacd(qhead) ;
   if (qhead)
      qhead = newitem ;
   else
      qhead = qtail = newitem ;
   qlength++ ;
}