Blame src/filedef.h

Packit 1c1d7e
/******************************************************************************
Packit 1c1d7e
 *
Packit 1c1d7e
 * 
Packit 1c1d7e
 *
Packit 1c1d7e
 * Copyright (C) 1997-2015 by Dimitri van Heesch.
Packit 1c1d7e
 *
Packit 1c1d7e
 * Permission to use, copy, modify, and distribute this software and its
Packit 1c1d7e
 * documentation under the terms of the GNU General Public License is hereby 
Packit 1c1d7e
 * granted. No representations are made about the suitability of this software 
Packit 1c1d7e
 * for any purpose. It is provided "as is" without express or implied warranty.
Packit 1c1d7e
 * See the GNU General Public License for more details.
Packit 1c1d7e
 *
Packit 1c1d7e
 * Documents produced by Doxygen are derivative works derived from the
Packit 1c1d7e
 * input used in their production; they are not affected by this license.
Packit 1c1d7e
 *
Packit 1c1d7e
 */
Packit 1c1d7e
Packit 1c1d7e
#ifndef FILEDEF_H
Packit 1c1d7e
#define FILEDEF_H
Packit 1c1d7e
Packit 1c1d7e
#include "index.h"
Packit 1c1d7e
#include <qlist.h>
Packit 1c1d7e
#include <qintdict.h>
Packit 1c1d7e
#include <qdict.h>
Packit 1c1d7e
#include "definition.h"
Packit 1c1d7e
#include "sortdict.h"
Packit 1c1d7e
#include "memberlist.h"
Packit 1c1d7e
Packit 1c1d7e
class MemberList;
Packit 1c1d7e
class FileDef;
Packit 1c1d7e
class FileList;
Packit 1c1d7e
class ClassSDict;
Packit 1c1d7e
class ClassDef;
Packit 1c1d7e
class ClassList;
Packit 1c1d7e
class MemberDef;
Packit 1c1d7e
class OutputList;
Packit 1c1d7e
class NamespaceDef;
Packit 1c1d7e
class NamespaceSDict;
Packit 1c1d7e
class MemberGroupSDict;
Packit 1c1d7e
class PackageDef;
Packit 1c1d7e
class DirDef;
Packit 1c1d7e
class FTextStream;
Packit 1c1d7e
Packit 1c1d7e
/** Class representing the data associated with a \#include statement. */
Packit 1c1d7e
struct IncludeInfo
Packit 1c1d7e
{
Packit 1c1d7e
  IncludeInfo() : fileDef(0), local(FALSE), imported(FALSE), indirect(FALSE) {}
Packit 1c1d7e
  ~IncludeInfo() {}
Packit 1c1d7e
  FileDef *fileDef;
Packit 1c1d7e
  QCString includeName;
Packit 1c1d7e
  bool local;
Packit 1c1d7e
  bool imported;
Packit 1c1d7e
  bool indirect;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** A model of a file symbol. 
Packit 1c1d7e
 *   
Packit 1c1d7e
 *  An object of this class contains all file information that is gathered.
Packit 1c1d7e
 *  This includes the members and compounds defined in the file.
Packit 1c1d7e
 *   
Packit 1c1d7e
 *  The member writeDocumentation() can be used to generate the page of
Packit 1c1d7e
 *  documentation to HTML and LaTeX.
Packit 1c1d7e
 */
Packit 1c1d7e
class FileDef : public Definition
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    //enum FileType { Source, Header, Unknown };
Packit 1c1d7e
Packit 1c1d7e
    FileDef(const char *p,const char *n,const char *ref=0,const char *dn=0);
Packit 1c1d7e
   ~FileDef();
Packit 1c1d7e
Packit 1c1d7e
    // ----------------------------------------------------------------------
Packit 1c1d7e
Packit 1c1d7e
    DefType definitionType() const { return TypeFile; }
Packit 1c1d7e
Packit 1c1d7e
    /*! Returns the unique file name (this may include part of the path). */
Packit 1c1d7e
    QCString name() const;
Packit 1c1d7e
    QCString displayName(bool=TRUE) const { return name(); }
Packit 1c1d7e
    QCString fileName() const { return m_fileName; }
Packit 1c1d7e
    
Packit 1c1d7e
    QCString getOutputFileBase() const;
Packit 1c1d7e
Packit 1c1d7e
    QCString anchor() const { return QCString(); }
Packit 1c1d7e
Packit 1c1d7e
    QCString getSourceFileBase() const;
Packit 1c1d7e
    
Packit 1c1d7e
    /*! Returns the name of the verbatim copy of this file (if any). */
Packit 1c1d7e
    QCString includeName() const;
Packit 1c1d7e
Packit 1c1d7e
    QCString includeDependencyGraphFileName() const;
Packit 1c1d7e
Packit 1c1d7e
    QCString includedByDependencyGraphFileName() const;
Packit 1c1d7e
    
Packit 1c1d7e
    /*! Returns the absolute path including the file name. */
Packit 1c1d7e
    QCString absFilePath() const { return m_filePath; }
Packit 1c1d7e
    
Packit 1c1d7e
    /*! Returns the name as it is used in the documentation */
Packit 1c1d7e
    const QCString &docName() const { return m_docname; }
Packit 1c1d7e
Packit 1c1d7e
    /*! Returns TRUE if this file is a source file. */
Packit 1c1d7e
    bool isSource() const { return m_isSource; }
Packit 1c1d7e
Packit 1c1d7e
    bool isDocumentationFile() const;
Packit 1c1d7e
    
Packit 1c1d7e
    Definition *getSourceDefinition(int lineNr) const;
Packit 1c1d7e
    MemberDef *getSourceMember(int lineNr) const;
Packit 1c1d7e
Packit 1c1d7e
    /*! Returns the absolute path of this file. */ 
Packit 1c1d7e
    QCString getPath() const { return m_path; }
Packit 1c1d7e
Packit 1c1d7e
    /*! Returns version of this file. */
Packit 1c1d7e
    QCString getVersion() const { return m_fileVersion; }
Packit 1c1d7e
    
Packit 1c1d7e
    bool isLinkableInProject() const;
Packit 1c1d7e
Packit 1c1d7e
    bool isLinkable() const { return isLinkableInProject() || isReference(); }
Packit 1c1d7e
    bool isIncluded(const QCString &name) const;
Packit 1c1d7e
Packit 1c1d7e
    PackageDef *packageDef() const { return m_package; }
Packit 1c1d7e
    DirDef *getDirDef() const      { return m_dir; }
Packit 1c1d7e
    NamespaceSDict *getUsedNamespaces() const;
Packit 1c1d7e
    SDict<Definition> *getUsedClasses() const      { return m_usingDeclList; }
Packit 1c1d7e
    QList<IncludeInfo> *includeFileList() const    { return m_includeList; }
Packit 1c1d7e
    QList<IncludeInfo> *includedByFileList() const { return m_includedByList; }
Packit 1c1d7e
    void getAllIncludeFilesRecursively(QStrList &incFiles) const;
Packit 1c1d7e
Packit 1c1d7e
    MemberList *getMemberList(MemberListType lt) const;
Packit 1c1d7e
    const QList<MemberList> &getMemberLists() const { return m_memberLists; }
Packit 1c1d7e
Packit 1c1d7e
    /* user defined member groups */
Packit 1c1d7e
    MemberGroupSDict *getMemberGroupSDict() const { return m_memberGroupSDict; }
Packit 1c1d7e
    NamespaceSDict *getNamespaceSDict() const     { return m_namespaceSDict; }
Packit 1c1d7e
    ClassSDict *getClassSDict() const             { return m_classSDict; }
Packit 1c1d7e
Packit 1c1d7e
    QCString title() const;
Packit 1c1d7e
    bool hasDetailedDescription() const;
Packit 1c1d7e
    QCString fileVersion() const;
Packit 1c1d7e
Packit 1c1d7e
    bool subGrouping() const { return m_subGrouping; }
Packit 1c1d7e
    
Packit 1c1d7e
    //---------------------------------
Packit 1c1d7e
Packit 1c1d7e
    void addSourceRef(int line,Definition *d,MemberDef *md);
Packit 1c1d7e
Packit 1c1d7e
    void writeDocumentation(OutputList &ol);
Packit 1c1d7e
    void writeMemberPages(OutputList &ol);
Packit 1c1d7e
    void writeQuickMemberLinks(OutputList &ol,MemberDef *currentMd) const;
Packit 1c1d7e
    void writeSummaryLinks(OutputList &ol);
Packit 1c1d7e
    void writeTagFile(FTextStream &t);
Packit 1c1d7e
Packit 1c1d7e
    void startParsing();
Packit 1c1d7e
    void writeSource(OutputList &ol,bool sameTu,QStrList &filesInSameTu);
Packit 1c1d7e
    void parseSource(bool sameTu,QStrList &filesInSameTu);
Packit 1c1d7e
    void finishParsing();
Packit 1c1d7e
    void setDiskName(const QCString &name);
Packit 1c1d7e
Packit 1c1d7e
    void insertMember(MemberDef *md);
Packit 1c1d7e
    void insertClass(ClassDef *cd);
Packit 1c1d7e
    void insertNamespace(NamespaceDef *nd);
Packit 1c1d7e
    void computeAnchors();
Packit 1c1d7e
Packit 1c1d7e
    void setPackageDef(PackageDef *pd) { m_package=pd; }
Packit 1c1d7e
    void setDirDef(DirDef *dd) { m_dir=dd; }
Packit 1c1d7e
Packit 1c1d7e
    void addUsingDirective(NamespaceDef *nd);
Packit 1c1d7e
    void addUsingDeclaration(Definition *def);
Packit 1c1d7e
    void combineUsingRelations();
Packit 1c1d7e
Packit 1c1d7e
    bool generateSourceFile() const;
Packit 1c1d7e
    void sortMemberLists();
Packit 1c1d7e
Packit 1c1d7e
    void addIncludeDependency(FileDef *fd,const char *incName,bool local,bool imported,bool indirect);
Packit 1c1d7e
    void addIncludedByDependency(FileDef *fd,const char *incName,bool local,bool imported);
Packit 1c1d7e
Packit 1c1d7e
    void addMembersToMemberGroup();
Packit 1c1d7e
    void distributeMemberGroupDocumentation();
Packit 1c1d7e
    void findSectionsInDocumentation();
Packit 1c1d7e
    void addIncludedUsingDirectives();
Packit 1c1d7e
Packit 1c1d7e
    void addListReferences();
Packit 1c1d7e
    //bool includes(FileDef *incFile,QDict<FileDef> *includedFiles) const;
Packit 1c1d7e
    //bool includesByName(const QCString &name) const;
Packit 1c1d7e
    bool visited;
Packit 1c1d7e
Packit 1c1d7e
  protected:
Packit 1c1d7e
    /**
Packit 1c1d7e
     * Retrieves the file version from version control system.
Packit 1c1d7e
     */
Packit 1c1d7e
    void acquireFileVersion();
Packit 1c1d7e
Packit 1c1d7e
  private: 
Packit 1c1d7e
    MemberList *createMemberList(MemberListType lt);
Packit 1c1d7e
    void addMemberToList(MemberListType lt,MemberDef *md);
Packit 1c1d7e
    void writeMemberDeclarations(OutputList &ol,MemberListType lt,const QCString &title);
Packit 1c1d7e
    void writeMemberDocumentation(OutputList &ol,MemberListType lt,const QCString &title);
Packit 1c1d7e
    void writeIncludeFiles(OutputList &ol);
Packit 1c1d7e
    void writeIncludeGraph(OutputList &ol);
Packit 1c1d7e
    void writeIncludedByGraph(OutputList &ol);
Packit 1c1d7e
    void writeMemberGroups(OutputList &ol);
Packit 1c1d7e
    void writeAuthorSection(OutputList &ol);
Packit 1c1d7e
    void writeSourceLink(OutputList &ol);
Packit 1c1d7e
    void writeNamespaceDeclarations(OutputList &ol,const QCString &title,
Packit 1c1d7e
            bool isConstantGroup);
Packit 1c1d7e
    void writeClassDeclarations(OutputList &ol,const QCString &title);
Packit 1c1d7e
    void writeInlineClasses(OutputList &ol);
Packit 1c1d7e
    void startMemberDeclarations(OutputList &ol);
Packit 1c1d7e
    void endMemberDeclarations(OutputList &ol);
Packit 1c1d7e
    void startMemberDocumentation(OutputList &ol);
Packit 1c1d7e
    void endMemberDocumentation(OutputList &ol);
Packit 1c1d7e
    void writeDetailedDescription(OutputList &ol,const QCString &title);
Packit 1c1d7e
    void writeBriefDescription(OutputList &ol);
Packit 1c1d7e
Packit 1c1d7e
    QDict<IncludeInfo>   *m_includeDict;
Packit 1c1d7e
    QList<IncludeInfo>   *m_includeList;
Packit 1c1d7e
    QDict<IncludeInfo>   *m_includedByDict;
Packit 1c1d7e
    QList<IncludeInfo>   *m_includedByList;
Packit 1c1d7e
    NamespaceSDict       *m_usingDirList;
Packit 1c1d7e
    SDict<Definition>    *m_usingDeclList;
Packit 1c1d7e
    QCString              m_path;
Packit 1c1d7e
    QCString              m_filePath;
Packit 1c1d7e
    QCString              m_inclDepFileName;
Packit 1c1d7e
    QCString              m_inclByDepFileName;
Packit 1c1d7e
    QCString              m_outputDiskName;
Packit 1c1d7e
    QCString              m_fileName;
Packit 1c1d7e
    QCString              m_docname;
Packit 1c1d7e
    QIntDict<Definition> *m_srcDefDict;
Packit 1c1d7e
    QIntDict<MemberDef>  *m_srcMemberDict;
Packit 1c1d7e
    bool                  m_isSource;
Packit 1c1d7e
    QCString              m_fileVersion;
Packit 1c1d7e
    PackageDef           *m_package;
Packit 1c1d7e
    DirDef               *m_dir;
Packit 1c1d7e
    QList<MemberList>     m_memberLists;
Packit 1c1d7e
    MemberGroupSDict     *m_memberGroupSDict;
Packit 1c1d7e
    NamespaceSDict       *m_namespaceSDict;
Packit 1c1d7e
    ClassSDict           *m_classSDict;
Packit 1c1d7e
    bool                  m_subGrouping;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Class representing a list of FileDef objects. */
Packit 1c1d7e
class FileList : public QList<FileDef>
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    FileList() : m_pathName("tmp") {}
Packit 1c1d7e
    FileList(const char *path) : QList<FileDef>(), m_pathName(path) {}
Packit 1c1d7e
   ~FileList() {}
Packit 1c1d7e
    QCString path() const { return m_pathName; }
Packit 1c1d7e
  private:
Packit 1c1d7e
    int compareValues(const FileDef *md1,const FileDef *md2) const
Packit 1c1d7e
    {
Packit 1c1d7e
      return qstricmp(md1->name(),md2->name());
Packit 1c1d7e
    }
Packit 1c1d7e
    QCString m_pathName;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
class OutputNameList : public QList<FileList>
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    OutputNameList() : QList<FileList>() {}
Packit 1c1d7e
   ~OutputNameList() {}
Packit 1c1d7e
 private:
Packit 1c1d7e
    int compareValues(const FileList *fl1,const FileList *fl2) const
Packit 1c1d7e
    {
Packit 1c1d7e
      return qstricmp(fl1->path(),fl2->path());
Packit 1c1d7e
    }
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
class OutputNameDict : public QDict<FileList>
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    OutputNameDict(int size) : QDict<FileList>(size) {}
Packit 1c1d7e
   ~OutputNameDict() {}
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
class Directory;
Packit 1c1d7e
Packit 1c1d7e
/** Class representing an entry (file or sub directory) in a directory */
Packit 1c1d7e
class DirEntry
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    enum EntryKind { Dir, File };
Packit 1c1d7e
    DirEntry(DirEntry *parent,FileDef *fd)  
Packit 1c1d7e
       : m_parent(parent), m_name(fd->name()), m_kind(File), m_fd(fd), 
Packit 1c1d7e
         m_isLast(FALSE) { }
Packit 1c1d7e
    DirEntry(DirEntry *parent,QCString name)              
Packit 1c1d7e
       : m_parent(parent), m_name(name), m_kind(Dir), 
Packit 1c1d7e
         m_fd(0), m_isLast(FALSE) { }
Packit 1c1d7e
    virtual ~DirEntry() { }
Packit 1c1d7e
    EntryKind kind() const { return m_kind; }
Packit 1c1d7e
    FileDef *file()  const { return m_fd; }
Packit 1c1d7e
    bool isLast() const    { return m_isLast; }
Packit 1c1d7e
    void setLast(bool b)   { m_isLast=b; }
Packit 1c1d7e
    DirEntry *parent() const { return m_parent; }
Packit 1c1d7e
    QCString name() const  { return m_name; }
Packit 1c1d7e
    QCString path() const  { return parent() ? parent()->path()+"/"+name() : name(); }
Packit 1c1d7e
Packit 1c1d7e
  protected:
Packit 1c1d7e
    DirEntry *m_parent;
Packit 1c1d7e
    QCString m_name;
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    EntryKind m_kind;
Packit 1c1d7e
    FileDef   *m_fd;
Packit 1c1d7e
    bool m_isLast;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
/** Class representing a directory tree of DirEntry objects. */
Packit 1c1d7e
class Directory : public DirEntry
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    Directory(Directory *parent,const QCString &name) 
Packit 1c1d7e
       : DirEntry(parent,name)
Packit 1c1d7e
    { m_children.setAutoDelete(TRUE); }
Packit 1c1d7e
    virtual ~Directory()              {}
Packit 1c1d7e
    void addChild(DirEntry *d)        { m_children.append(d); d->setLast(TRUE); }
Packit 1c1d7e
    QList<DirEntry> &children()       { return m_children; }
Packit 1c1d7e
    void rename(const QCString &name) { m_name=name; }
Packit 1c1d7e
    void reParent(Directory *parent)  { m_parent=parent; }
Packit 1c1d7e
Packit 1c1d7e
  private:
Packit 1c1d7e
    QList<DirEntry> m_children;
Packit 1c1d7e
};
Packit 1c1d7e
Packit 1c1d7e
void generateFileTree();
Packit 1c1d7e
Packit 1c1d7e
#endif
Packit 1c1d7e