summaryrefslogtreecommitdiff
path: root/src/memberdef.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/memberdef.h')
-rw-r--r--src/memberdef.h421
1 files changed, 421 insertions, 0 deletions
diff --git a/src/memberdef.h b/src/memberdef.h
new file mode 100644
index 0000000..8850035
--- /dev/null
+++ b/src/memberdef.h
@@ -0,0 +1,421 @@
+/******************************************************************************
+ *
+ *
+ *
+ * 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 MEMBERDEF_H
+#define MEMBERDEF_H
+
+#include "qtbc.h"
+#include <qlist.h>
+#include <qdict.h>
+#include <qstack.h>
+
+#include "types.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;
+
+/** A model of a class/file/namespace member symbol. */
+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
+ MemberDef *deepCopy() const;
+ 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 isFunctionPtr() 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 isWeak() const;
+ bool isStrong() const;
+ bool isUnretained() const;
+ bool isNew() const;
+ bool isSealed() const;
+ bool isImplementation() const;
+ bool isExternal() const;
+ bool isAlias() const;
+ bool isDefault() const;
+ bool isDelete() const;
+ bool isNoExcept() 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;
+ bool isReimplementedBy(ClassDef *cd) 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;
+ void setEnumBaseType(const QCString &type);
+ QCString enumBaseType() 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;
+ MemberDef *categoryRelation() const;
+
+ QCString displayName(bool=TRUE) 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);
+ void setType(const char *t);
+ void setAccessorType(ClassDef *cd,const char *t);
+
+ // 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 *);
+ void setCategoryRelation(MemberDef *);
+
+ void setDocumentation(const char *d,const char *docFile,int docLine,bool stripWhiteSpace=TRUE);
+ void setBriefDescription(const char *b,const char *briefFile,int briefLine);
+ void setInbodyDocumentation(const char *d,const char *inbodyFile,int inbodyLine);
+
+ void setHidden(bool b);
+
+ //-----------------------------------------------------------------------------------
+ // --- actions ----
+ //-----------------------------------------------------------------------------------
+
+ // output generation
+ void writeDeclaration(OutputList &ol,
+ ClassDef *cd,NamespaceDef *nd,FileDef *fd,GroupDef *gd,
+ bool inGroup,ClassDef *inheritFrom=0,const char *inheritId=0);
+ void writeDocumentation(MemberList *ml,OutputList &ol,
+ const char *scopeName,Definition *container,
+ bool inGroup,bool showEnumValues=FALSE,bool
+ showInline=FALSE);
+ void writeMemberDocSimple(OutputList &ol,Definition *container);
+ 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;
+ void _computeLinkableInProject();
+ void _computeIsConstructor();
+ void _computeIsDestructor();
+ void _getLabels(QStrList &sl,Definition *container) const;
+ void _writeCallGraph(OutputList &ol);
+ void _writeCallerGraph(OutputList &ol);
+ void _writeReimplements(OutputList &ol);
+ void _writeReimplementedBy(OutputList &ol);
+ void _writeExamples(OutputList &ol);
+ void _writeTypeConstraints(OutputList &ol);
+ void _writeEnumValues(OutputList &ol,Definition *container,
+ const QCString &cfname,const QCString &ciname,
+ const QCString &cname);
+ void _writeCategoryRelation(OutputList &ol);
+
+ 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;
+ uchar m_isLinkableCached; // 0 = not cached, 1=FALSE, 2=TRUE
+ uchar m_isConstructorCached; // 0 = not cached, 1=FALSE, 2=TRUE
+ uchar m_isDestructorCached; // 0 = not cached, 1=FALSE, 2=TRUE
+};
+
+void combineDeclarationAndDefinition(MemberDef *mdec,MemberDef *mdef);
+
+#endif