void addGroupToGroups(Entry *root,GroupDef *subGroup) { //printf("addGroupToGroups for %s groups=%d\n",root->name.data(), // root->groups?root->groups->count():-1); QListIterator<Grouping> gli(*root->groups); Grouping *g; for (;(g=gli.current());++gli) { GroupDef *gd=0; if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname))) { if (gd==subGroup) { warn(root->fileName,root->startLine,"Refusing to add group %s to itself", gd->name().data()); } else if (subGroup->findGroup(gd)) { warn(root->fileName,root->startLine,"Refusing to add group %s to group %s, since the latter is already a " "subgroup of the former\n", subGroup->name().data(),gd->name().data()); } else if (!gd->findGroup(subGroup)) { gd->addGroup(subGroup); subGroup->makePartOfGroup(gd); } } } }
void addClassToGroups(Entry *root,ClassDef *cd) { QListIterator<Grouping> gli(*root->groups); Grouping *g; for (;(g=gli.current());++gli) { GroupDef *gd=0; if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname))) { if (gd->addClass(cd)) cd->makePartOfGroup(gd); //printf("Compound %s: in group %s\n",cd->name().data(),s->data()); } } }
void addExampleToGroups(Entry *root,PageDef *eg) { QListIterator<Grouping> gli(*root->groups); Grouping *g; for (;(g=gli.current());++gli) { GroupDef *gd=0; if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname))) { gd->addExample(eg); eg->makePartOfGroup(gd); //printf("Example %s: in group %s\n",eg->name().data(),s->data()); } } }
void addGroupToGroups(Entry *root,GroupDef *subGroup) { QListIterator<Grouping> gli(*root->groups); Grouping *g; for (; (g=gli.current()); ++gli) { GroupDef *gd=0; if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict[g->groupname]) && !gd->containsGroup(subGroup) ) { gd->addGroup(subGroup); subGroup->makePartOfGroup(gd); } } }
void addNamespaceToGroups(Entry *root,NamespaceDef *nd) { //printf("root->groups->count()=%d\n",root->groups->count()); QListIterator<Grouping> gli(*root->groups); Grouping *g; for (;(g=gli.current());++gli) { GroupDef *gd=0; //printf("group `%s'\n",s->data()); if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname))) { if (gd->addNamespace(nd)) nd->makePartOfGroup(gd); //printf("Namespace %s: in group %s\n",nd->name().data(),s->data()); } } }
void addDirToGroups(Entry *root,DirDef *dd) { //printf("*** root->groups->count()=%d\n",root->groups->count()); QListIterator<Grouping> gli(*root->groups); Grouping *g; for (;(g=gli.current());++gli) { GroupDef *gd=0; //printf("group `%s'\n",g->groupname.data()); if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname))) { gd->addDir(dd); dd->makePartOfGroup(gd); //printf("Dir %s: in group %s\n",dd->name().data(),g->groupname.data()); } } }
void marshalGroupList(StorageIntf *s,GroupList *groupList) { if (groupList==0) { marshalUInt(s,NULL_LIST); // null pointer representation } else { marshalUInt(s,groupList->count()); QListIterator<GroupDef> gli(*groupList); GroupDef *gd=0; for (gli.toFirst();(gd=gli.current());++gli) { marshalObjPointer(s,gd); } } }
void marshalGroupingList(StorageIntf *s, QList<Grouping> *groups) { if (groups==0) { marshalUInt(s,NULL_LIST); // null pointer representation } else { marshalUInt(s,groups->count()); QListIterator<Grouping> gli(*groups); Grouping *g; for (gli.toFirst();(g=gli.current());++gli) { marshalQCString(s,g->groupname); marshalInt(s,(int)g->pri); } } }
void addGroupToGroups(Entry *root,GroupDef *subGroup) { //printf("addGroupToGroups for %s groups=%d\n",root->name.data(), // root->groups?root->groups->count():-1); QListIterator<Grouping> gli(*root->groups); Grouping *g; for (;(g=gli.current());++gli) { GroupDef *gd=0; if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)) && !gd->containsGroup(subGroup) ) { gd->addGroup(subGroup); subGroup->makePartOfGroup(gd); } else if (gd==subGroup) { warn(root->fileName,root->startLine,"Trying to add group %s to itself!", gd->name().data()); } } }
Entry::Entry(const Entry &e) { //printf("Entry::Entry(%p):copy\n",this); num++; section = e.section; type = e.type; name = e.name; tagInfo = e.tagInfo; protection = e.protection; mtype = e.mtype; spec = e.spec; initLines = e.initLines; stat = e.stat; localToc = e.localToc; explicitExternal = e.explicitExternal; proto = e.proto; subGrouping = e.subGrouping; callGraph = e.callGraph; callerGraph = e.callerGraph; virt = e.virt; args = e.args; bitfields = e.bitfields; argList = e.argList->deepCopy(); tArgLists = 0; program = e.program; initializer = e.initializer; includeFile = e.includeFile; includeName = e.includeName; doc = e.doc; docLine = e.docLine; docFile = e.docFile; brief = e.brief; briefLine = e.briefLine; briefFile = e.briefFile; inbodyDocs = e.inbodyDocs; inbodyLine = e.inbodyLine; inbodyFile = e.inbodyFile; relates = e.relates; relatesType = e.relatesType; read = e.read; write = e.write; inside = e.inside; exception = e.exception; typeConstr = 0; bodyLine = e.bodyLine; endBodyLine = e.endBodyLine; mGrpId = e.mGrpId; extends = new QList<BaseInfo>; extends->setAutoDelete(TRUE); groups = new QList<Grouping>; groups->setAutoDelete(TRUE); anchors = new QList<SectionInfo>; fileName = e.fileName; startLine = e.startLine; startColumn = e.startColumn; if (e.sli) { sli = new QList<ListItemInfo>; sli->setAutoDelete(TRUE); QListIterator<ListItemInfo> slii(*e.sli); ListItemInfo *ili; for (slii.toFirst();(ili=slii.current());++slii) { sli->append(new ListItemInfo(*ili)); } } else { sli=0; } lang = e.lang; hidden = e.hidden; artificial = e.artificial; groupDocType = e.groupDocType; id = e.id; m_parent = e.m_parent; m_sublist = new QList<Entry>; m_sublist->setAutoDelete(TRUE); // deep copy of the child entry list QListIterator<Entry> eli(*e.m_sublist); Entry *cur; for (;(cur=eli.current());++eli) { m_sublist->append(new Entry(*cur)); } // deep copy base class list QListIterator<BaseInfo> bli(*e.extends); BaseInfo *bi; for (;(bi=bli.current());++bli) { extends->append(new BaseInfo(*bi)); } // deep copy group list QListIterator<Grouping> gli(*e.groups); Grouping *g; for (;(g=gli.current());++gli) { groups->append(new Grouping(*g)); } QListIterator<SectionInfo> sli2(*e.anchors); SectionInfo *s; for (;(s=sli2.current());++sli2) { anchors->append(new SectionInfo(*s)); } // deep copy type constraint list if (e.typeConstr) { typeConstr = e.typeConstr->deepCopy(); } // deep copy template argument lists if (e.tArgLists) { tArgLists = copyArgumentLists(e.tArgLists); } }
/*! Add a member to the group with the highest priority */ void addMemberToGroups(Entry *root,MemberDef *md) { //printf("addMemberToGroups: Root %p = %s, md %p=%s groups=%d\n", // root, root->name.data(), md, md->name().data(), root->groups->count() ); QListIterator<Grouping> gli(*root->groups); Grouping *g; // Search entry's group list for group with highest pri. Grouping::GroupPri_t pri = Grouping::GROUPING_LOWEST; GroupDef *fgd=0; for (;(g=gli.current());++gli) { GroupDef *gd=0; if (!g->groupname.isEmpty() && (gd=Doxygen::groupSDict->find(g->groupname)) && g->pri >= pri) { if (fgd && gd!=fgd && g->pri==pri) { warn(root->fileName.data(), root->startLine, "warning: Member %s found in multiple %s groups! " "The member will be put in group %s, and not in group %s", md->name().data(), Grouping::getGroupPriName( pri ), gd->name().data(), fgd->name().data() ); } fgd = gd; pri = g->pri; } } //printf("fgd=%p\n",fgd); // put member into group defined by this entry? if (fgd) { GroupDef *mgd = md->getGroupDef(); //printf("mgd=%p\n",mgd); bool insertit = FALSE; if (mgd==0) { insertit = TRUE; } else if (mgd!=fgd) { bool moveit = FALSE; // move member from one group to another if // - the new one has a higher priority // - the new entry has the same priority, but with docs where the old one had no docs if (md->getGroupPri()<pri) { moveit = TRUE; } else { if (md->getGroupPri()==pri) { if (!root->doc.isEmpty() && !md->getGroupHasDocs()) { moveit = TRUE; } else if (!root->doc.isEmpty() && md->getGroupHasDocs()) { warn(md->getGroupFileName(),md->getGroupStartLine(), "warning: Member documentation for %s found several times in %s groups!\n" "%s:%d: The member will remain in group %s, and won't be put into group %s", md->name().data(), Grouping::getGroupPriName( pri ), root->fileName.data(), root->startLine, mgd->name().data(), fgd->name().data() ); } } } if (moveit) { //printf("removeMember\n"); mgd->removeMember(md); insertit = TRUE; } } if (insertit) { //printf("insertMember found at %s line %d: %s: related %s\n", // md->getDefFileName().data(),md->getDefLine(), // md->name().data(),root->relates.data()); bool success = fgd->insertMember(md); if (success) { //printf("insertMember successful\n"); md->setGroupDef(fgd,pri,root->fileName,root->startLine, !root->doc.isEmpty()); ClassDef *cd = md->getClassDefOfAnonymousType(); if (cd) { cd->setGroupDefForAllMembers(fgd,pri,root->fileName,root->startLine,root->doc.length() != 0); } } } } }
void CGameListCtrl::ScanForISOs() { ClearIsoFiles(); CFileSearch::XStringVector Directories(SConfig::GetInstance().m_ISOFolder); if (SConfig::GetInstance().m_RecursiveISOFolder) { for (u32 i = 0; i < Directories.size(); i++) { File::FSTEntry FST_Temp; File::ScanDirectoryTree(Directories[i], FST_Temp); for (u32 j = 0; j < FST_Temp.children.size(); j++) { if (FST_Temp.children[j].isDirectory) { bool duplicate = false; for (u32 k = 0; k < Directories.size(); k++) { if (strcmp(Directories[k].c_str(), FST_Temp.children[j].physicalName.c_str()) == 0) { duplicate = true; break; } } if (!duplicate) Directories.push_back( FST_Temp.children[j].physicalName.c_str()); } } } } CFileSearch::XStringVector Extensions; if (SConfig::GetInstance().m_ListGC) Extensions.push_back("*.gcm"); if (SConfig::GetInstance().m_ListWii || SConfig::GetInstance().m_ListGC) { Extensions.push_back("*.iso"); Extensions.push_back("*.ciso"); Extensions.push_back("*.gcz"); Extensions.push_back("*.wbfs"); } if (SConfig::GetInstance().m_ListWad) Extensions.push_back("*.wad"); CFileSearch FileSearch(Extensions, Directories); const CFileSearch::XStringVector& rFilenames = FileSearch.GetFileNames(); if (rFilenames.size() > 0) { wxProgressDialog dialog( _("Scanning for ISOs"), _("Scanning..."), (int)rFilenames.size() - 1, this, wxPD_APP_MODAL | wxPD_AUTO_HIDE | wxPD_CAN_ABORT | wxPD_ELAPSED_TIME | wxPD_ESTIMATED_TIME | wxPD_REMAINING_TIME | wxPD_SMOOTH // - makes updates as small as possible (down to 1px) ); for (u32 i = 0; i < rFilenames.size(); i++) { std::string FileName; SplitPath(rFilenames[i], NULL, &FileName, NULL); // Update with the progress (i) and the message dialog.Update(i, wxString::Format(_("Scanning %s"), wxString(FileName.c_str(), *wxConvCurrent).c_str())); if (dialog.WasCancelled()) break; std::auto_ptr<GameListItem> iso_file(new GameListItem(rFilenames[i])); const GameListItem& ISOFile = *iso_file; if (ISOFile.IsValid()) { bool list = true; switch(ISOFile.GetPlatform()) { case GameListItem::WII_DISC: if (!SConfig::GetInstance().m_ListWii) list = false; break; case GameListItem::WII_WAD: if (!SConfig::GetInstance().m_ListWad) list = false; break; default: if (!SConfig::GetInstance().m_ListGC) list = false; break; } switch(ISOFile.GetCountry()) { case DiscIO::IVolume::COUNTRY_TAIWAN: if (!SConfig::GetInstance().m_ListTaiwan) list = false; case DiscIO::IVolume::COUNTRY_KOREA: if (!SConfig::GetInstance().m_ListKorea) list = false; break; case DiscIO::IVolume::COUNTRY_JAPAN: if (!SConfig::GetInstance().m_ListJap) list = false; break; case DiscIO::IVolume::COUNTRY_USA: if (!SConfig::GetInstance().m_ListUsa) list = false; break; case DiscIO::IVolume::COUNTRY_FRANCE: if (!SConfig::GetInstance().m_ListFrance) list = false; break; case DiscIO::IVolume::COUNTRY_ITALY: if (!SConfig::GetInstance().m_ListItaly) list = false; break; default: if (!SConfig::GetInstance().m_ListPal) list = false; break; } if (list) m_ISOFiles.push_back(iso_file.release()); } } } if (SConfig::GetInstance().m_ListDrives) { const std::vector<std::string> drives = cdio_get_devices(); for (std::vector<std::string>::const_iterator iter = drives.begin(); iter != drives.end(); ++iter) { #ifdef __APPLE__ std::auto_ptr<GameListItem> gli(new GameListItem(*iter)); #else std::unique_ptr<GameListItem> gli(new GameListItem(*iter)); #endif if (gli->IsValid()) m_ISOFiles.push_back(gli.release()); } } std::sort(m_ISOFiles.begin(), m_ISOFiles.end()); }
Entry::Entry(const Entry &e) { num++; section = e.section; protection = e.protection; mtype = e.mtype; stat = e.stat; explicitExternal = e.explicitExternal; virt = e.virt; parent = e.parent; type = e.type.copy(); name = e.name.copy(); args = e.args.copy(); bitfields = e.bitfields.copy(); exception = e.exception.copy(); program = e.program.copy(); includeFile = e.includeFile.copy(); includeName = e.includeFile.copy(); doc = e.doc.copy(); docLine = e.docLine; docFile = e.docFile.copy(); relates = e.relates.copy(); relatesDup = e.relatesDup; read = e.read.copy(); write = e.write.copy(); brief = e.brief.copy(); briefLine = e.briefLine; briefFile = e.briefFile.copy(); inbodyDocs = e.inbodyDocs.copy(); inbodyLine = e.inbodyLine; inbodyFile = e.inbodyFile.copy(); inside = e.inside.copy(); fileName = e.fileName.copy(); startLine = e.startLine; mGrpId = e.mGrpId; bodyLine = e.bodyLine; endBodyLine = e.endBodyLine; memSpec = e.memSpec; initializer = e.initializer; initLines = e.initLines; callGraph = e.callGraph; callerGraph = e.callerGraph; objc = e.objc; tagInfo = e.tagInfo; hidden = e.hidden; sublist = new QList<Entry>; sublist->setAutoDelete(TRUE); extends = new QList<BaseInfo>; extends->setAutoDelete(TRUE); groups = new QList<Grouping>; groups->setAutoDelete(TRUE); anchors = new QList<SectionInfo>; argList = new ArgumentList; argList->setAutoDelete(TRUE); tArgLists = 0; groupDocType = e.groupDocType; // deep copy of the child entry list QListIterator<Entry> eli(*e.sublist); Entry *cur; for (;(cur=eli.current());++eli) { sublist->append(new Entry(*cur)); } // deep copy base class list QListIterator<BaseInfo> bli(*e.extends); BaseInfo *bi; for (;(bi=bli.current());++bli) { extends->append(new BaseInfo(*bi)); } // deep copy group list QListIterator<Grouping> gli(*e.groups); Grouping *g; for (;(g=gli.current());++gli) { groups->append(new Grouping(*g)); } QListIterator<SectionInfo> sli2(*e.anchors); SectionInfo *s; for (;(s=sli2.current());++sli2) { anchors->append(new SectionInfo(*s)); } // deep copy argument list QListIterator<Argument> ali(*e.argList); Argument *a; for (;(a=ali.current());++ali) { argList->append(new Argument(*a)); } argList->constSpecifier = e.argList->constSpecifier; argList->volatileSpecifier = e.argList->volatileSpecifier; argList->pureSpecifier = e.argList->pureSpecifier; // deep copy template argument lists if (e.tArgLists) { tArgLists = copyArgumentLists(e.tArgLists); } if (e.sli) { sli = new QList<ListItemInfo>; sli->setAutoDelete(TRUE); QListIterator<ListItemInfo> slii(*e.sli); ListItemInfo *ili; for (slii.toFirst();(ili=slii.current());++slii) { sli->append(new ListItemInfo(*ili)); } } else { sli=0; } }
void generateSqlite3() { // + classes // + namespaces // + files // + groups // + related pages // + examples // + main page QCString outputDirectory = Config_getString("OUTPUT_DIRECTORY"); QDir sqlite3Dir(outputDirectory); sqlite3 *db; sqlite3_initialize(); int rc = sqlite3_open_v2(outputDirectory+"/doxygen_sqlite3.db", &db, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0); if (rc != SQLITE_OK) { sqlite3_close(db); msg("database open failed: %s\n", "doxygen_sqlite3.db"); return; } beginTransaction(db); pragmaTuning(db); if (-1==initializeSchema(db)) return; if ( -1 == prepareStatements(db) ) { err("sqlite generator: prepareStatements failed!"); return; } // + classes ClassSDict::Iterator cli(*Doxygen::classSDict); ClassDef *cd; for (cli.toFirst();(cd=cli.current());++cli) { msg("Generating Sqlite3 output for class %s\n",cd->name().data()); generateSqlite3ForClass(db,cd); } // + namespaces NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict); NamespaceDef *nd; for (nli.toFirst();(nd=nli.current());++nli) { msg("Generating Sqlite3 output for namespace %s\n",nd->name().data()); generateSqlite3ForNamespace(db,nd); } // + files FileNameListIterator fnli(*Doxygen::inputNameList); FileName *fn; for (;(fn=fnli.current());++fnli) { FileNameIterator fni(*fn); FileDef *fd; for (;(fd=fni.current());++fni) { msg("Generating Sqlite3 output for file %s\n",fd->name().data()); generateSqlite3ForFile(db,fd); } } // + groups GroupSDict::Iterator gli(*Doxygen::groupSDict); GroupDef *gd; for (;(gd=gli.current());++gli) { msg("Generating Sqlite3 output for group %s\n",gd->name().data()); generateSqlite3ForGroup(db,gd); } // + page { PageSDict::Iterator pdi(*Doxygen::pageSDict); PageDef *pd=0; for (pdi.toFirst();(pd=pdi.current());++pdi) { msg("Generating Sqlite3 output for page %s\n",pd->name().data()); generateSqlite3ForPage(db,pd,FALSE); } } // + dirs { DirDef *dir; DirSDict::Iterator sdi(*Doxygen::directories); for (sdi.toFirst();(dir=sdi.current());++sdi) { msg("Generating Sqlite3 output for dir %s\n",dir->name().data()); generateSqlite3ForDir(db,dir); } } // + examples { PageSDict::Iterator pdi(*Doxygen::exampleSDict); PageDef *pd=0; for (pdi.toFirst();(pd=pdi.current());++pdi) { msg("Generating Sqlite3 output for example %s\n",pd->name().data()); generateSqlite3ForPage(db,pd,TRUE); } } // + main page if (Doxygen::mainPage) { msg("Generating Sqlite3 output for the main page\n"); generateSqlite3ForPage(db,Doxygen::mainPage,FALSE); } endTransaction(db); }