Skip to content

Commit 58264d8

Browse files
committed
Refactoring: replaced MemberDef::isDetailedSectionLinkable() by hasDetailedSection()
- make filtering if detailed section is present more inline with contents - split of MemberVector as simpler version of MemberList - introduce MemberListContainer type as a replacement for inFile and inGroup booleans. - improved const use a bit
1 parent b7a0f8f commit 58264d8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+409
-396
lines changed

src/classdef.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1077,7 +1077,7 @@ void ClassDefImpl::internalInsertMember(const MemberDef *md,
10771077
case MemberType_Function:
10781078
if (md->isConstructor() || md->isDestructor())
10791079
{
1080-
m_impl->memberLists.get(MemberListType_constructors)->push_back(md);
1080+
m_impl->memberLists.get(MemberListType_constructors,MemberListContainer::Class)->push_back(md);
10811081
}
10821082
else
10831083
{
@@ -3251,8 +3251,7 @@ void ClassDefImpl::writeDeclaration(OutputList &ol,const MemberDef *md,bool inGr
32513251
// write user defined member groups
32523252
for (const auto &mg : m_impl->memberGroups)
32533253
{
3254-
mg->setInGroup(inGroup);
3255-
mg->writePlainDeclarations(ol,this,0,0,0,inheritedFrom,inheritId);
3254+
mg->writePlainDeclarations(ol,inGroup,this,0,0,0,inheritedFrom,inheritId);
32563255
}
32573256

32583257
for (const auto &lde : LayoutDocManager::instance().docEntries(LayoutDocManager::Class))
@@ -4166,7 +4165,7 @@ void ClassDefImpl::addMemberToList(MemberListType lt,const MemberDef *md,bool is
41664165
{
41674166
static bool sortBriefDocs = Config_getBool(SORT_BRIEF_DOCS);
41684167
static bool sortMemberDocs = Config_getBool(SORT_MEMBER_DOCS);
4169-
const auto &ml = m_impl->memberLists.get(lt);
4168+
const auto &ml = m_impl->memberLists.get(lt,MemberListContainer::Class);
41704169
ml->setNeedsSorting((isBrief && sortBriefDocs) || (!isBrief && sortMemberDocs));
41714170
ml->push_back(md);
41724171

@@ -4513,8 +4512,7 @@ void ClassDefImpl::writePlainMemberDeclaration(OutputList &ol,
45134512
MemberList * ml = getMemberList(lt);
45144513
if (ml)
45154514
{
4516-
ml->setInGroup(inGroup);
4517-
ml->writePlainDeclarations(ol,this,0,0,0,inheritedFrom,inheritId);
4515+
ml->writePlainDeclarations(ol,inGroup,this,0,0,0,inheritedFrom,inheritId);
45184516
}
45194517
}
45204518

src/code.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class CCodeParser : public CodeParserInterface
3636
SrcLangExt lang,
3737
bool isExampleBlock,
3838
const QCString &exampleName=QCString(),
39-
FileDef *fileDef=0,
39+
const FileDef *fileDef=0,
4040
int startLine=-1,
4141
int endLine=-1,
4242
bool inlineFragment=FALSE,

src/code.l

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ struct codeYY_state
123123
std::stack<int> scopeStack; //!< 1 if bracket starts a scope,
124124
// 2 for internal blocks
125125
int anchorCount = 0;
126-
FileDef * sourceFileDef = 0;
126+
const FileDef * sourceFileDef = 0;
127127
bool lineNumbers = FALSE;
128128
const Definition * currentDefinition = 0;
129129
const MemberDef * currentMemberDef = 0;
@@ -193,7 +193,6 @@ static const char *stateToString(yyscan_t yyscanner,int state);
193193

194194
static void saveObjCContext(yyscan_t yyscanner);
195195
static void restoreObjCContext(yyscan_t yyscanner);
196-
static void addUsingDirective(yyscan_t yyscanner,const char *name);
197196
static void pushScope(yyscan_t yyscanner,const QCString &s);
198197
static void popScope(yyscan_t yyscanner);
199198
static void setCurrentDoc(yyscan_t yyscanner,const QCString &anchor);
@@ -258,6 +257,7 @@ static std::mutex g_searchIndexMutex;
258257
static std::mutex g_docCrossReferenceMutex;
259258
static std::mutex g_addExampleMutex;
260259
static std::mutex g_countFlowKeywordsMutex;
260+
static std::mutex g_usingDirectiveMutex;
261261

262262
/* -----------------------------------------------------------------
263263
*/
@@ -2534,15 +2534,17 @@ static void addParmType(yyscan_t yyscanner)
25342534
yyextra->parmName.resize(0) ;
25352535
}
25362536

2537+
// TODO: make this have a scope only effect, at least not modifying the FileDef object.
25372538
static void addUsingDirective(yyscan_t yyscanner,const char *name)
25382539
{
2540+
std::lock_guard<std::mutex> lock(g_usingDirectiveMutex);
25392541
struct yyguts_t *yyg = (struct yyguts_t*)yyscanner;
25402542
if (yyextra->sourceFileDef && name)
25412543
{
25422544
const NamespaceDef *nd = Doxygen::namespaceLinkedMap->find(name);
25432545
if (nd)
25442546
{
2545-
yyextra->sourceFileDef->addUsingDirective(nd);
2547+
const_cast<FileDef*>(yyextra->sourceFileDef)->addUsingDirective(nd);
25462548
}
25472549
}
25482550
}
@@ -3838,7 +3840,7 @@ void CCodeParser::setStartCodeLine(const bool inp)
38383840
}
38393841

38403842
void CCodeParser::parseCode(CodeOutputInterface &od,const QCString &className,const QCString &s,
3841-
SrcLangExt lang,bool exBlock, const QCString &exName,FileDef *fd,
3843+
SrcLangExt lang,bool exBlock, const QCString &exName,const FileDef *fd,
38423844
int startLine,int endLine,bool inlineFragment,
38433845
const MemberDef *memberDef,bool showLineNumbers,const Definition *searchCtx,
38443846
bool collectXRefs)

src/context.cpp

Lines changed: 41 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2627,7 +2627,8 @@ class ClassContext::Private : public DefinitionContext<ClassContext::Private>
26272627
struct Cachable : public DefinitionContext<ClassContext::Private>::Cachable
26282628
{
26292629
Cachable(const ClassDef *cd) : DefinitionContext<ClassContext::Private>::Cachable(cd),
2630-
inheritanceNodes(-1) { }
2630+
inheritanceNodes(-1),
2631+
allMembers(MemberListType_allMembersList,MemberListContainer::Class) { }
26312632
SharedPtr<IncludeInfoContext> includeInfo;
26322633
SharedPtr<InheritanceListContext> inheritsList;
26332634
SharedPtr<InheritanceListContext> inheritedByList;
@@ -4475,7 +4476,7 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
44754476
}
44764477
TemplateVariant hasDetails() const
44774478
{
4478-
return m_memberDef->isDetailedSectionLinkable();
4479+
return m_memberDef->hasDetailedDescription();
44794480
}
44804481
TemplateVariant initializer() const
44814482
{
@@ -4573,7 +4574,8 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
45734574
Cachable &cache = getCache();
45744575
if (!cache.enumValues)
45754576
{
4576-
cache.enumValues.reset(MemberListContext::alloc(&m_memberDef->enumFieldList()));
4577+
MemberVector mv = m_memberDef->enumFieldList();
4578+
cache.enumValues.reset(MemberListContext::alloc(std::move(mv)));
45774579
}
45784580
return cache.enumValues.get();
45794581
}
@@ -5184,7 +5186,12 @@ class MemberContext::Private : public DefinitionContext<MemberContext::Private>
51845186
{
51855187
if (args.size()==1)
51865188
{
5187-
return m_memberDef->isDetailedSectionVisible(args[0].toString()=="module",args[0].toString()=="file");
5189+
QCString containerStr = args[0].toString();
5190+
MemberListContainer container = MemberListContainer::Class;
5191+
if (containerStr=="module") container = MemberListContainer::Group;
5192+
else if (containerStr=="file") container = MemberListContainer::File;
5193+
else if (containerStr=="namespace") container = MemberListContainer::Namespace;
5194+
return m_memberDef->isDetailedSectionVisible(container);
51885195
}
51895196
else
51905197
{
@@ -6744,7 +6751,10 @@ class NestingNodeContext::Private
67446751
{
67456752
const LayoutDocEntryMemberDef *lmd = (const LayoutDocEntryMemberDef*)lde.get();
67466753
const MemberList *ml = toNamespaceDef(m_def)->getMemberList(lmd->type);
6747-
m_members->addMembers(ml,visitedClasses);
6754+
if (ml)
6755+
{
6756+
m_members->addMembers(*ml,visitedClasses);
6757+
}
67486758
}
67496759
}
67506760
}
@@ -6757,7 +6767,10 @@ class NestingNodeContext::Private
67576767
{
67586768
const LayoutDocEntryMemberDef *lmd = (const LayoutDocEntryMemberDef*)lde.get();
67596769
const MemberList *ml = toClassDef(m_def)->getMemberList(lmd->type);
6760-
m_members->addMembers(ml,visitedClasses);
6770+
if (ml)
6771+
{
6772+
m_members->addMembers(*ml,visitedClasses);
6773+
}
67616774
}
67626775
}
67636776
}
@@ -6770,7 +6783,10 @@ class NestingNodeContext::Private
67706783
{
67716784
const LayoutDocEntryMemberDef *lmd = (const LayoutDocEntryMemberDef*)lde.get();
67726785
const MemberList *ml = toFileDef(m_def)->getMemberList(lmd->type);
6773-
m_members->addMembers(ml,visitedClasses);
6786+
if (ml)
6787+
{
6788+
m_members->addMembers(*ml,visitedClasses);
6789+
}
67746790
}
67756791
}
67766792
}
@@ -6784,7 +6800,10 @@ class NestingNodeContext::Private
67846800
{
67856801
const LayoutDocEntryMemberDef *lmd = (const LayoutDocEntryMemberDef*)lde.get();
67866802
const MemberList *ml = toGroupDef(m_def)->getMemberList(lmd->type);
6787-
m_members->addMembers(ml,visitedClasses);
6803+
if (ml)
6804+
{
6805+
m_members->addMembers(*ml,visitedClasses);
6806+
}
67886807
}
67896808
}
67906809
}
@@ -6793,7 +6812,7 @@ class NestingNodeContext::Private
67936812
const MemberDef *md = toMemberDef(m_def);
67946813
if (md->isEnumerate() && md->isStrong())
67956814
{
6796-
m_members->addMembers(&md->enumFieldList(),visitedClasses);
6815+
m_members->addMembers(md->enumFieldList(),visitedClasses);
67976816
}
67986817
}
67996818
}
@@ -7121,19 +7140,16 @@ class NestingContext::Private : public GenericNodeListContext
71217140
}
71227141
}
71237142
}
7124-
void addMembers(const MemberList *ml,ClassDefSet &visitedClasses)
7143+
void addMembers(const MemberVector &mv,ClassDefSet &visitedClasses)
71257144
{
7126-
if (ml)
7145+
for (const auto &md : mv)
71277146
{
7128-
for (const auto &md : *ml)
7147+
if (md->visibleInIndex())
71297148
{
7130-
if (md->visibleInIndex())
7131-
{
7132-
NestingNodeContext *nnc = NestingNodeContext::alloc(m_parent,m_type,md,m_index,m_level+1,
7133-
TRUE,FALSE,TRUE,FALSE,visitedClasses);
7134-
append(nnc);
7135-
m_index++;
7136-
}
7149+
NestingNodeContext *nnc = NestingNodeContext::alloc(m_parent,m_type,md,m_index,m_level+1,
7150+
TRUE,FALSE,TRUE,FALSE,visitedClasses);
7151+
append(nnc);
7152+
m_index++;
71377153
}
71387154
}
71397155
}
@@ -7252,11 +7268,12 @@ void NestingContext::addDerivedClasses(const BaseClassList &bcl,bool hideSuper,C
72527268
p->addDerivedClasses(bcl,hideSuper,visitedClasses);
72537269
}
72547270

