summaryrefslogtreecommitdiff
path: root/src/dirdef.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/dirdef.h')
-rw-r--r--src/dirdef.h185
1 files changed, 185 insertions, 0 deletions
diff --git a/src/dirdef.h b/src/dirdef.h
new file mode 100644
index 0000000..6e2e762
--- /dev/null
+++ b/src/dirdef.h
@@ -0,0 +1,185 @@
+/******************************************************************************
+ *
+ * $Id: $
+ *
+ * Copyright (C) 1997-2012 by Dimitri van Heesch.
+ *
+ * Permission to use, copy, modify, and distribute this software and its
+ * documentation under the terms of the GNU General Public License is hereby
+ * granted. No representations are made about the suitability of this software
+ * for any purpose. It is provided "as is" without express or implied warranty.
+ * See the GNU General Public License for more details.
+ *
+ * Documents produced by Doxygen are derivative works derived from the
+ * input used in their production; they are not affected by this license.
+ *
+ */
+
+#ifndef DIRDEF_H
+#define DIRDEF_H
+
+#include "qtbc.h"
+#include "sortdict.h"
+#include "definition.h"
+
+#include <qlist.h>
+
+class FileList;
+class ClassSDict;
+class QStrList;
+class FileDef;
+class OutputList;
+class UsedDir;
+class FTextStream;
+
+class DirDef;
+
+/** A list of directories. */
+class DirList : public QList<DirDef>
+{
+ public:
+ int compareItems(GCI item1,GCI item2);
+};
+
+/** A model of a directory symbol. */
+class DirDef : public Definition
+{
+ public:
+ DirDef(const char *path);
+ virtual ~DirDef();
+
+ // accessors
+ DefType definitionType() const { return TypeDir; }
+ QCString getOutputFileBase() const;
+ QCString anchor() const { return QCString(); }
+ bool isLinkableInProject() const;
+ bool isLinkable() const;
+ QCString displayName(bool=TRUE) const { return m_dispName; }
+ QCString shortName() const { return m_shortName; }
+ void addSubDir(DirDef *subdir);
+ FileList * getFiles() const { return m_fileList; }
+ void addFile(FileDef *fd);
+ const DirList &subDirs() const { return m_subdirs; }
+ bool isCluster() const { return m_subdirs.count()>0; }
+ int level() const { return m_level; }
+ DirDef *parent() const { return m_parent; }
+ int dirCount() const { return m_dirCount; }
+ const QDict<UsedDir> *usedDirs() const { return m_usedDirs; }
+ bool isParentOf(DirDef *dir) const;
+ bool depGraphIsTrivial() const;
+
+ // generate output
+ void writeDocumentation(OutputList &ol);
+ void writeDepGraph(FTextStream &t);
+
+ static DirDef *mergeDirectoryInTree(const QCString &path);
+ bool visited;
+ void setDiskName(const QCString &name) { m_diskName = name; }
+
+ private:
+ friend void computeDirDependencies();
+
+ void writeDetailedDescription(OutputList &ol,const QCString &title);
+ void writeBriefDescription(OutputList &ol);
+ void writeDirectoryGraph(OutputList &ol);
+ void writeSubDirList(OutputList &ol);
+ void writeFileList(OutputList &ol);
+ void startMemberDeclarations(OutputList &ol);
+ void endMemberDeclarations(OutputList &ol);
+
+ void setLevel();
+ static DirDef *createNewDir(const char *path);
+ static bool matchPath(const QCString &path,QStrList &l);
+ void addUsesDependency(DirDef *usedDir,FileDef *srcFd,
+ FileDef *dstFd,bool inherited);
+ void computeDependencies();
+
+ DirList m_subdirs;
+ QCString m_dispName;
+ QCString m_shortName;
+ QCString m_diskName;
+ FileList *m_fileList; // list of files in the group
+ int m_dirCount;
+ int m_level;
+ DirDef *m_parent;
+ QDict<UsedDir> *m_usedDirs;
+};
+
+/** Class representing a pair of FileDef objects */
+class FilePair
+{
+ public:
+ FilePair(FileDef *src,FileDef *dst) : m_src(src), m_dst(dst) {}
+ const FileDef *source() const { return m_src; }
+ const FileDef *destination() const { return m_dst; }
+ private:
+ FileDef *m_src;
+ FileDef *m_dst;
+};
+
+/** A sorted dictionary of FilePair objects. */
+class FilePairDict : public SDict<FilePair>
+{
+ public:
+ FilePairDict(int size) : SDict<FilePair>(size) {}
+ int compareItems(GCI item1,GCI item2);
+};
+
+/** Usage information of a directory. */
+class UsedDir
+{
+ public:
+ UsedDir(DirDef *dir,bool inherited);
+ virtual ~UsedDir();
+ void addFileDep(FileDef *srcFd,FileDef *dstFd);
+ FilePair *findFilePair(const char *name);
+ const FilePairDict &filePairs() const { return m_filePairs; }
+ const DirDef *dir() const { return m_dir; }
+ bool inherited() const { return m_inherited; }
+
+ private:
+ DirDef *m_dir;
+ FilePairDict m_filePairs;
+ bool m_inherited;
+};
+
+/** A usage relation between two directories. */
+class DirRelation
+{
+ public:
+ DirRelation(const QCString &name,DirDef *src,UsedDir *dst)
+ : m_name(name), m_src(src), m_dst(dst) {}
+ DirDef *source() const { return m_src; }
+ UsedDir *destination() const { return m_dst; }
+ void writeDocumentation(OutputList &ol);
+ QCString getOutputFileBase() const { return m_name; }
+
+ private:
+ QCString m_name;
+ DirDef *m_src;
+ UsedDir *m_dst;
+};
+
+inline int DirList::compareItems(GCI item1,GCI item2)
+{
+ return stricmp(((DirDef *)item1)->shortName(),((DirDef *)item2)->shortName());
+}
+
+/** A sorted dictionary of DirDef objects. */
+class DirSDict : public SDict<DirDef>
+{
+ public:
+ DirSDict(int size) : SDict<DirDef>(size) {}
+ int compareItems(GCI item1,GCI item2)
+ {
+ return stricmp(((DirDef *)item1)->shortName(),((DirDef *)item2)->shortName());
+ }
+};
+
+
+void buildDirectories();
+void generateDirDocs(OutputList &ol);
+void computeDirDependencies();
+void writeDirDependencyGraph(const char *file);
+
+#endif