Doxygen
Loading...
Searching...
No Matches
dirdef.h File Reference
#include <vector>
#include <map>
#include "dstring.h"
#include "linkedmap.h"
#include "definition.h"
Include dependency graph for dirdef.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  FilePair
 Class representing a pair of FileDef objects. More...
class  FilePairLinkedMap
 A linked map of file pairs. More...
class  UsedDir
 Usage information of a directory. More...
class  DirDef
 A model of a directory symbol. More...
class  DirDef::UsedDirLinkedMap
class  DirRelation
 A usage relation between two directories. More...
class  DirLinkedMap
 A linked map of directories. More...
class  DirList
 A list of directories. More...
class  DirRelationLinkedMap

Functions

bool compareDirDefs (const DirDef *item1, const DirDef *item2)
DirDeftoDirDef (Definition *d)
const DirDeftoDirDef (const Definition *d)
void buildDirectories ()
void generateDirDocs (OutputList &ol)
void computeDirDependencies ()

Function Documentation

◆ buildDirectories()

void buildDirectories ( )

Definition at line 1095 of file dirdef.cpp.

1096{
1097 AUTO_TRACE();
1098 // for each input file
1099 for (const auto &fn : *Doxygen::inputNameLinkedMap)
1100 {
1101 for (const auto &fd : *fn)
1102 {
1103 if (fd->getReference().empty())
1104 {
1105 DirDef *dir=Doxygen::dirLinkedMap->find(fd->getPath());
1106 if (dir==nullptr) // new directory
1107 {
1108 dir = DirDefImpl::mergeDirectoryInTree(fd->getPath());
1109 }
1110 if (dir && !fd->isDocumentationFile()) dir->addFile(fd.get());
1111 }
1112 else
1113 {
1114 // do something for file imported via tag files.
1115 }
1116 }
1117 }
1118
1119 // compute relations between directories => introduce container dirs.
1120 for (const auto &dir : *Doxygen::dirLinkedMap)
1121 {
1122 DString name = dir->name();
1123 size_t i = name.length()>=2 ? name.rfind('/',name.length()-2) : DString::npos;
1124 if (i!=DString::npos && i>0)
1125 {
1127 //if (parent==0) parent=root;
1128 if (parent)
1129 {
1130 parent->addSubDir(dir.get());
1131 AUTO_TRACE_ADD("DirDefImpl::addSubdir(): Adding subdir {} to {}",
1132 dir->displayName(), parent->displayName());
1133 }
1134 }
1135 }
1136
1137 // sort the directory contents
1138 for (const auto &dir : *Doxygen::dirLinkedMap)
1139 {
1140 dir->sort();
1141 }
1142
1143 // short the directories themselves
1144 std::stable_sort(Doxygen::dirLinkedMap->begin(),
1146 [](const auto &d1,const auto &d2)
1147 {
1148 DString s1 = d1->shortName(), s2 = d2->shortName();
1149 int i = dstricmp_sort(s1,s2);
1150 if (i==0) // if sort name are equal, sort on full path
1151 {
1152 DString n1 = d1->name(), n2 = d2->name();
1153 int n = dstricmp_sort(n1,n2);
1154 return n < 0;
1155 }
1156 return i < 0;
1157 });
1158
1159 // set the directory index identifier
1160 int dirIndex=0;
1161 for (const auto &dir : *Doxygen::dirLinkedMap)
1162 {
1163 dir->setDirIndex(dirIndex++);
1164 }
1165
1167}
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
Definition dstring.h:88
size_t rfind(char c, size_t pos=npos) const
Definition dstring.h:248
static constexpr size_t npos
value used to indicate 'not found' or 'to the end of the string', matching std::string::npos
Definition dstring.h:182
DString left(size_t len) const
Definition dstring.h:310
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition dstring.h:155
virtual const DString & name() const =0
virtual DString displayName(bool includeScope=true) const =0
A model of a directory symbol.
Definition dirdef.h:108
virtual void sort()=0
virtual void addFile(FileDef *fd)=0
virtual void setDirIndex(int index)=0
static DirDef * mergeDirectoryInTree(const DString &path)
Definition dirdef.cpp:894
static FileNameLinkedMap * inputNameLinkedMap
Definition doxygen.h:97
static DirLinkedMap * dirLinkedMap
Definition doxygen.h:120
const T * find(const std::string &key) const
Definition linkedmap.h:47
DirIterator begin(DirIterator it) noexcept
Definition dir.cpp:171
DirIterator end(const DirIterator &) noexcept
Definition dir.cpp:176
static void computeCommonDirPrefix()
In order to create stable, but unique directory names, we compute the common part of the path shared ...
Definition dirdef.cpp:1018
#define AUTO_TRACE_ADD(...)
Definition docnode.cpp:52
#define AUTO_TRACE(...)
Definition docnode.cpp:51
constexpr DocNodeVariant * parent(DocNodeVariant *n)
returns the parent node of a given node n or nullptr if the node has no parent.
Definition docnode.h:1335
int dstricmp_sort(const char *str1, const char *str2)
Definition dstring.h:71