7255-
void NestingContext::addMembers(const MemberList *ml,ClassDefSet &visitedClasses)
7271+
void NestingContext::addMembers(const MemberVector &mv,ClassDefSet &visitedClasses)
72567272
{
7257-
p->addMembers(ml,visitedClasses);
7273+
p->addMembers(mv,visitedClasses);
72587274
}
72597275

7276+
72607277
//------------------------------------------------------------------------
72617278

72627279
//%% struct ClassTree: Class nesting relations
@@ -9281,7 +9298,7 @@ MemberListContext::MemberListContext(const MemberList *list) : RefCountedContext
92819298
for (const auto &md : *list)
92829299
{
92839300
if ((md->isBriefSectionVisible() && !details) ||
9284-
(md->isDetailedSectionLinkable() && details)
9301+
(md->hasDetailedDescription() && details)
92859302
)
92869303
{
92879304
p->addMember(md);
@@ -9290,14 +9307,13 @@ MemberListContext::MemberListContext(const MemberList *list) : RefCountedContext
92909307
}
92919308
}
92929309

9293-
MemberListContext::MemberListContext(std::vector<const MemberDef *> &&ml) : RefCountedContext("MemberListContext")
9310+
MemberListContext::MemberListContext(const MemberVector &ml) : RefCountedContext("MemberListContext")
92949311
{
92959312
p = new Private;
92969313
for (const auto &md : ml)
92979314
{
92989315
p->addMember(md);
92999316
}
9300-
ml.clear();
93019317
}
93029318

