Skip to content

Commit 4f2fc75

Browse files
committed
Refactoring: implement visitors using std::visit and std::variant
1 parent d359b0a commit 4f2fc75

Some content is hidden

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

47 files changed

+5521
-6829
lines changed

src/classdef.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2453,14 +2453,15 @@ void ClassDefImpl::writeDeclarationLink(OutputList &ol,bool &found,const QCStrin
24532453
if (!briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
24542454
{
24552455
std::unique_ptr<IDocParser> parser { createDocParser() };
2456-
std::unique_ptr<DocRoot> rootNode { validatingParseDoc(*parser.get(),
2456+
std::unique_ptr<DocNodeVariant> rootNode { validatingParseDoc(*parser.get(),
24572457
briefFile(),briefLine(),this,0,
24582458
briefDescription(),FALSE,FALSE,
24592459
QCString(),TRUE,FALSE,Config_getBool(MARKDOWN_SUPPORT)) };
2460-
if (rootNode && !rootNode->isEmpty())
2460+
const DocRoot *root = std::get_if<DocRoot>(rootNode.get());
2461+
if (root && !root->isEmpty())
24612462
{
24622463
ol.startMemberDescription(anchor());
2463-
ol.writeDoc(rootNode.get(),this,0);
2464+
ol.writeDoc(*rootNode,this,0);
24642465
if (isLinkableInProject())
24652466
{
24662467
writeMoreLink(ol,anchor());

src/conceptdef.cpp

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -300,18 +300,19 @@ void ConceptDefImpl::writeBriefDescription(OutputList &ol) const
300300
if (hasBriefDescription())
301301
{
302302
std::unique_ptr<IDocParser> parser { createDocParser() };
303-
std::unique_ptr<DocRoot> rootNode { validatingParseDoc(
303+
std::unique_ptr<DocNodeVariant> rootNode { validatingParseDoc(
304304
*parser.get(),briefFile(),briefLine(),this,0,
305305
briefDescription(),TRUE,FALSE,
306306
QCString(),TRUE,FALSE,Config_getBool(MARKDOWN_SUPPORT)) };
307-
if (rootNode && !rootNode->isEmpty())
307+
const DocRoot *root = &std::get<DocRoot>(*rootNode);
308+
if (rootNode && !root->isEmpty())
308309
{
309310
ol.startParagraph();
310311
ol.pushGeneratorState();
311312
ol.disableAllBut(OutputGenerator::Man);
312313
ol.writeString(" - ");
313314
ol.popGeneratorState();
314-
ol.writeDoc(rootNode.get(),this,0);
315+
ol.writeDoc(*rootNode,this,0);
315316
ol.pushGeneratorState();
316317
ol.disable(OutputGenerator::RTF);
317318
ol.writeString(" \n");
@@ -632,14 +633,15 @@ void ConceptDefImpl::writeDeclarationLink(OutputList &ol,bool &found,const QCStr
632633
if (!briefDescription().isEmpty() && Config_getBool(BRIEF_MEMBER_DESC))
633634
{
634635
std::unique_ptr<IDocParser> parser { createDocParser() };
635-
std::unique_ptr<DocRoot> rootNode { validatingParseDoc(
636+
std::unique_ptr<DocNodeVariant> rootNode { validatingParseDoc(
636637
*parser.get(),briefFile(),briefLine(),this,0,
637638
briefDescription(),FALSE,FALSE,
638639
QCString(),TRUE,FALSE,Config_getBool(MARKDOWN_SUPPORT)) };
639-
if (rootNode && !rootNode->isEmpty())
640+
const DocRoot *root = std::get_if<DocRoot>(rootNode.get());
641+
if (root && !root->isEmpty())
640642
{
641643
ol.startMemberDescription(anchor());
642-
ol.writeDoc(rootNode.get(),this,0);
644+
ol.writeDoc(*rootNode,this,0);
643645
ol.endMemberDescription();
644646
}
645647
}

src/context.cpp

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1242,7 +1242,7 @@ static TemplateVariant parseDoc(const Definition *def,const QCString &file,int l
12421242
{
12431243
TemplateVariant result;
12441244
std::unique_ptr<IDocParser> parser { createDocParser() };
1245-
std::unique_ptr<DocRoot> root { validatingParseDoc(
1245+
std::unique_ptr<DocNodeVariant> rootNode { validatingParseDoc(
12461246
*parser.get(),file,line,def,0,docStr,TRUE,FALSE,
12471247
QCString(),isBrief,FALSE,Config_getBool(MARKDOWN_SUPPORT))
12481248
};
@@ -1253,22 +1253,23 @@ static TemplateVariant parseDoc(const Definition *def,const QCString &file,int l
12531253
{
12541254
HtmlCodeGenerator codeGen(ts,relPath);
12551255
HtmlDocVisitor visitor(ts,codeGen,def);
1256-
root->accept(&visitor);
1256+
std::visit(visitor,*rootNode);
12571257
}
12581258
break;
12591259
case ContextOutputFormat_Latex:
12601260
{
12611261
LatexCodeGenerator codeGen(ts,relPath,file);
12621262
LatexDocVisitor visitor(ts,codeGen,def->getDefFileExtension(),FALSE);
1263-
root->accept(&visitor);
1263+
std::visit(visitor,*rootNode);
12641264
}
12651265
break;
12661266
// TODO: support other generators
12671267
default:
12681268
err("context.cpp: output format not yet supported\n");
12691269
break;
12701270
}
1271-
bool isEmpty = root->isEmpty();
1271+
const DocRoot *root = std::get_if<DocRoot>(rootNode.get());
1272+
bool isEmpty = root && root->isEmpty();
12721273
if (isEmpty)
12731274
result = "";
12741275
else

src/dirdef.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -269,17 +269,18 @@ void DirDefImpl::writeBriefDescription(OutputList &ol)
269269
if (hasBriefDescription())
270270
{
271271
std::unique_ptr<IDocParser> parser { createDocParser() };
272-
std::unique_ptr<DocRoot> rootNode { validatingParseDoc(
272+
std::unique_ptr<DocNodeVariant> rootNode { validatingParseDoc(
273273
*parser.get(), briefFile(),briefLine(),this,0,briefDescription(),TRUE,FALSE,
274274
QCString(),FALSE,FALSE,Config_getBool(MARKDOWN_SUPPORT)) };
275-
if (rootNode && !rootNode->isEmpty())
275+
const DocRoot *root = std::get_if<DocRoot>(rootNode.get());
276+
if (root && !root->isEmpty())
276277
{
277278
ol.startParagraph();
278279
ol.pushGeneratorState();
279280
ol.disableAllBut(OutputGenerator::Man);
280281
ol.writeString(" - ");
281282
ol.popGeneratorState();
282-
ol.writeDoc(rootNode.get(),this,0);
283+
ol.writeDoc(*rootNode,this,0);
283284
ol.pushGeneratorState();
284285
ol.disable(OutputGenerator::RTF);
285286
ol.writeString(" \n");

src/docbookgen.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -623,13 +623,11 @@ DB_GEN_C
623623
}
624624
}
625625

626-
void DocbookGenerator::writeDoc(DocNode *n,const Definition *ctx,const MemberDef *,int)
626+
void DocbookGenerator::writeDoc(const DocNodeVariant &n,const Definition *ctx,const MemberDef *,int)
627627
{
628628
DB_GEN_C
629-
DocbookDocVisitor *visitor =
630-
new DocbookDocVisitor(m_t,*this,ctx?ctx->getDefFileExtension():QCString());
631-
n->accept(visitor);
632-
delete visitor;
629+
auto visitor { DocbookDocVisitor(m_t,*this,ctx?ctx->getDefFileExtension():QCString()) };
630+
std::visit(visitor,n);
633631
}
634632

635633
void DocbookGenerator::startParagraph(const QCString &)

src/docbookgen.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ class DocbookGenerator : public OutputGenerator
131131
{ m_codeGen.endCodeFragment(style); }
132132
// ---------------------------
133133

134-
void writeDoc(DocNode *,const Definition *ctx,const MemberDef *md,int id);
134+
void writeDoc(const DocNodeVariant &node,const Definition *ctx,const MemberDef *md,int id);
135135

136136
///////////////////////////////////////////////////////////////
137137
// structural output interface

0 commit comments

Comments
 (0)