示例#1
0
vmenu2_ptr VMenu2::create(const string& Title, const MenuDataEx *Data, size_t ItemCount, int MaxHeight, DWORD Flags)
{
	vmenu2_ptr VMenu2Ptr(new VMenu2(MaxHeight));

	VMenu2Ptr->InitDialogObjects();
	VMenu2Ptr->SetMacroMode(MACROAREA_MENU);

	VMenu2Ptr->SetDialogMode(DMODE_KEEPCONSOLETITLE | DMODE_ISMENU);

	VMenu2Ptr->SetTitle(Title);
	VMenu2Ptr->SendMessage(DM_SETINPUTNOTIFY, 1, nullptr);

	std::vector<FarListItem> fli(ItemCount);
	std::transform(Data, Data + ItemCount, fli.begin(), [](const MenuDataEx& i)->FarListItem
	{
		FarListItem Item = {i.Flags, i.Name};
		return Item;
	});

	FarList fl={sizeof(FarList), ItemCount, fli.data()};

	VMenu2Ptr->SendMessage(DM_LISTSET, 0, &fl);

	for(size_t i=0; i<ItemCount; ++i)
		VMenu2Ptr->GetItemPtr(static_cast<int>(i))->AccelKey = Data[i].AccelKey;

	// BUGBUG
	VMenu2Ptr->Dialog::SetPosition(-1, -1, 20, 20);
	VMenu2Ptr->SetMenuFlags(Flags | VMENU_MOUSEREACTION);
	VMenu2Ptr->Resize();
	return VMenu2Ptr;
}
示例#2
0
/** Computes the dependencies between directories
 */
void DirDef::computeDependencies()
{
  FileList *fl = m_fileList;
  if (fl) 
  {
    QListIterator<FileDef> fli(*fl);
    FileDef *fd;
    for (fli.toFirst();(fd=fli.current());++fli) // foreach file in dir dd
    {
      //printf("  File %s\n",fd->name().data());
      //printf("** dir=%s file=%s\n",shortName().data(),fd->name().data());
      QList<IncludeInfo> *ifl = fd->includeFileList();
      if (ifl)
      {
        QListIterator<IncludeInfo> ifli(*ifl); 
        IncludeInfo *ii;
        for (ifli.toFirst();(ii=ifli.current());++ifli) // foreach include file
        {
          //printf("  > %s\n",ii->includeName.data());
          //printf("    #include %s\n",ii->includeName.data());
          if (ii->fileDef && ii->fileDef->isLinkable()) // linkable file
          {
            DirDef *usedDir = ii->fileDef->getDirDef();
            if (usedDir)
            {
              // add dependency: thisDir->usedDir
              //static int count=0;
              //printf("      %d: add dependency %s->%s\n",count++,name().data(),usedDir->name().data());
              addUsesDependency(usedDir,fd,ii->fileDef,FALSE);
            }
          }
        }
      }
    }
  }
  if (m_usedDirs)
  {
    QDictIterator<UsedDir> udi(*m_usedDirs);
    UsedDir *udir;
    for (udi.toFirst();(udir=udi.current());++udi)
    {
      udir->sort();
    }
  }
}
示例#3
0
文件: mbu.cpp 项目: igstan/rtc
//-- print number of CFG nodes, max and average fact size
void MBU::print_debug_stats(CFG& cfg, FILE * outf)
{
  int num_nodes = 0;
  int tot_facts = 0;
  int max_facts = 0;

  suco_iterator<CFGfunction *> fli(cfg.getFunctionList());
  while(fli.Iterate()){
    if(flag_use_bblocks){
      suco_iterator<CFGbblock *> bbi(fli.Current()->getBBlist());
      while(bbi.Iterate()){
        CFGbblock& bb = *bbi.Current();
        //-- count facts
        MBUfact& mf = bb.getMBUfact();
        int len = mf.length();
        num_nodes++;
        tot_facts += len;
        if(max_facts < len){
          max_facts = len;
        }
      }
    } else {
      suco_iterator<PgmStmt *> sti(fli.Current()->getStmtList());
      while(sti.Iterate()){
        PgmStmt& st = *sti.Current();
        //-- count facts
        MBUfact& mf = st.getMBUfact();
        int len = mf.length();
        num_nodes++;
        tot_facts += len;
        if(max_facts < len){
          max_facts = len;
        }
      }
    }
  }

  if(flag_verbose == 4){
    static fmapentry * func_map = 0;
    static int num_funcs = 0;
    int i;

    if(!func_map){
      //-- one-time initialization of func_map
      num_funcs = cfg.getFunctionList().Length();
      func_map = new struct fmapentry[num_funcs];
      for(i = 0; i < num_funcs; ++i){
        func_map[i].fptr = 0;
        func_map[i].count = 0;
        func_map[i].oldcount = 0;
      }
    }
    for(i = 0; i < num_funcs; ++i){
      func_map[i].oldcount = func_map[i].count;
      func_map[i].count = 0;
    }

    suco_iterator<CFGnode *> wli(this->worklist.list);
    while(wli.Iterate()){
      CFGfunction * fptr = &wli.Current()->getParentFunction();
      for(i = 0; i < num_funcs; ++i){
        if(!func_map[i].fptr){
          func_map[i].fptr = fptr;
          func_map[i].count = 1;
          break;
        } else if(func_map[i].fptr == fptr){
          func_map[i].count++;
          break;
        }
      }
    }

    qsort(func_map, num_funcs, sizeof(struct fmapentry), fme_compare);

    int mode = 0;
    fprintf(outf, "Worklist content: top 5 functions:\n\t");
    for(i = 0; i < num_funcs && func_map[i].count; ++i){
      if(i == 5){ // switch mode to active delta
        mode = 1;
        fprintf(outf, "\nRemaining active with deltas:");
      }
      if(mode == 0){
        fprintf(outf, " %s(%d/%d)", func_map[i].fptr->getId().getPid().getname(),
				  func_map[i].count, func_map[i].count - func_map[i].oldcount);
      } else if(func_map[i].count - func_map[i].oldcount){
        if(!((mode-1) % 5)) fprintf(outf, "\n\t");
        mode++;
        fprintf(outf, " %s(%d/%d)", func_map[i].fptr->getId().getPid().getname(),
				  func_map[i].count, func_map[i].count - func_map[i].oldcount);
      }
    }
    fprintf(outf, "\n");
  }

  fprintf(outf, "Facts: total %d, per %s %.2f, max = %d\n",
		tot_facts, flag_use_bblocks?"bblock":"stmt",
		(num_nodes)?((float)tot_facts/(float)num_nodes):((float)tot_facts),
		max_facts);
}