Example #1
0
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;
}
Example #2
0
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;
}