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 312 of file membergroup.cpp.

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

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