Orb/Doxygen/src/memberdef.h
changeset 0 42188c7ea2d9
child 4 468f4c8d3d5b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Orb/Doxygen/src/memberdef.h	Thu Jan 21 17:29:01 2010 +0000
@@ -0,0 +1,381 @@
+/******************************************************************************
+ *
+ * 
+ *
+ * Copyright (C) 1997-2008 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 MEMBERDEF_H
+#define MEMBERDEF_H
+
+#include "qtbc.h"
+#include <qlist.h>
+#include <qdict.h>
+#include <qstack.h>
+
+#include "entry.h"
+#include "definition.h"
+#include "sortdict.h"
+
+class ClassDef;
+class NamespaceDef;
+class GroupDef;
+class FileDef;
+class MemberList;
+class MemberGroup;
+class ExampleSDict;
+class OutputList;
+class GroupDef;
+class QTextStream;
+class ArgumentList;
+class MemberDefImpl;
+
+struct SourceReference
+{
+  FileDef *fd;
+  QCString anchor;
+};
+
+class MemberDef : public Definition
+{
+  public:
+    
+    enum MemberType { 
+      Define,
+      Function, 
+      Variable, 
+      Typedef, 
+      Enumeration, 
+      EnumValue,
+      Signal,
+      Slot,
+      Friend,
+      DCOP,
+      Property,
+      Event
+    };
+
+    MemberDef(const char *defFileName,int defLine,
+              const char *type,const char *name,const char *args,
+              const char *excp,Protection prot,Specifier virt,bool stat,
+              Relationship related,MemberType t,const ArgumentList *tal,
+              const ArgumentList *al);
+   ~MemberDef(); 
+    DefType definitionType() const        { return TypeMember; }
+    // move this member into a different scope
+    void moveTo(Definition *);
+    
+    //-----------------------------------------------------------------------------------
+    // ----  getters -----
+    //-----------------------------------------------------------------------------------
+
+    // link id
+    QCString getOutputFileBase() const;
+    QCString getReference() const;
+    QCString anchor() const;
+
+    const char *declaration() const;
+    const char *definition() const;
+    const char *typeString() const;
+    const char *argsString() const;
+    const char *excpString() const;
+    const char *bitfieldString() const;
+    const char *extraTypeChars() const;
+    const QCString &initializer() const;
+    int initializerLines() const;
+    int  getMemberSpecifiers() const;
+    MemberList *getSectionList(Definition *d) const;
+
+    // scope query members
+    ClassDef *getClassDef() const;
+    FileDef  *getFileDef() const;
+    NamespaceDef* getNamespaceDef() const;
+
+    // grabbing the property read/write accessor names
+    const char *getReadAccessor() const;
+    const char *getWriteAccessor() const;
+    
+    // querying the grouping definition
+    GroupDef *getGroupDef() const;
+    Grouping::GroupPri_t getGroupPri() const;
+    const char *getGroupFileName() const;
+    int getGroupStartLine() const;
+    bool getGroupHasDocs() const;
+    QCString qualifiedName() const;
+    QCString objCMethodName(bool localLink,bool showStatic) const; 
+
+    // direct kind info 
+    Protection protection() const;
+    Specifier virtualness(int count=0) const;
+    MemberType memberType() const;
+    QCString   memberTypeName() const;
+
+    // getter methods
+    bool isSignal() const;
+    bool isSlot() const;
+    bool isVariable() const;
+    bool isEnumerate() const;
+    bool isEnumValue() const;
+    bool isTypedef() const;
+    bool isFunction() const;
+    bool isDefine() const;
+    bool isFriend() const;
+    bool isDCOP() const;
+    bool isProperty() const;
+    bool isEvent() const;
+    bool isRelated() const;
+    bool isForeign() const;
+    bool isStatic() const;
+    bool isInline() const;
+    bool isExplicit() const;
+    bool isMutable() const;
+    bool isGettable() const;
+    bool isSettable() const;
+    bool isReadable() const;
+    bool isWritable() const;
+    bool isAddable() const;
+    bool isRemovable() const;
+    bool isRaisable() const;
+    bool isFinal() const;
+    bool isAbstract() const;
+    bool isOverride() const;
+    bool isInitonly() const;
+    bool isOptional() const;
+    bool isRequired() const;
+    bool isNonAtomic() const;
+    bool isCopy() const;
+    bool isAssign() const;
+    bool isRetain() const;
+    bool isNew() const;
+    bool isSealed() const;
+    bool isImplementation() const;
+    bool isExternal() const;
+    bool isTemplateSpecialization() const;
+    bool hasDocumentedParams() const;
+    bool hasDocumentedReturnType() const;
+    bool isObjCMethod() const;
+    bool isObjCProperty() const;
+    bool isConstructor() const;
+    bool isDestructor() const;
+    bool hasOneLineInitializer() const;
+    bool hasMultiLineInitializer() const;
+    bool protectionVisible() const;
+
+    // output info
+    bool isLinkableInProject() const;
+    bool isLinkable() const;
+    bool hasDocumentation() const;  // overrides hasDocumentation in definition.h
+    //bool hasUserDocumentation() const; // overrides hasUserDocumentation
+    bool isBriefSectionVisible() const;
+    bool isDetailedSectionVisible(bool inGroup,bool inFile) const;
+    bool isDetailedSectionLinkable() const;
+    bool isFriendClass() const;
+    bool isDocumentedFriendClass() const;
+
+    MemberDef *reimplements() const;
+    LockingPtr<MemberList> reimplementedBy() const;
+
+    //int inbodyLine() const;
+    //QCString inbodyFile() const;
+    //const QCString &inbodyDocumentation() const;
+
+    ClassDef *relatedAlso() const;
+
+    bool hasDocumentedEnumValues() const;
+    MemberDef *getAnonymousEnumType() const;
+    bool isDocsForDefinition() const;
+    MemberDef *getEnumScope() const;
+    LockingPtr<MemberList> enumFieldList() const;
+
+    bool hasExamples();
+    LockingPtr<ExampleSDict> getExamples() const;
+    bool isPrototype() const;
+
+    // argument related members
+    LockingPtr<ArgumentList> argumentList() const;
+    LockingPtr<ArgumentList> declArgumentList() const;
+    LockingPtr<ArgumentList> templateArguments() const;
+    LockingPtr< QList<ArgumentList> > definitionTemplateParameterLists() const;
+
+    // member group related members
+    int getMemberGroupId() const;
+    MemberGroup *getMemberGroup() const;
+
+    bool fromAnonymousScope() const;
+    bool anonymousDeclShown() const;
+
+    // callgraph related members
+    bool hasCallGraph() const;
+    bool hasCallerGraph() const;
+    bool visibleMemberGroup(bool hideNoHeader);
+
+    MemberDef *templateMaster() const;
+    QCString getScopeString() const;
+    ClassDef *getClassDefOfAnonymousType();
+
+    // cached typedef functions
+    bool isTypedefValCached() const;
+    ClassDef *getCachedTypedefVal() const;
+    QCString getCachedTypedefTemplSpec() const;
+    QCString getCachedResolvedTypedef() const;
+
+    MemberDef *memberDefinition() const;
+    MemberDef *memberDeclaration() const;
+    MemberDef *inheritsDocsFrom() const;
+    MemberDef *getGroupAlias() const;
+
+    ClassDef *category() const;
+
+    //-----------------------------------------------------------------------------------
+    // ----  setters -----
+    //-----------------------------------------------------------------------------------
+
+    // set functions
+    void setMemberType(MemberType t);
+    void setDefinition(const char *d);
+    void setFileDef(FileDef *fd);
+    void setAnchor(const char *a);
+    void setProtection(Protection p);
+    void setMemberSpecifiers(int s);
+    void mergeMemberSpecifiers(int s);
+    void setInitializer(const char *i);
+    void setBitfields(const char *s);
+    void setMaxInitLines(int lines);
+    void setMemberClass(ClassDef *cd);
+    void setSectionList(Definition *d,MemberList *sl);
+    void setGroupDef(GroupDef *gd,Grouping::GroupPri_t pri,
+                     const QCString &fileName,int startLine,bool hasDocs,
+                     MemberDef *member=0);
+    void setExplicitExternal(bool b);
+    void setReadAccessor(const char *r);
+    void setWriteAccessor(const char *w);
+    void setTemplateSpecialization(bool b);
+    
+    void makeRelated();
+    void makeForeign();
+    void setHasDocumentedParams(bool b);
+    void setHasDocumentedReturnType(bool b);
+    void setInheritsDocsFrom(MemberDef *md);
+    void setTagInfo(TagInfo *i);
+    void setArgsString(const char *as);
+
+    // relation to other members
+    void setReimplements(MemberDef *md);
+    void insertReimplementedBy(MemberDef *md);
+
+    // in-body documentation
+    //void setInbodyDocumentation(const char *docs,const char *file,int line);
+
+    void setRelatedAlso(ClassDef *cd);
+
+    // enumeration specific members
+    void insertEnumField(MemberDef *md);
+    void setEnumScope(MemberDef *md);
+    void setEnumClassScope(ClassDef *cd);
+    void setDocumentedEnumValues(bool value);
+    void setAnonymousEnumType(MemberDef *md);
+
+    // example related members
+    bool addExample(const char *anchor,const char *name,const char *file);
+    
+    // prototype related members
+    void setPrototype(bool p);
+
+    // argument related members
+    void setArgumentList(ArgumentList *al);
+    void setDeclArgumentList(ArgumentList *al);
+    void setDefinitionTemplateParameterLists(QList<ArgumentList> *lists);
+    void setTypeConstraints(ArgumentList *al);
+
+    // namespace related members
+    void setNamespace(NamespaceDef *nd);
+
+    // member group related members
+    void setMemberGroup(MemberGroup *grp);
+    void setMemberGroupId(int id);
+    void makeImplementationDetail();
+
+    // anonymous scope members
+    void setFromAnonymousScope(bool b);
+    void setFromAnonymousMember(MemberDef *m);
+
+    void enableCallGraph(bool e);
+    void enableCallerGraph(bool e);
+
+    void setTemplateMaster(MemberDef *mt);
+    void addListReference(Definition *d);
+    void setDocsForDefinition(bool b);
+    void setGroupAlias(MemberDef *md);
+
+    void cacheTypedefVal(ClassDef *val,const QCString &templSpec,const QCString &resolvedType);
+    void invalidateTypedefValCache();
+
+    void invalidateCachedArgumentTypes();
+    
+    // declaration <-> definition relation
+    void setMemberDefinition(MemberDef *md);
+    void setMemberDeclaration(MemberDef *md);
+        
+    void setAnonymousUsed();
+    void copyArgumentNames(MemberDef *bmd);
+
+    void setCategory(ClassDef *);
+    
+    //-----------------------------------------------------------------------------------
+    // --- actions ----
+    //-----------------------------------------------------------------------------------
+
+    // output generation
+    void writeDeclaration(OutputList &ol,
+                   ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
+                   bool inGroup); 
+    void writeDocumentation(MemberList *ml,OutputList &ol,
+                            const char *scopeName,Definition *container,
+                            bool inGroup,bool showEnumValues=FALSE);
+    void warnIfUndocumented();
+    
+    MemberDef *createTemplateInstanceMember(ArgumentList *formalArgs,
+               ArgumentList *actualArgs);
+
+    void writeEnumDeclaration(OutputList &typeDecl,
+            ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd);
+
+    void findSectionsInDocumentation();
+    
+    bool visited;
+   
+  protected:
+    void flushToDisk() const;
+    void loadFromDisk() const;
+  private:
+    void lock() const;
+    void unlock() const;
+    void saveToDisk() const;
+    void makeResident() const;
+
+    static int s_indentLevel;
+    // disable copying of member defs
+    MemberDef(const MemberDef &);
+    MemberDef &operator=(const MemberDef &);
+
+    void writeLink(OutputList &ol,
+                   ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
+                   bool onlyText=FALSE);
+
+    MemberDefImpl *m_impl;
+    int m_cacheHandle;
+    off_t m_storagePos;     // location where the item is stored in file (if impl==0)
+    bool m_flushPending;
+};
+
+#endif