References DirDef::addFile(), AUTO_TRACE, AUTO_TRACE_ADD, begin(), computeCommonDirPrefix(), Doxygen::dirLinkedMap, dstricmp_sort(), end(), LinkedMap< T, Hash, KeyEqual, Map >::find(), Doxygen::inputNameLinkedMap, DString::left(), DString::length(), DirDefImpl::mergeDirectoryInTree(), DString::npos, parent(), and DString::rfind().

Referenced by parseInput().

◆ compareDirDefs()

bool compareDirDefs ( const DirDef * item1,
const DirDef * item2 )

Definition at line 1208 of file dirdef.cpp.

1209{
1210 return dstricmp_sort(item1->shortName(),item2->shortName()) < 0;
1211}
virtual const DString shortName() const =0

References dstricmp_sort(), and DirDef::shortName().

Referenced by DirDefImpl::sort(), and GroupDefImpl::sortMemberLists().

◆ computeDirDependencies()

void computeDirDependencies ( )

Definition at line 1169 of file dirdef.cpp.

1170{
1171 AUTO_TRACE();
1172 // compute nesting level for each directory
1173 for (const auto &dir : *Doxygen::dirLinkedMap)
1174 {
1175 dir->setLevel();
1176 }
1177
1178 // compute uses dependencies between directories
1179 for (const auto &dir : *Doxygen::dirLinkedMap)
1180 {
1181 AUTO_TRACE_ADD("computeDependencies for {}: #dirs={}",dir->name(),Doxygen::dirLinkedMap->size());
1182 dir->computeDependencies();
1183 }
1184}
size_t size() const
Definition linkedmap.h:210

References AUTO_TRACE, AUTO_TRACE_ADD, Doxygen::dirLinkedMap, and LinkedMap< T, Hash, KeyEqual, Map >::size().

Referenced by parseInput().

◆ generateDirDocs()

void generateDirDocs ( OutputList & ol)

Definition at line 1186 of file dirdef.cpp.

1187{
1188 AUTO_TRACE();
1189 for (const auto &dir : *Doxygen::dirLinkedMap)
1190 {
1191 ol.pushGeneratorState();
1192 if (!dir->hasDocumentation())
1193 {
1195 }
1196 dir->writeDocumentation(ol);
1197 ol.popGeneratorState();
1198 }
1199 //if (Config_getBool(DIRECTORY_GRAPH))
1200 {
1201 for (const auto &dr : Doxygen::dirRelations)
1202 {
1203 dr->writeDocumentation(ol);
1204 }
1205 }
1206}
static DirRelationLinkedMap dirRelations
Definition doxygen.h:121
void pushGeneratorState()
void disableAllBut(OutputType o)
void popGeneratorState()

References AUTO_TRACE, Doxygen::dirLinkedMap, Doxygen::dirRelations, OutputList::disableAllBut(), Html, OutputList::popGeneratorState(), and OutputList::pushGeneratorState().

Referenced by generateOutput().

◆ toDirDef() [1/2]

const DirDef * toDirDef ( const Definition * d)

Definition at line 1228 of file dirdef.cpp.

1229{
1230 if (d==nullptr) return nullptr;
1231 if (d && typeid(*d)==typeid(DirDefImpl))
1232 {
1233 return static_cast<const DirDef*>(d);
1234 }
1235 else
1236 {
1237 return nullptr;
1238 }
1239}

◆ toDirDef() [2/2]

DirDef * toDirDef ( Definition * d)

Definition at line 1215 of file dirdef.cpp.

1216{
1217 if (d==nullptr) return nullptr;
1218 if (d && typeid(*d)==typeid(DirDefImpl))
1219 {
1220 return static_cast<DirDef*>(d);
1221 }
1222 else
1223 {
1224 return nullptr;
1225 }
1226}