93039319
MemberListContext::~MemberListContext()
@@ -9942,7 +9958,7 @@ class InheritedMemberInfoListContext::Private : public GenericNodeListContext
99429958
{
99439959
const MemberList *ml = cd->getMemberList(lt1);
99449960
const MemberList *ml2 = lt2!=-1 ? cd->getMemberList((MemberListType)lt2) : 0;
9945-
MemberList *combinedList = new MemberList(lt);
9961+
MemberList *combinedList = new MemberList(lt,MemberListContainer::Class);
99469962
addMemberListIncludingGrouped(inheritedFrom,ml,combinedList);
99479963
addMemberListIncludingGrouped(inheritedFrom,ml2,combinedList);
99489964
addMemberGroupsOfClass(inheritedFrom,cd,lt,combinedList);

src/context.h

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "template.h"
2121
#include "classdef.h"
2222
#include "searchindex.h"
23+
#include "memberlist.h"
2324

2425
class Definition;
2526

@@ -64,6 +65,7 @@ class DotGfxHierarchyTable;
6465
class MemberGroup;
6566
class MemberGroupList;
6667
class MemberGroupRefList;
68+
class MemberVector;
6769

6870
//----------------------------------------------------
6971

@@ -625,7 +627,7 @@ class NestingContext : public RefCountedContext, public TemplateListIntf
625627
void addModules(const GroupList &modules,ClassDefSet &visitedClasses);
626628
void addClassHierarchy(const ClassLinkedMap &clLinkedMap,ClassDefSet &visitedClasses);
627629
void addDerivedClasses(const BaseClassList &bcl,bool hideSuper,ClassDefSet &visitedClasses);
628-
void addMembers(const MemberList *ml,ClassDefSet &visitedClasses);
630+
void addMembers(const MemberVector &mv,ClassDefSet &visitedClasses);
629631

630632
private:
631633
NestingContext(const NestingNodeContext *parent,ContextTreeType type,int level);
@@ -1080,8 +1082,8 @@ class MemberListContext : public RefCountedContext, public TemplateListIntf
10801082
{ return new MemberListContext; }
10811083
static MemberListContext *alloc(const MemberList *ml)
10821084
{ return new MemberListContext(ml); }
1083-
static MemberListContext *alloc(std::vector<const MemberDef *> &&ml)
1084-
{ return new MemberListContext(std::move(ml)); }
1085+
static MemberListContext *alloc(const MemberVector &ml)
1086+
{ return new MemberListContext(ml); }
10851087

10861088
// TemplateListIntf
10871089
virtual uint count() const;
@@ -1093,7 +1095,7 @@ class MemberListContext : public RefCountedContext, public TemplateListIntf
10931095
private:
10941096
MemberListContext();
10951097
MemberListContext(const MemberList *ml);
1096-
MemberListContext(std::vector<const MemberDef *> &&ml);
1098+
MemberListContext(const MemberVector &ml);
10971099
~MemberListContext();
10981100
class Private;
10991101
Private *p;

src/definition.cpp

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,9 @@ class DefinitionImpl::IMPL
8686
int defLine;
8787
int defColumn;
8888
Definition::Cookie *cookie;
89+
90+
mutable MemberVector referencesMembers;
91+
mutable MemberVector referencedByMembers;
8992
};
9093

