void marshalArgumentList(StorageIntf *s,ArgumentList *argList) { if (argList==0) { marshalUInt(s,NULL_LIST); // null pointer representation } else { marshalUInt(s,argList->count()); if (argList->count()>0) { ArgumentListIterator ali(*argList); Argument *a; for (ali.toFirst();(a=ali.current());++ali) { marshalQCString(s,a->attrib); marshalQCString(s,a->type); marshalQCString(s,a->canType); marshalQCString(s,a->name); marshalQCString(s,a->array); marshalQCString(s,a->defval); marshalQCString(s,a->docs); } } marshalBool(s,argList->constSpecifier); marshalBool(s,argList->volatileSpecifier); marshalBool(s,argList->pureSpecifier); } }
/*! the argument list is documented if one of its * arguments is documented */ bool ArgumentList::hasDocumentation() const { bool hasDocs=FALSE; ArgumentListIterator ali(*this); Argument *a; for (ali.toFirst();!hasDocs && (a=ali.current());++ali) { hasDocs = hasDocs || a->hasDocumentation(); } return hasDocs; }
void align_template(Iterator begin, Iterator end, int gap, score_matrix const & matrix, Callable & callfunc) { typedef std::pair<std::string, simple_matrix2i> node_cache_type; std::string query(begin, end); alicont ali(query, gap, matrix); trie<node_cache_type>* tmp; copyTrie(&tmp); std::string target; std::stack<size_t> index_stack; for (trie<node_cache_type>::iterator i = tmp->begin() + 1; i != tmp->end(); ++i) { target.push_back(i.symbol()); if (!index_stack.empty() && i.prev().fork() && i.prev().index() != index_stack.top()) { while (!index_stack.empty() && index_stack.top() != i.prev().index()) { *(tmp->iter(index_stack.top())) = node_cache_type(); index_stack.pop(); ali.pop(); } } if (i.leaf()) { *i = std::move(std::make_pair(target, ali.score(target))); ali.push(i->first, &(i->second)); index_stack.push(i.index()); target.clear(); alignment_result res = ali.alignment(); res.target_id = iter(i.index())->back().record; if (!callfunc(std::move(res))) { break; } } else if (i.fork()) { *i = std::move(std::make_pair(target, ali.score(target))); ali.push(i->first, &(i->second)); index_stack.push(i.index()); target.clear(); } } delete tmp; }
void marshalArgumentLists(StorageIntf *s,QList<ArgumentList> *argLists) { if (argLists==0) { marshalUInt(s,NULL_LIST); // null pointer representation } else { marshalUInt(s,argLists->count()); QListIterator<ArgumentList> ali(*argLists); ArgumentList *al; for (ali.toFirst();(al=ali.current());++ali) { marshalArgumentList(s,al); } } }
ArgumentList *ArgumentList::deepCopy() const { ArgumentList *argList = new ArgumentList; argList->setAutoDelete(TRUE); QListIterator<Argument> ali(*this); Argument *a; for (;(a=ali.current());++ali) { argList->append(new Argument(*a)); } argList->constSpecifier = constSpecifier; argList->volatileSpecifier = volatileSpecifier; argList->pureSpecifier = pureSpecifier; argList->trailingReturnType = trailingReturnType; argList->isDeleted = isDeleted; return argList; }
static void writeTemplateArgumentList(sqlite3* /*db*/, ArgumentList * /*al*/, Definition * /*scope*/, FileDef * /*fileScope*/, int /*indent*/) { #if 0 QCString indentStr; indentStr.fill(' ',indent); if (al) { t << indentStr << "<templateparamlist>" << endl; ArgumentListIterator ali(*al); Argument *a; for (ali.toFirst();(a=ali.current());++ali) { t << indentStr << " <param>" << endl; if (!a->type.isEmpty()) { t << indentStr << " <type>"; linkifyText(TextGeneratorXMLImpl(t),scope,fileScope,0,a->type); t << "</type>" << endl; } if (!a->name.isEmpty()) { t << indentStr << " <declname>" << a->name << "</declname>" << endl; t << indentStr << " <defname>" << a->name << "</defname>" << endl; } if (!a->defval.isEmpty()) { t << indentStr << " <defval>"; linkifyText(TextGeneratorXMLImpl(t),scope,fileScope,0,a->defval); t << "</defval>" << endl; } t << indentStr << " </param>" << endl; } t << indentStr << "</templateparamlist>" << endl; } #endif }
void generateDEFForMember(MemberDef *md, FTextStream &t, Definition *def, const char* Prefix) { QCString memPrefix; // + declaration // - reimplements // - reimplementedBy // - exceptions // - const/volatile specifiers // - examples // + source definition // - source references // - source referenced by // - include code if (md->memberType()==MemberDef::EnumValue) return; QCString scopeName; if (md->getClassDef()) scopeName=md->getClassDef()->name(); else if (md->getNamespaceDef()) scopeName=md->getNamespaceDef()->name(); t << " " << Prefix << "-member = {" << endl; memPrefix = " "; memPrefix.append( Prefix ); memPrefix.append( "-mem-" ); QCString memType; bool isFunc=FALSE; switch (md->memberType()) { case MemberDef::Define: memType="define"; break; case MemberDef::EnumValue: ASSERT(0); break; case MemberDef::Property: memType="property"; break; case MemberDef::Event: memType="event"; break; case MemberDef::Variable: memType="variable"; break; case MemberDef::Typedef: memType="typedef"; break; case MemberDef::Enumeration: memType="enum"; break; case MemberDef::Function: memType="function"; isFunc=TRUE; break; case MemberDef::Signal: memType="signal"; isFunc=TRUE; break; case MemberDef::Friend: memType="friend"; isFunc=TRUE; break; case MemberDef::DCOP: memType="dcop"; isFunc=TRUE; break; case MemberDef::Slot: memType="slot"; isFunc=TRUE; break; } t << memPrefix << "kind = '" << memType << "';" << endl; t << memPrefix << "id = '" << md->getOutputFileBase() << "_1" << md->anchor() << "';" << endl; t << memPrefix << "virt = "; switch (md->virtualness()) { case Normal: t << "normal;" << endl; break; case Virtual: t << "virtual;" << endl; break; case Pure: t << "pure-virtual;" << endl; break; default: ASSERT(0); } t << memPrefix << "prot = "; switch(md->protection()) { case Public: t << "public;" << endl; break; case Protected: t << "protected;" << endl; break; case Private: t << "private;" << endl; break; case Package: t << "package;" << endl; break; } if (md->memberType()!=MemberDef::Define && md->memberType()!=MemberDef::Enumeration ) { QCString typeStr = replaceAnonymousScopes(md->typeString()); t << memPrefix << "type = <<_EnD_oF_dEf_TeXt_" << endl << typeStr << endl << "_EnD_oF_dEf_TeXt_;" << endl; } t << memPrefix << "name = '" << md->name() << "';" << endl; if (isFunc) //function { ArgumentList *declAl = new ArgumentList; LockingPtr<ArgumentList> defAl = md->argumentList(); stringToArgumentList(md->argsString(),declAl); QCString fcnPrefix = " " + memPrefix + "param-"; if (declAl->count()>0) { ArgumentListIterator declAli(*declAl); ArgumentListIterator defAli(*defAl); Argument *a; for (declAli.toFirst();(a=declAli.current());++declAli) { Argument *defArg = defAli.current(); t << memPrefix << "param = {" << endl; if (!a->attrib.isEmpty()) { t << fcnPrefix << "attributes = "; writeDEFString(t,a->attrib); t << ';' << endl; } if (!a->type.isEmpty()) { t << fcnPrefix << "type = <<_EnD_oF_dEf_TeXt_" << endl << a->type << endl << "_EnD_oF_dEf_TeXt_;" << endl; } if (!a->name.isEmpty()) { t << fcnPrefix << "declname = "; writeDEFString(t,a->name); t << ';' << endl; } if (defArg && !defArg->name.isEmpty() && defArg->name!=a->name) { t << fcnPrefix << "defname = "; writeDEFString(t,defArg->name); t << ';' << endl; } if (!a->array.isEmpty()) { t << fcnPrefix << "array = "; writeDEFString(t,a->array); t << ';' << endl; } if (!a->defval.isEmpty()) { t << fcnPrefix << "defval = <<_EnD_oF_dEf_TeXt_" << endl << a->defval << endl << "_EnD_oF_dEf_TeXt_;" << endl; } if (defArg) ++defAli; t << " }; /*" << fcnPrefix << "-param */" << endl; } } delete declAl; } else if ( md->memberType()==MemberDef::Define && md->argsString()!=0) { ArgumentListIterator ali(*md->argumentList()); Argument *a; QCString defPrefix = " " + memPrefix + "def-"; for (ali.toFirst();(a=ali.current());++ali) { t << memPrefix << "param = {" << endl; t << defPrefix << "name = '" << a->type << "';" << endl; t << " }; /*" << defPrefix << "-param */" << endl; } } if (!md->initializer().isEmpty()) { t << memPrefix << "initializer = <<_EnD_oF_dEf_TeXt_" << endl << md->initializer() << endl << "_EnD_oF_dEf_TeXt_;" << endl; } // TODO: exceptions, const volatile if (md->memberType()==MemberDef::Enumeration) // enum { LockingPtr<MemberList> enumList = md->enumFieldList(); if (enumList!=0) { MemberListIterator emli(*enumList); MemberDef *emd; for (emli.toFirst();(emd=emli.current());++emli) { t << memPrefix << "enum = { enum-name = " << emd->name() << ';'; if (!emd->initializer().isEmpty()) { t << " enum-value = "; writeDEFString(t,emd->initializer()); t << ';'; } t << " };" << endl; } } } t << memPrefix << "desc-file = '" << md->getDefFileName() << "';" << endl; t << memPrefix << "desc-line = '" << md->getDefLine() << "';" << endl; t << memPrefix << "briefdesc = <<_EnD_oF_dEf_TeXt_" << endl << md->briefDescription() << endl << "_EnD_oF_dEf_TeXt_;" << endl; t << memPrefix << "documentation = <<_EnD_oF_dEf_TeXt_" << endl << md->documentation() << endl << "_EnD_oF_dEf_TeXt_;" << endl; //printf("md->getReferencesMembers()=%p\n",md->getReferencesMembers()); LockingPtr<MemberSDict> mdict = md->getReferencesMembers(); if (!mdict.isNull()) { MemberSDict::Iterator mdi(*mdict); MemberDef *rmd; QCString refPrefix = " " + memPrefix + "ref-"; for (mdi.toFirst();(rmd=mdi.current());++mdi) { if (rmd->getStartBodyLine()!=-1 && rmd->getBodyDef()) { t << memPrefix << "referenceto = {" << endl; t << refPrefix << "id = '" << rmd->getBodyDef()->getOutputFileBase() << "_1" // encoded `:' character (see util.cpp:convertNameToFile) << rmd->anchor() << "';" << endl; t << refPrefix << "line = '" << rmd->getStartBodyLine() << "';" << endl; QCString scope = rmd->getScopeString(); QCString name = rmd->name(); if (!scope.isEmpty() && scope!=def->name()) { name.prepend(scope+"::"); } t << refPrefix << "name = "; writeDEFString(t,name); t << ';' << endl << " };" << endl; } } /* for (mdi.toFirst...) */ } mdict = md->getReferencedByMembers(); if (!mdict.isNull()) { MemberSDict::Iterator mdi(*mdict); MemberDef *rmd; QCString refPrefix = " " + memPrefix + "ref-"; for (mdi.toFirst();(rmd=mdi.current());++mdi) { if (rmd->getStartBodyLine()!=-1 && rmd->getBodyDef()) { t << memPrefix << "referenceby = {" << endl; t << refPrefix << "id = '" << rmd->getBodyDef()->getOutputFileBase() << "_1" // encoded `:' character (see util.cpp:convertNameToFile) << rmd->anchor() << "';" << endl; t << refPrefix << "line = '" << rmd->getStartBodyLine() << "';" << endl; QCString scope = rmd->getScopeString(); QCString name = rmd->name(); if (!scope.isEmpty() && scope!=def->name()) { name.prepend(scope+"::"); } t << refPrefix << "name = "; writeDEFString(t,name); t << ';' << endl << " };" << endl; } } /* for (mdi.toFirst...) */ } t << " }; /* " << Prefix << "-member */" << endl; }
static void generateSqlite3ForMember(sqlite3*db,MemberDef *md,Definition *def) { // + declaration/definition arg lists // + reimplements // + reimplementedBy // + exceptions // + const/volatile specifiers // - examples // + source definition // + source references // + source referenced by // - body code // + template arguments // (templateArguments(), definitionTemplateParameterLists()) // - call graph // enum values are written as part of the enum if (md->memberType()==MemberType_EnumValue) return; if (md->isHidden()) return; //if (md->name().at(0)=='@') return; // anonymous member // group members are only visible in their group //if (def->definitionType()!=Definition::TypeGroup && md->getGroupDef()) return; QCString memType; #if 0 // member idx = sqlite3_bind_parameter_index(stmt, ":refid"); sqlite3_bind_text(stmt, idx, memberOutputFileBase(md).data(),-1,SQLITE_TRANSIENT); idx = sqlite3_bind_parameter_index(stmt,":kind"); sqlite3_bind_int(stmt, idx, md->memberType()); idx = sqlite3_bind_parameter_index(stmt, ":name"); sqlite3_bind_text(stmt, idx, md->name().data(),-1,SQLITE_TRANSIENT); #endif // memberdef bindTextParameter(i_s_memberdef,":refid",md->anchor()); bindIntParameter(i_s_memberdef,":kind",md->memberType()); bindIntParameter(i_s_memberdef,":prot",md->protection()); bindIntParameter(i_s_memberdef,":static",md->isStatic()); bool isFunc=FALSE; switch (md->memberType()) { case MemberType_Function: // fall through case MemberType_Signal: // fall through case MemberType_Friend: // fall through case MemberType_DCOP: // fall through case MemberType_Slot: isFunc=TRUE; break; default: break; } if (isFunc) { LockingPtr<ArgumentList> al = md->argumentList(); if (al!=0 && al->constSpecifier) { bindIntParameter(i_s_memberdef,":const",al->constSpecifier); } bindIntParameter(i_s_memberdef,":explicit",md->isExplicit()); bindIntParameter(i_s_memberdef,":inline",md->isInline()); bindIntParameter(i_s_memberdef,":final",md->isFinal()); bindIntParameter(i_s_memberdef,":sealed",md->isSealed()); bindIntParameter(i_s_memberdef,":new",md->isNew()); bindIntParameter(i_s_memberdef,":optional",md->isOptional()); bindIntParameter(i_s_memberdef,":required",md->isRequired()); bindIntParameter(i_s_memberdef,":virt",md->virtualness()); } // place in the arguments and linkify the arguments if (md->memberType() == MemberType_Variable) { bindIntParameter(i_s_memberdef,":mutable",md->isMutable()); bindIntParameter(i_s_memberdef,":initonly",md->isInitonly()); } else if (md->memberType() == MemberType_Property) { bindIntParameter(i_s_memberdef,":readable",md->isReadable()); bindIntParameter(i_s_memberdef,":writable",md->isWritable()); bindIntParameter(i_s_memberdef,":gettable",md->isGettable()); bindIntParameter(i_s_memberdef,":settable",md->isSettable()); if (md->isAssign() || md->isCopy() || md->isRetain()) { int accessor = md->isAssign() ? md->isAssign() : (md->isCopy() ? md->isCopy() : md->isRetain()) ; bindIntParameter(i_s_memberdef,":accessor",accessor); } } else if (md->memberType() == MemberType_Event) { bindIntParameter(i_s_memberdef,":addable",md->isAddable()); bindIntParameter(i_s_memberdef,":removable",md->isRemovable()); bindIntParameter(i_s_memberdef,":raisable",md->isRaisable()); } if (md->memberType()!=MemberType_Define && md->memberType()!=MemberType_Enumeration ) { QCString typeStr = md->typeString(); stripQualifiers(typeStr); StringList l; linkifyText(TextGeneratorSqlite3Impl(l),def,md->getBodyDef(),md,typeStr); if (typeStr.data()) { bindTextParameter(i_s_memberdef,":type",typeStr); } if (md->definition()) { bindTextParameter(i_s_memberdef,":definition",md->definition()); } if (md->argsString()) { bindTextParameter(i_s_memberdef,":argsstring",md->argsString()); } } bindTextParameter(i_s_memberdef,":name",md->name()); if (md->memberType() == MemberType_Property) { if (md->isReadable()) { DBG_CTX(("<read>\n")); } if (md->isWritable()) { DBG_CTX(("<write>\n")); } } #if 0 if (md->memberType()==MemberType_Variable && md->bitfieldString()) { QCString bitfield = md->bitfieldString(); if (bitfield.at(0)==':') bitfield=bitfield.mid(1); t << " <bitfield>" << bitfield << "</bitfield>" << endl; } MemberDef *rmd = md->reimplements(); if (rmd) { t << " <reimplements refid=\"" << memberOutputFileBase(rmd) << "_1" << rmd->anchor() << "\">" << convertToXML(rmd->name()) << "</reimplements>" << endl; } LockingPtr<MemberList> rbml = md->reimplementedBy(); if (rbml!=0) { MemberListIterator mli(*rbml); for (mli.toFirst();(rmd=mli.current());++mli) { t << " <reimplementedby refid=\"" << memberOutputFileBase(rmd) << "_1" << rmd->anchor() << "\">" << convertToXML(rmd->name()) << "</reimplementedby>" << endl; } } #endif if (isFunc) //function { LockingPtr<ArgumentList> declAl = md->declArgumentList(); LockingPtr<ArgumentList> defAl = md->argumentList(); if (declAl!=0 && declAl->count()>0) { ArgumentListIterator declAli(*declAl); ArgumentListIterator defAli(*defAl); Argument *a; for (declAli.toFirst();(a=declAli.current());++declAli) { Argument *defArg = defAli.current(); DBG_CTX(("<param>\n")); if (!a->attrib.isEmpty()) { DBG_CTX(("<attributes>:%s\n",a->attrib.data())); } if (!a->type.isEmpty()) { StringList l; linkifyText(TextGeneratorSqlite3Impl(l),def,md->getBodyDef(),md,a->type); QCString *s=l.first(); while (s) { insertMemberReference(db,md->anchor().data(),s->data(),def->getDefFileName().data(),md->getDefLine(),1); s=l.next(); } } if (!a->name.isEmpty()) { DBG_CTX(("<declname>%s\n",a->name.data())); } if (defArg && !defArg->name.isEmpty() && defArg->name!=a->name) { DBG_CTX(("<defname>%s\n",defArg->name.data())); } if (!a->array.isEmpty()) { DBG_CTX(("<array>%s",a->array.data())); } if (!a->defval.isEmpty()) { StringList l; linkifyText(TextGeneratorSqlite3Impl(l),def,md->getBodyDef(),md,a->defval); } if (defArg) ++defAli; } } } else if (md->memberType()==MemberType_Define && md->argsString()) // define { if (md->argumentList()->count()==0) // special case for "foo()" to // disguish it from "foo". { DBG_CTX(("no params\n")); } else { ArgumentListIterator ali(*md->argumentList()); Argument *a; for (ali.toFirst();(a=ali.current());++ali) { DBG_CTX(("<param><defname>%s\n",a->type.data())); } } } // Extract references from initializer // avoid that extremely large tables are written to the output. // todo: it's better to adhere to MAX_INITIALIZER_LINES. // drm_mod_register_buffer, if (!md->initializer().isEmpty() && md->initializer().length()<2000) { StringList l; linkifyText(TextGeneratorSqlite3Impl(l),def,md->getBodyDef(),md,md->initializer()); QCString *s=l.first(); while (s) { DBG_CTX(("initializer:%s %s %s %d\n", md->anchor().data(), s->data(), md->getBodyDef()->getDefFileName().data(), md->getStartBodyLine())); insertMemberReference(db,md->anchor().data(),s->data(),md->getBodyDef()->getDefFileName().data(),md->getStartBodyLine(),1); s=l.next(); } } #if 0 if (md->excpString()) { linkifyText(TextGeneratorXMLImpl(t),def,md->getBodyDef(),md,md->excpString()); } #endif if ( md->getScopeString() ) { bindTextParameter(i_s_memberdef,":scope",md->getScopeString()); } // File location if (md->getDefLine() != -1) { int id_file = insertFile(db,md->getDefFileName()); if (id_file!=-1) { bindIntParameter(i_s_memberdef,":id_file",id_file); bindIntParameter(i_s_memberdef,":line",md->getDefLine()); bindIntParameter(i_s_memberdef,":column",md->getDefColumn()); if (md->getStartBodyLine()!=-1) { int id_bfile = insertFile(db,md->getBodyDef()->absFilePath()); if (id_bfile == -1) exit(-1); bindIntParameter(i_s_memberdef,":id_ibfile",id_bfile); bindIntParameter(i_s_memberdef,":bline",md->getStartBodyLine()); // XXX implement getStartBodyColumn bindIntParameter(i_s_memberdef,":bcolumn",1); } } } step(db,i_s_memberdef); /*int id_src =*/ sqlite3_last_insert_rowid(db); // + cross-references // The cross-references in initializers only work when both the src and dst // are defined. LockingPtr<MemberSDict> mdict = md->getReferencesMembers(); // references if (mdict!=0) { MemberSDict::IteratorDict mdi(*mdict); MemberDef *rmd; for (mdi.toFirst();(rmd=mdi.current());++mdi) { insertMemberReference(db,md,rmd,mdi.currentKey()); } } mdict = md->getReferencedByMembers(); // referencedby if (mdict!=0) { MemberSDict::IteratorDict mdi(*mdict); MemberDef *rmd; for (mdi.toFirst();(rmd=mdi.current());++mdi) { insertMemberReference(db,rmd,md,mdi.currentKey()); } } }
void nl80211::setup_family(boost::system::error_code& ec) { genetlink::message msg; msg.flags(netlink::message::request | netlink::message::ack); msg.command(genetlink::message::cmd_get_family); msg.version(1); msg.push_attr(genetlink::message::attr_family_name, "nl80211", 8); _gnl.send(msg.cbuffer()); size_t rbytes = _gnl.receive(boost::asio::buffer(_buffer)); for (netlink::message_iterator mit(_buffer, rbytes); mit; ++mit) { if (mit.type() == netlink::message::error) { ec = boost::system::error_code(mit.error(), boost::system::system_category()); return; } if (mit.type() == netlink::message::min_type) { genetlink::message rmsg(mit.get()); for (netlink::attribute_iterator ai(rmsg); ai; ++ai) { switch (ai.type()) { case genetlink::message::attr_family_id: _family = *ai.get<uint16>(); break; case genetlink::message::attr_family_name: BOOST_ASSERT(!strcmp(ai.get<const char>(), "nl80211")); break; case genetlink::message::attr_version: _version = *ai.get<uint32>(); break; case genetlink::message::attr_hdrsize: _hdrsize = *ai.get<uint32>(); break; case genetlink::message::attr_mcast_groups: for (netlink::attribute_iterator ali(rmsg, ai); ali; ++ali) { const char* name = nullptr; uint32 id = 0; for (netlink::attribute_iterator aei(rmsg, ali); aei; ++aei) { switch (aei.type()) { case genetlink::message::attr_mcast_name: name = aei.get<const char>(); break; case genetlink::message::attr_mcast_id: id = *aei.get<uint32>(); break; } } if (name && !strcmp(name, "mlme")) { _mlne_mcast_id = id; break; } } break; } } break; } } }
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; } }
static void generateSqlite3ForMember(sqlite3*db,MemberDef *md,Definition *def) { // + declaration/definition arg lists // + reimplements // + reimplementedBy // + exceptions // + const/volatile specifiers // - examples // + source definition // + source references // + source referenced by // - body code // + template arguments // (templateArguments(), definitionTemplateParameterLists()) // - call graph // enum values are written as part of the enum if (md->memberType()==MemberType_EnumValue) return; if (md->isHidden()) return; //if (md->name().at(0)=='@') return; // anonymous member // group members are only visible in their group //if (def->definitionType()!=Definition::TypeGroup && md->getGroupDef()) return; QCString memType; // memberdef bindTextParameter(i_s_memberdef,":refid",md->anchor().data(),FALSE); bindIntParameter(i_s_memberdef,":kind",md->memberType()); bindIntParameter(i_s_memberdef,":prot",md->protection()); bindIntParameter(i_s_memberdef,":static",md->isStatic()); bool isFunc=FALSE; switch (md->memberType()) { case MemberType_Function: // fall through case MemberType_Signal: // fall through case MemberType_Friend: // fall through case MemberType_DCOP: // fall through case MemberType_Slot: isFunc=TRUE; break; default: break; } if (isFunc) { ArgumentList *al = md->argumentList(); if (al!=0 && al->constSpecifier) { bindIntParameter(i_s_memberdef,":const",al->constSpecifier); } bindIntParameter(i_s_memberdef,":explicit",md->isExplicit()); bindIntParameter(i_s_memberdef,":inline",md->isInline()); bindIntParameter(i_s_memberdef,":final",md->isFinal()); bindIntParameter(i_s_memberdef,":sealed",md->isSealed()); bindIntParameter(i_s_memberdef,":new",md->isNew()); bindIntParameter(i_s_memberdef,":optional",md->isOptional()); bindIntParameter(i_s_memberdef,":required",md->isRequired()); bindIntParameter(i_s_memberdef,":virt",md->virtualness()); } // place in the arguments and linkify the arguments if (md->memberType() == MemberType_Variable) { bindIntParameter(i_s_memberdef,":mutable",md->isMutable()); bindIntParameter(i_s_memberdef,":initonly",md->isInitonly()); } else if (md->memberType() == MemberType_Property) { bindIntParameter(i_s_memberdef,":readable",md->isReadable()); bindIntParameter(i_s_memberdef,":writable",md->isWritable()); bindIntParameter(i_s_memberdef,":gettable",md->isGettable()); bindIntParameter(i_s_memberdef,":settable",md->isSettable()); if (md->isAssign() || md->isCopy() || md->isRetain()) { int accessor = md->isAssign() ? md->isAssign() : (md->isCopy() ? md->isCopy() : md->isRetain()) ; bindIntParameter(i_s_memberdef,":accessor",accessor); } } else if (md->memberType() == MemberType_Event) { bindIntParameter(i_s_memberdef,":addable",md->isAddable()); bindIntParameter(i_s_memberdef,":removable",md->isRemovable()); bindIntParameter(i_s_memberdef,":raisable",md->isRaisable()); } // + declaration/definition arg lists if (md->memberType()!=MemberType_Define && md->memberType()!=MemberType_Enumeration ) { QCString typeStr = md->typeString(); stripQualifiers(typeStr); StringList l; linkifyText(TextGeneratorSqlite3Impl(l),def,md->getBodyDef(),md,typeStr); if (typeStr.data()) { bindTextParameter(i_s_memberdef,":type",typeStr.data(),FALSE); } if (md->definition()) { bindTextParameter(i_s_memberdef,":definition",md->definition()); } if (md->argsString()) { bindTextParameter(i_s_memberdef,":argsstring",md->argsString()); } } bindTextParameter(i_s_memberdef,":name",md->name()); if (md->memberType() == MemberType_Property) { if (md->isReadable()) { DBG_CTX(("<read>\n")); } if (md->isWritable()) { DBG_CTX(("<write>\n")); } } if (isFunc) //function { ArgumentList *declAl = md->declArgumentList(); ArgumentList *defAl = md->argumentList(); if (declAl!=0 && declAl->count()>0) { ArgumentListIterator declAli(*declAl); ArgumentListIterator defAli(*defAl); Argument *a; for (declAli.toFirst();(a=declAli.current());++declAli) { Argument *defArg = defAli.current(); DBG_CTX(("<param>\n")); if (!a->attrib.isEmpty()) { DBG_CTX(("<attributes>:%s\n",a->attrib.data())); } if (!a->type.isEmpty()) { StringList l; linkifyText(TextGeneratorSqlite3Impl(l),def,md->getBodyDef(),md,a->type); StringListIterator li(l); QCString *s; while ((s=li.current())) { insertMemberReference(db,md->anchor().data(),s->data(),def->getDefFileName().data(),md->getDefLine(),1); ++li; } } if (!a->name.isEmpty()) { DBG_CTX(("<declname>%s\n",a->name.data())); } if (defArg && !defArg->name.isEmpty() && defArg->name!=a->name) { DBG_CTX(("<defname>%s\n",defArg->name.data())); } if (!a->array.isEmpty()) { DBG_CTX(("<array>%s",a->array.data())); } if (!a->defval.isEmpty()) { StringList l; linkifyText(TextGeneratorSqlite3Impl(l),def,md->getBodyDef(),md,a->defval); } if (defArg) ++defAli; } } } else if (md->memberType()==MemberType_Define && md->argsString()) // define { if (md->argumentList()->count()==0) // special case for "foo()" to // disguish it from "foo". { DBG_CTX(("no params\n")); } else { ArgumentListIterator ali(*md->argumentList()); Argument *a; for (ali.toFirst();(a=ali.current());++ali) { DBG_CTX(("<param><defname>%s\n",a->type.data())); } } } // Extract references from initializer // avoid that extremely large tables are written to the output. // todo: it's better to adhere to MAX_INITIALIZER_LINES. // drm_mod_register_buffer, if (!md->initializer().isEmpty() && md->initializer().length()<2000) { bindTextParameter(i_s_memberdef,":initializer",md->initializer().data()); StringList l; linkifyText(TextGeneratorSqlite3Impl(l),def,md->getBodyDef(),md,md->initializer()); StringListIterator li(l); QCString *s; while ((s=li.current())) { if (md->getBodyDef()) { DBG_CTX(("initializer:%s %s %s %d\n", md->anchor().data(), s->data(), md->getBodyDef()->getDefFileName().data(), md->getStartBodyLine())); insertMemberReference(db,md->anchor().data(),s->data(),md->getBodyDef()->getDefFileName().data(),md->getStartBodyLine(),1); } ++li; } } if ( md->getScopeString() ) { bindTextParameter(i_s_memberdef,":scope",md->getScopeString().data(),FALSE); } // Brief and detail description bindTextParameter(i_s_memberdef,":briefdescription",md->briefDescription(),FALSE); bindTextParameter(i_s_memberdef,":detaileddescription",md->documentation(),FALSE); bindTextParameter(i_s_memberdef,":inbodydescription",md->inbodyDocumentation(),FALSE); // File location if (md->getDefLine() != -1) { int id_file = insertFile(db,md->getDefFileName()); if (id_file!=-1) { bindIntParameter(i_s_memberdef,":id_file",id_file); bindIntParameter(i_s_memberdef,":line",md->getDefLine()); bindIntParameter(i_s_memberdef,":column",md->getDefColumn()); if (md->getStartBodyLine()!=-1) { int id_bodyfile = insertFile(db,md->getBodyDef()->absFilePath()); if (id_bodyfile == -1) { sqlite3_clear_bindings(i_s_memberdef); } else { bindIntParameter(i_s_memberdef,":id_bodyfile",id_bodyfile); bindIntParameter(i_s_memberdef,":bodystart",md->getStartBodyLine()); bindIntParameter(i_s_memberdef,":bodyend",md->getEndBodyLine()); } } } } if (-1==step(db,i_s_memberdef)) { sqlite3_clear_bindings(i_s_memberdef); } sqlite3_last_insert_rowid(db); // + source references // The cross-references in initializers only work when both the src and dst // are defined. MemberSDict *mdict = md->getReferencesMembers(); if (mdict!=0) { MemberSDict::IteratorDict mdi(*mdict); MemberDef *rmd; for (mdi.toFirst();(rmd=mdi.current());++mdi) { insertMemberReference(db,md,rmd,mdi.currentKey()); } } // + source referenced by mdict = md->getReferencedByMembers(); if (mdict!=0) { MemberSDict::IteratorDict mdi(*mdict); MemberDef *rmd; for (mdi.toFirst();(rmd=mdi.current());++mdi) { insertMemberReference(db,rmd,md,mdi.currentKey()); } } }
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; 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 = new ArgumentList; argList->setAutoDelete(TRUE); 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; 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; 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 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 type contraint list if (e.typeConstr) { typeConstr = new ArgumentList; typeConstr->setAutoDelete(TRUE); QListIterator<Argument> tcli(*e.typeConstr); for (;(a=tcli.current());++tcli) { typeConstr->append(new Argument(*a)); } } // deep copy template argument lists if (e.tArgLists) { tArgLists = copyArgumentLists(e.tArgLists); } }
bool TjSummaryReport::generateReport() { QString text; text = i18n("<p><h1>Summary for Project %1 (Version %2)</h1></p><hr/>") .arg(project->getName()) .arg(project->getVersion()); int disabledScenarios = 0; for (ScenarioListIterator sli(project->getScenarioIterator()); *sli; ++sli) if (!(*sli)->getEnabled()) disabledScenarios++; text += "<table>"; text += i18n("<tr><td><b>Scenarios:</b></td><td>%1 (%2 disabled)</td></tr>") .arg(project->getMaxScenarios()) .arg(disabledScenarios); int groups= 0; int workers = 0; int other = 0; for (ResourceListIterator rli(project->getResourceListIterator()); *rli; ++rli) if ((*rli)->hasSubs()) groups++; else if ((*rli)->getEfficiency() > 0.0) workers++; else other++; text += i18n("<tr><td><b>Resources:</b></td>" "<td>%1 (%2 Groups, %3 Workers, %4 Other)</td></tr>") .arg(project->resourceCount()) .arg(groups).arg(workers).arg(other); int summaryAccounts = 0; int cost = 0; int revenue = 0; for (AccountListIterator ali(project->getAccountListIterator()); *ali; ++ali) if ((*ali)->hasSubs()) summaryAccounts++; else if ((*ali)->getAcctType() == Cost) cost++; else revenue++; text += i18n("<tr><td><b>Accounts:</b></td>" "<td>%1 (%2 Summary Accounts, %3 Cost Accounts, " "%4 Revenue Accounts)</td></tr>") .arg(project->accountCount()) .arg(summaryAccounts).arg(cost).arg(revenue); int containers = 0; int leafs = 0; int milestones = 0; for (TaskListIterator tli(project->getTaskListIterator()); *tli; ++tli) if ((*tli)->hasSubs()) containers++; else if ((*tli)->isMilestone()) milestones++; else leafs++; text += i18n("<tr><td><b>Tasks:</b></td><td>%1 " "(%2 Containers, %3 Milestones, %4 Leaves)</td></tr>" "</table><hr/>") .arg(project->taskCount()) .arg(containers).arg(milestones).arg(leafs); textBrowser->setText(text); return true; }
void writeFunctionProto(OutputList& ol,const ArgumentList* al,const MemberDef* mdef) { if (al==0) return; ArgumentListIterator ali(*al); Argument *arg; bool sem=FALSE; int len=al->count(); ol.startBold(); ol.docify(" ( "); ol.endBold(); if (len>2) { //ol.lineBreak(); ol.docify("\n ");; } for (;(arg=ali.current());++ali) { ol.startBold(); if (sem && len < 3) { ol.docify(" , "); } QCString nn=arg->name.simplifyWhiteSpace(); VerilogDocGen::adjustOpName(nn); // nn+=" "; VhdlDocGen::formatString(nn,ol,mdef); QCString qargs=arg->type.simplifyWhiteSpace(); QCString att=arg->defval.simplifyWhiteSpace(); if (!att.isEmpty()) { const QCString* str=VerilogDocGen::findKeyWord(att.data()); // att+=" "; if (str==0) VhdlDocGen::formatString(att,ol,mdef); else startFonts(att,str->data(),ol); } ol.docify(":"); //VhdlDocGen::startFonts("in ","stringliteral",ol); const QCString* str=VerilogDocGen::findKeyWord(qargs.data()); // ol.startEmphasis(); if (str==0) VhdlDocGen::formatString(qargs,ol,mdef); else startFonts(qargs,str->data(),ol); // ol.endEmphasis(); sem=TRUE; ol.endBold(); if (len > 2) { ol.docify("\n");; //ol.lineBreak(); } } ol.startBold(); ol.docify(" )"); const char *exp=mdef->excpString(); if(exp) { ol.insertMemberAlign(); ol.docify("[ "); ol.docify(exp); ol.docify(" ]"); } ol.endBold(); }