Doxygen
Loading...
Searching...
No Matches
membergroup.h File Reference
#include <memory>
#include <vector>
#include "reflist.h"
#include "requirement.h"
#include "types.h"
Include dependency graph for membergroup.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  MemberGroup
 A class representing a group of members. More...
class  MemberGroupRefList
class  MemberGroupList
class  MemberGroupInfo
 Data collected for a member group. More...

Macros

#define DOX_NOGROUP   -1

Typedefs

using MemberGroupInfoMap = std::unordered_map< int,std::unique_ptr<MemberGroupInfo> >

Functions

void addMembersToMemberGroup (MemberList *ml, MemberGroupList *pMemberGroups, const Definition *context)

Macro Definition Documentation

◆ DOX_NOGROUP

Typedef Documentation

◆ MemberGroupInfoMap

using MemberGroupInfoMap = std::unordered_map< int,std::unique_ptr<MemberGroupInfo> >

Definition at line 130 of file membergroup.h.

Function Documentation

◆ addMembersToMemberGroup()

void addMembersToMemberGroup ( MemberList * ml,
MemberGroupList * pMemberGroups,
const Definition * context )

Definition at line 311 of file membergroup.cpp.

314{
315 ASSERT(context!=nullptr);
316 //printf("addMemberToMemberGroup() context=%s\n",qPrint(context->name()));
317 if (ml==nullptr) return;
318
319 struct MoveMemberInfo
320 {
321 MoveMemberInfo(MemberDef *md,MemberGroup *mg,const RefItemVector &rv)
322 : memberDef(md), memberGroup(mg), sli(rv) {}
323 MemberDef *memberDef;
324 MemberGroup *memberGroup;
325 RefItemVector sli;
326 };
327 std::vector<MoveMemberInfo> movedMembers;
328
329 for (const auto &md : *ml)
330 {
331 if (md->isEnumerate()) // insert enum value of this enum into groups
332 {
333 for (const auto &fmd : md->enumFieldList())
334 {
335 int groupId=fmd->getMemberGroupId();
336 if (groupId!=-1)
337 {
338 auto it = Doxygen::memberGroupInfoMap.find(groupId);
340 {
341 const auto &info = it->second;
342 auto mg_it = std::find_if(pMemberGroups->begin(),
343 pMemberGroups->end(),
344 [&groupId](const auto &g)
345 { return g->groupId()==groupId; }
346 );
347 MemberGroup *mg_ptr = nullptr;
348 if (mg_it==pMemberGroups->end())
349 {
350 auto mg = std::make_unique<MemberGroup>(
351 context,
352 groupId,
353 info->header,
354 info->doc,
355 info->docFile,
356 info->docLine,
357 ml->container());
358 mg_ptr = mg.get();
359 pMemberGroups->push_back(std::move(mg));
360 }
361 else
362 {
363 mg_ptr = (*mg_it).get();
364 }
365 mg_ptr->insertMember(fmd); // insert in member group
367 if (fmdm)
368 {
369 fmdm->setMemberGroup(mg_ptr);
370 }
371 }
372 }
373 }
374 }
375 int groupId=md->getMemberGroupId();
376 if (groupId!=-1)
377 {
378 auto it = Doxygen::memberGroupInfoMap.find(groupId);
380 {
381 const auto &info = it->second;
382 auto mg_it = std::find_if(pMemberGroups->begin(),
383 pMemberGroups->end(),
384 [&groupId](const auto &g)
385 { return g->groupId()==groupId; }
386 );
387 MemberGroup *mg_ptr = nullptr;
388 if (mg_it==pMemberGroups->end())
389 {
390 auto mg = std::make_unique<MemberGroup>(
391 context,
392 groupId,
393 info->header,
394 info->doc,
395 info->docFile,
396 info->docLine,
397 ml->container());
398 mg_ptr = mg.get();
399 pMemberGroups->push_back(std::move(mg));
400 }
401 else
402 {
403 mg_ptr = (*mg_it).get();
404 }
405 movedMembers.emplace_back(md,mg_ptr,info->m_sli);
406 }
407 }
408 }
409
410 // move the members to their group
411 for (const auto &mmi : movedMembers)
412 {
413 ml->remove(mmi.memberDef); // remove from member list
414 mmi.memberGroup->insertMember(mmi.memberDef->resolveAlias()); // insert in member group
415 mmi.memberGroup->setRefItems(mmi.sli);
416 MemberDefMutable *rmdm = toMemberDefMutable(mmi.memberDef);
417 if (rmdm)
418 {
419 rmdm->setMemberGroup(mmi.memberGroup);
420 }
421 }
422}
static MemberGroupInfoMap memberGroupInfoMap
Definition doxygen.h:111
virtual void setMemberGroup(MemberGroup *grp)=0
A class representing a group of members.
Definition membergroup.h:42
void insertMember(MemberDef *md)
DirIterator end(const DirIterator &) noexcept
Definition dir.cpp:176
#define ASSERT(x)
Definition dstring.h:28
MemberDefMutable * toMemberDefMutable(Definition *d)
std::vector< RefItem * > RefItemVector
Definition reflist.h:132

References addMembersToMemberGroup(), ASSERT, MemberList::container(), Definition::docFile(), end(), MemberGroup::insertMember(), Doxygen::memberGroupInfoMap, MemberVector::remove(), MemberDef::setMemberGroup(), and toMemberDefMutable().

Referenced by addMembersToMemberGroup(), addMembersToMemberGroup(), and parseInput().