9194

@@ -1085,7 +1088,7 @@ void DefinitionImpl::setBodySegment(int defLine, int bls,int ble)
10851088
m_impl->body->endLine = ble;
10861089
}
10871090

1088-
void DefinitionImpl::setBodyDef(FileDef *fd)
1091+
void DefinitionImpl::setBodyDef(const FileDef *fd)
10891092
{
10901093
if (m_impl->body==0) m_impl->body = new BodyInfo;
10911094
m_impl->body->fileDef=fd;
@@ -1144,10 +1147,10 @@ void DefinitionImpl::writeInlineCode(OutputList &ol,const QCString &scopeName) c
11441147
ol.popGeneratorState();
11451148
}
11461149

1147-
static inline std::vector<const MemberDef*> refMapToVector(const std::unordered_map<std::string,const MemberDef *> &map)
1150+
static inline MemberVector refMapToVector(const std::unordered_map<std::string,const MemberDef *> &map)
11481151
{
11491152
// convert map to a vector of values
1150-
std::vector<const MemberDef *> result;
1153+
MemberVector result;
11511154
std::transform(map.begin(),map.end(), // iterate over map
11521155
std::back_inserter(result), // add results to vector
11531156
[](const auto &item)
@@ -1951,7 +1954,7 @@ int DefinitionImpl::getEndBodyLine() const
19511954
return m_impl->body ? m_impl->body->endLine : -1;
19521955
}
19531956

1954-
FileDef *DefinitionImpl::getBodyDef() const
1957+
const FileDef *DefinitionImpl::getBodyDef() const
19551958
{
19561959
return m_impl->body ? m_impl->body->fileDef : 0;
19571960
}
@@ -1975,14 +1978,22 @@ Definition *DefinitionImpl::getOuterScope() const
19751978
return m_impl->outerScope;
19761979
}
19771980

1978-
std::vector<const MemberDef*> DefinitionImpl::getReferencesMembers() const
1981+
const MemberVector &DefinitionImpl::getReferencesMembers() const
19791982
{
1980-
return refMapToVector(m_impl->sourceRefsDict);
1983+
if (m_impl->referencesMembers.empty() && !m_impl->sourceRefsDict.empty())
1984+
{
1985+
m_impl->referencesMembers = refMapToVector(m_impl->sourceRefsDict);
1986+
}
1987+
return m_impl->referencesMembers;
19811988
}
19821989

1983-
std::vector<const MemberDef*> DefinitionImpl::getReferencedByMembers() const
1990+
const MemberVector &DefinitionImpl::getReferencedByMembers() const
19841991
{
1985-
return refMapToVector(m_impl->sourceRefByDict);
1992+
if (m_impl->referencedByMembers.empty() && !m_impl->sourceRefByDict.empty())
1993+
{
1994+
m_impl->referencedByMembers = refMapToVector(m_impl->sourceRefByDict);
1995+
}
1996+
return m_impl->referencedByMembers;
19861997
}
19871998

19881999
void DefinitionImpl::mergeReferences(const Definition *other)

0 commit comments

Comments
 (0)