bool GroupDef::insertMember(MemberDef *md,bool docOnly) { if (md->isHidden()) return FALSE; //printf("GroupDef(%s)::insertMember(%s)\n", title.data(), md->name().data()); MemberNameInfo *mni=0; if ((mni=(*allMemberNameInfoSDict)[md->name()])) { // member with this name already found MemberNameInfoIterator srcMnii(*mni); MemberInfo *srcMi; for ( ; (srcMi=srcMnii.current()) ; ++srcMnii ) { MemberDef *srcMd = srcMi->memberDef; if (srcMd==md) return FALSE; // already added before! bool sameScope = srcMd->getOuterScope()==md->getOuterScope() || // same class or namespace // both inside a file => definition and declaration do not have to be in the same file (srcMd->getOuterScope()->definitionType()==Definition::TypeFile && md->getOuterScope()->definitionType()==Definition::TypeFile); LockingPtr<ArgumentList> srcMdAl = srcMd->argumentList(); LockingPtr<ArgumentList> mdAl = md->argumentList(); LockingPtr<ArgumentList> tSrcMdAl = srcMd->templateArguments(); LockingPtr<ArgumentList> tMdAl = md->templateArguments(); if (srcMd->isFunction() && md->isFunction() && // both are a function ((tSrcMdAl.pointer()==0 && tMdAl.pointer()==0) || (tSrcMdAl.pointer()!=0 && tMdAl.pointer()!=0 && tSrcMdAl->count()==tMdAl->count()) ) && // same number of template arguments matchArguments2(srcMd->getOuterScope(),srcMd->getFileDef(),srcMdAl.pointer(), md->getOuterScope(),md->getFileDef(),mdAl.pointer(), TRUE ) && // matching parameters sameScope // both are found in the same scope ) { if (srcMd->getGroupAlias()==0) { md->setGroupAlias(srcMd); } else { md->setGroupAlias(srcMd->getGroupAlias()); } return FALSE; // member is the same as one that is already added } } mni->append(new MemberInfo(md,md->protection(),md->virtualness(),FALSE)); } else { mni = new MemberNameInfo(md->name()); mni->append(new MemberInfo(md,md->protection(),md->virtualness(),FALSE)); allMemberNameInfoSDict->append(mni->memberName(),mni); } //printf("Added member!\n"); allMemberList->append(md); switch(md->memberType()) { case MemberDef::Variable: if (!docOnly) { addMemberToList(MemberList::decVarMembers,md); } addMemberToList(MemberList::docVarMembers,md); break; case MemberDef::Function: if (!docOnly) { addMemberToList(MemberList::decFuncMembers,md); } addMemberToList(MemberList::docFuncMembers,md); break; case MemberDef::Typedef: if (!docOnly) { addMemberToList(MemberList::decTypedefMembers,md); } addMemberToList(MemberList::docTypedefMembers,md); break; case MemberDef::Enumeration: if (!docOnly) { addMemberToList(MemberList::decEnumMembers,md); } addMemberToList(MemberList::docEnumMembers,md); break; case MemberDef::EnumValue: if (!docOnly) { addMemberToList(MemberList::decEnumValMembers,md); } addMemberToList(MemberList::docEnumValMembers,md); break; case MemberDef::Define: if (!docOnly) { addMemberToList(MemberList::decDefineMembers,md); } addMemberToList(MemberList::docDefineMembers,md); break; case MemberDef::Signal: if (!docOnly) { addMemberToList(MemberList::decSignalMembers,md); } addMemberToList(MemberList::docSignalMembers,md); break; case MemberDef::Slot: if (md->protection()==Public) { if (!docOnly) { addMemberToList(MemberList::decPubSlotMembers,md); } addMemberToList(MemberList::docPubSlotMembers,md); } else if (md->protection()==Protected) { if (!docOnly) { addMemberToList(MemberList::decProSlotMembers,md); } addMemberToList(MemberList::docProSlotMembers,md); } else { if (!docOnly) { addMemberToList(MemberList::decPriSlotMembers,md); } addMemberToList(MemberList::docPriSlotMembers,md); } break; case MemberDef::Event: if (!docOnly) { addMemberToList(MemberList::decEventMembers,md); } addMemberToList(MemberList::docEventMembers,md); break; case MemberDef::Property: if (!docOnly) { addMemberToList(MemberList::decPropMembers,md); } addMemberToList(MemberList::docPropMembers,md); break; case MemberDef::Friend: if (!docOnly) { addMemberToList(MemberList::decFriendMembers,md); } addMemberToList(MemberList::docFriendMembers,md); break; default: err("GroupDef::insertMembers(): " "member `%s' (typeid=%d) with scope `%s' inserted in group scope `%s'!\n", md->name().data(),md->memberType(), md->getClassDef() ? md->getClassDef()->name().data() : "", name().data()); } return TRUE; }
bool GroupDef::insertMember(MemberDef *md,bool docOnly) { //printf("GroupDef(%s)::insertMember(%s)\n", title.data(), md->name().data()); MemberNameInfo *mni=0; if ((mni=(*allMemberNameInfoSDict)[md->name()])) { // member with this name already found MemberNameInfoIterator srcMnii(*mni); MemberInfo *srcMi; for ( ; (srcMi=srcMnii.current()) ; ++srcMnii ) { MemberDef *srcMd = srcMi->memberDef; if (srcMd==md) return FALSE; // already added before! bool sameScope = srcMd->getOuterScope()==md->getOuterScope() || // same class or namespace // both inside a file => definition and declaration do not have to be in the same file (srcMd->getOuterScope()->definitionType()==Definition::TypeFile && md->getOuterScope()->definitionType()==Definition::TypeFile); if (srcMd->isFunction() && md->isFunction() && matchArguments(srcMd->argumentList(),md->argumentList()) && sameScope ) { if (srcMd->getGroupAlias()==0) { md->setGroupAlias(srcMd); } else { md->setGroupAlias(srcMd->getGroupAlias()); } return FALSE; // member is the same as one that is already added } } mni->append(new MemberInfo(md,md->protection(),md->virtualness(),FALSE)); } else { mni = new MemberNameInfo(md->name()); mni->append(new MemberInfo(md,md->protection(),md->virtualness(),FALSE)); allMemberNameInfoSDict->append(mni->memberName(),mni); } //printf("Added member!\n"); allMemberList->append(md); switch(md->memberType()) { case MemberDef::Variable: if (!docOnly) { if (Config_getBool("SORT_BRIEF_DOCS")) decVarMembers.inSort(md); else decVarMembers.append(md); } if (Config_getBool("SORT_MEMBER_DOCS")) docVarMembers.inSort(md); else docVarMembers.append(md); break; case MemberDef::Function: if (!docOnly) { if (Config_getBool("SORT_BRIEF_DOCS")) decFuncMembers.inSort(md); else decFuncMembers.append(md); } if (Config_getBool("SORT_MEMBER_DOCS")) docFuncMembers.inSort(md); else docFuncMembers.append(md); break; case MemberDef::Typedef: if (!docOnly) { if (Config_getBool("SORT_BRIEF_DOCS")) decTypedefMembers.inSort(md); else decTypedefMembers.append(md); } if (Config_getBool("SORT_MEMBER_DOCS")) docTypedefMembers.inSort(md); else docTypedefMembers.append(md); break; case MemberDef::Enumeration: if (!docOnly) { if (Config_getBool("SORT_BRIEF_DOCS")) decEnumMembers.inSort(md); else decEnumMembers.append(md); } if (Config_getBool("SORT_MEMBER_DOCS")) docEnumMembers.inSort(md); else docEnumMembers.append(md); break; case MemberDef::EnumValue: break; case MemberDef::Prototype: if (!docOnly) { if (Config_getBool("SORT_BRIEF_DOCS")) decProtoMembers.inSort(md); else decProtoMembers.append(md); } if (Config_getBool("SORT_MEMBER_DOCS")) docProtoMembers.inSort(md); else docProtoMembers.append(md); break; case MemberDef::Define: if (!docOnly) { if (Config_getBool("SORT_BRIEF_DOCS")) decDefineMembers.inSort(md); else decDefineMembers.append(md); } if (Config_getBool("SORT_MEMBER_DOCS")) docDefineMembers.inSort(md); else docDefineMembers.append(md); break; default: err("GroupDef::insertMembers(): " "member `%s' with class scope `%s' inserted in group scope `%s'!\n", md->name().data(), md->getClassDef() ? md->getClassDef()->name().data() : "", name().data()); } return TRUE; }